打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
交叉编译模拟环境sbox2的使用

sbox2简介

scratchbox2(简称sbox2)是一个交叉编译模拟器,可以模拟ARMX86MIPS等平台。scratchbox2scratchbox1的第二版。但是第二版完全舍弃的第一版,在使用上第二版比第一版方便、易用很多。

20094月,Scratchbox2正式发布,20103月,Nokia正式接手scratchbox2 的维护工作。Nokia接手Scratchbox2的目的很明显,就是为Maemo手机平台提供一个模拟的软件开发环境。

Scratchbox2的使用要配合qemu、交叉工具链和目标平台的根文件系统来使用。qemu是目标平台的CPU虚拟机,如ARM的虚拟机是qemu-arm。交叉工具链可以是自己制作的,或者从CodeSourcery网站等下载的交叉编译工具链。根文件系统是目标平台的根文件系统。

 

安装scratchbox2qemu

ubuntu10.04下可以使用apt-get install安装scratchbox2qemu-arm。其中qemu-arm包含在qemu-kvm-extras中,安装如下:

$ sudo apt-get install scratchbox2 qemu-kvm-extras

 

安装交叉编译工具链

这里我们使用的是用crosstool制作的gcc-3.4.5-glib-2.3.6的交叉工具链,工具链安装在/opt/crosstool/目录下,如:

$ ls /opt/crosstool/gcc-3.4.5-glibc-2.3.6/

arm-linux                      bin          include  lib      man

arm-linux.crosstoolconfig.txt  distributed  info     libexec  tmp

 

准备根文件系统

目标平台的根文件系统必须遵循FHS 根文件系统结构,根文件系统的必要内容是在lib目录下必须有C动态库。

如下,建立根文件系统和拷贝必要C库。

$ cd /opt

$ mkdir myrootfs

$ cd myrootfs/

$ mkdir bin dev etc lib sbin usr tmp proc sys

$ cp -a /opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/* lib/

这里以/opt/myrootfs作为目标平台的根目录,并且拷贝了gcc-3.4.5-glibc-2.3.6工具链的C库到这个根目录下。

 

配置模拟环境

以上3步完成之后,下面就可以使用安装的scratchbox2配置目标平台的模拟环境。配置模拟环境使用的是sb2-init工具,如下:

$ sudo sb2-init -c qemu-arm  ARM3.4.5  /opt/crosstool/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc

其中,“-c qemu-arm ”表示使用qemu-arm虚拟机;“ARM3.4.5”表示这次配置的模拟环境的名称;“/opt/crosstool/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc ”表示在这个模拟环境中gcc对应的程序是哪个。

第一次配置时,会先下载安装libtool,配置成功,出现下面的提升。

sb2-init completed successfully, have fun!

 

使用模拟器

模拟环境配置好后,就可以在任何地方使用sb2来编程程序,如要交叉编译hello.c程序:

$ sudo sb2 gcc hello.c -o hello

查看编译出来的hello程序信息,可以看到在sbox2模拟环境中,使用gcc编译的程序是基于arm平台的,如下:

$ file hello

hello: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped

可以在模拟环境中运行程序:

$ sudo sb2 ./hello

hello farsight!

 

也可以完全进入SB2的模拟环境中,进行软件的编译:

$ sudo sb2 -t ARM3.4.5

-t ARM3.4.5”表示使用哪个虚拟环境,对应sb2-init配置时指定的虚拟环境名称。进入模拟环境的界面如下:

[SB2 simple ARM3.4.5] root@dtop ~ $

这个环境就是目标机的模拟环境,查看gcc版本信息:

[SB2 simple ARM3.4.5] root@dtop ~ $ gcc -v

Reading specs from /opt/crosstool/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/specs

Reading specs from /usr/share/scratchbox2/../../share/scratchbox2/modeconf/gcc-specs.simple

rename spec cpp to old_cpp

Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-

2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/

tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/

arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long

Thread model: posix

gcc version 3.4.5

可以看到,在模拟环境中,gcc是交叉工具链的arm-linux-gcc

 

综述

sbox2配置的模拟环境中编译一些利用autotool发布的开源软件比普通的交叉编译方法方便很多。如SDLffmpegvlc等软件在这个模拟器下编译,在配置时只需使用 “ –prefix ”选项指定安装路径就可以了。指定--prefix选项之后,make install时会把程序安装到--prefix指定的目录,此时用ldd来查看程序动态链接库依赖关系,会看到程序依赖本身动态库的路径与--prefix指定有关。但是这并不是意味着程序运行时一定只能到--prefix指定的目录寻找该动态库,实际上,会在LD_LIBRARY_PATH指定目录、/lib和/usr/lib标准库目录、/etc/ld.conf中的目录寻找动态库。所以把--prefix中的动态库移动到/lib或/usr/lib中程序同样能够正常运行。有了这种方式,交叉编译时利用--prefix指定安装目录,不影响宿主机,还可以把--prefix中的安装库文件直接拷贝到目标机的/lib或/usr/lib中,程序正常运行。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ubuntu 10.04搭建Scratchbox交叉编译环境
移植lighttpd到arm
构建嵌入式 Linux 开发环境 V0.1
JZ2440移植Qte4.4.3
搭建交叉调试环境arm
几种Linux嵌入式开发环境的简单介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服