嵌入式linux 3.0.1的Ruby1.9.3移植小记

2012年7月29日 | By JonsonXP | Filed in: 原创, 嵌入式 Embedded System.

0.>背景

手里有一块飞凌嵌入式的ok6410开发板,最近稍稍有空拿出来玩一下。因为S3C6410 arm芯片性能还可以,就尝试把Ruby装进去进行嵌入式开发。

ARM嵌入式项目通常使用c语言编写,在pc机上使用arm编译器交叉编译,然后下载到目标板上执行。不论对于新人还是老人这个过程都稍显繁琐。在性能达到需求的情况下,如果可以使用脚本语言进行嵌入式编程,可以在线编写调试,又便于移植,会非常方便。本文是老J将Ruby1.9.3移植到ok6410的过程小计。

本文目标:在ok6410(linux 3.0.1)板子上运行Ruby1.9.3,并可以使用twitter gem发推(需要openssl)。

1.>系统环境

主机在虚拟机环境下安装Ubuntu做为交叉编译开发环境。交叉编译环境搭建参照:http://dianzidianlu.blogbus.com/logs/203893985.html

目标板ok6410。根据官方指示安装了linux3.0.1系统。

交叉编译源代码放于 ~/arm

交叉编译生成文件放于 /arm

2.>交叉编译安装OpenSSL(不需要SSL,Https可跳过此步)

下载openssl-1.0.1c,解压放于~/arm/openssl-1.0.1c,进入该目录。

1)  ./config no-asm shared –prefix=/arm/openssl
2) 修改Makefile CC=arm-none-linux-gnueabi-gcc

make

3) make install

将/arm/openssl下载到目标板的/arm/openssl/下

3.>交叉编译Ruby1.9.3

下载ruby-1.9.3-p194,解压放于~/arm/ruby-1.9.3-p194,进入该目录。

(参照 http://www.iteye.com/topic/323293)

创建mconfig.sh

#! /bin/sh
export ARM_TOOLS=/usr/local/arm/4.3.2/bin #你的arm 交叉编译工具目录
export CC=$ARM_TOOLS/arm-linux-gcc
export LD=$ARM_TOOLS/arm-linux-gcc
export AR=$ARM_TOOLS/arm-linux-ar
export RANLIB=$ARM_TOOLS/arm-linux-ranlib
export ac_cv_func_getpgrp_void=yes
export ac_cv_func_setpgrp_void=yes
export PATH=$ARM_TOOLS:$PATH

autoreconf

./configure --host=arm-linux --target=arm-linux --disable-pthread --enable-shared --prefix=/arm/ruby 2>&1 | tee config.out

make 2>&1 | tee make.out
make install 2>&1 | tee install.out

至此ruby1.9.3交叉编译成功并存放在/arm/ruby中。但该版本库中没有包含socket和openssl。

4.>编译Socket

socket是ruby的网络组件。我在默认编译时出现不支持ipv6导致编译后的库中不包含socket的问题。如果你也遇到同样问题可按照如下处理:

编辑 ~/arm/ruby-1.9.3-p194/ext/socket/extconf.rb,在

default_ipv6 = /mswin|cygwin|beos|haiku/ !~ RUBY_PLATFORM行之前加入ipv6=false。

回到~/arm/ruby-1.9.3-p194目录

make 2>&1 | tee make.out
make install 2>&1 | tee install.out

5.>编译OpenSSL for Ruby

交叉编译时ruby的openssl没有生成,查看make.out发现openssl的configure失败。老J没有深究个中原因,但Google一下发现很多人遇到同样问题。网上的解决方案都不完全适合交叉编译环境。

首先进入 ~/arm/ruby-1.9.3-p194/ext/openssl

ruby extconf.rb 进行配置并生成Makefile。修改Makefile的一下对应行。主要是设置编译器,交叉编译后openssl的lib、ruby的lib路径。

> topdir = /arm/ruby/include/ruby-1.9.1
> hdrdir = /arm/ruby/include/ruby-1.9.1
> arch_hdrdir = /arm/ruby/include/ruby-1.9.1/$(arch)
> prefix = /arm/ruby
> CC = arm-linux-gcc
> CXX = arm-linux-g++
> CFLAGS   = -fPIC -fno-strict-aliasing -g -g -O2 -fPIC -I~/arm/openssl-target/include
> ldflags  = -L.  -rdynamic -Wl,-export-dynamic -L/arm/ruby/lib
> RUBY_INSTALL_NAME = ruby
> RUBY_SO_NAME = ruby
> arch = arm-linux
> INSTALL = /arm/ruby/ -c

设置完成后保存。依次进行make,make install。

6.>下载

最后将/arm目录下载到目标板的/arm目录就可以使用了。

移植好的ruby可以通过https协议访问网络。这样就可以使用微博等网站的oauth协议通信。让嵌入式项目的网络通信更加安全。


Tags: , , ,

One comment on “嵌入式linux 3.0.1的Ruby1.9.3移植小记

  1. 大力说道:

    实际(成品版)成本要多少?

发表评论

电子邮件地址不会被公开。 必填项已用*标注