Ubuntu 10.04搭建Scratchbox交叉编译环境

红色:修改或新增内容

紫色:选择的选项


一、Scratchbox简介

Scratchbox is a configuration and compilation environment for building Linux software and entire Linux distributions. The basic idea of Scratchbox is to offer developers an environment that works and looks like the target environment before the target environment is available.


二、安装Scratchbox

1.添加软件源

lingd@Ubuntu:~$ sudo vi /etc/apt/sources.list

/etc/apt/sources.list最后面增加下面内容:

deb stable main


2.更新软件源

lingd@ubuntu:~$ sudo apt-get update


3.安装软件包 

lingd@ubuntu:~$ sudo apt-get install scratchbox-core scratchbox-libs scratchbox-devkit-qemu

lingd@ubuntu:~$ sudo apt-get install scratchbox-devkit-debian scratchbox-devkit-perl scratchbox-toolchain-cs2007q3-glibc2.5-arm7


注:

以下是必须安装的

scratchbox-core: scratchbox环境, 常用工具及本地编译器. 

scratchbox-libs: scratchbox-core, devkits和toolchains所需的库.

scratchbox-devkit-qemu: scratchbox的ARM指令集仿真器. scratchbox中提供了qemu和sbrsh两种仿真手段. 要使用qemu仿真, 需安装scratchbox-devkit-cputransp包,不过现在scratchbox-devkit-cputransp包已被scratchbox-devkit-qemu取代了

以下是可选的

scratchbox-devkit-debian: 用于Debian包开发的环境和工具.

scratchbox-devkit-perl: 额外的perl模块.

scratchbox-toolchain-cs2007q3-glibc2.5-arm7: 交叉编译工具包,也可以选择其他交叉编译工具包

scratchbox-devkit-doctools: 文档生成工具. 这个包很大,我没有安装



三、禁止VDSO

VDSOs (Virtual Dynamically-linked Shared Objects 虚拟动态共享对象) are a way to export kernel space routines to user space applications, using standard mechanisms for linking and loading (i.e. standard ELF format).


禁止Ubuntu 10.04的VDSO功能

lingd@ubuntu:~$ sudo vi /etc/sysctl.conf

编辑/etc/sysctl.conf, 最后面增加下面两行:

vm.vdso_enabled = 0

vm.mmap_min_addr = 4096


使结果生效,运行

lingd@ubuntu:~$ sudo sysctl -p

vm.vdso_enabled = 0

vm.mmap_min_addr = 4096


为了长期生效,编辑/etc/rc.local,在最后一行(exit 0)前面, 增加:sysctl -p



四、添加scratchbox用户

1.增加用户到scratchbox中

lingd@ubuntu:~$ sudo /scratchbox/sbin/sbox_adduser lingd

[sudo] password for lingd: 

Add user lingd to group 'sbox'? [yes/no] (yes): yes

正在添加用户"lingd"到"sbox"组...

Adding user lingd to group sbox

完成。

Scratchbox user account for user lingd added

2.查看用户lingd是否已在sbox组中

lingd@ubuntu:~$ groups

lingd adm dialout cdrom plugdev lpadmin admin sambashare sbox

如果没有看到sbox组,那就退出后重新登录;否则,/scratchbox/login会出现

lingd@ubuntu:~$ /scratchbox/login

bash: /scratchbox/login: 权限不够



五、配置scratchbox

1.进入scratchbox环境

lingd@ubuntu:~$ /scratchbox/login 或 scratchbox


You dont have active target in scratchbox chroot.

Please create one by running "sb-menu" before continuing



Welcome to Scratchbox, the cross-compilation toolkit!


Use 'sb-menu' to change your compilation target.

See /scratchbox/doc/ for documentation.


[sbox-NO-TARGET: ~] > 


2.配置编译目标 

[sbox-NO-TARGET: ~] > sb-menu

出现交互式配置菜单,选择建立一个target

Setup      Setup a target

选择创建一个新target

<NEW>  Create a new target    --> 输入target名字: arm

选择compiler(编译器)

cs2007q3-glibc2.5-arm7  cross 

选择devkits(开发辅助工具),一定要选择qemu,其他根据自身需要

qemu

选择好devkits后,选择

DONE              Done selecting  

选择模拟器,arm模拟器为qemu-arm

qemu-arm-sb     Emulation    

Do you wish extract a rootstrap on the target ? --> no

Do you wish install files to the target ? --> yes

直接按照默认选择(或也可以通过按空格来选择自己想要安装的文件)--> OK

Do you wish to select the target --> yes

此时sb-menu会退出。

参考文献4有图解scratchbox的配置过程


六、编译测试

1.HelloWorld

在/scratchbox/packages有一些例子代码,HelloWorld就是其中一个。因为在/scratchbox/packages没有足够权限,所以只能拷贝hello.c到用户主目录再编译

[sbox-arm: ~] > cp /scratchbox/packages/hello.c hello.c

[sbox-arm: ~] > gcc hello.c -o hello   

[sbox-arm: ~] > ls

hello  hello.c

测试文件类型:

[sbox-arm: ~] > file hello

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

可以看到可执行文件hello的运行平台为 ARM


2.PC上运行HelloWorld(在scratchbox环境下)

[sbox-arm: ~] > ./hello 

hello world

上面显示的结果,实际上,是在qemu模拟器上运行该程序的结果

在 Selected devkits(辅助开发工具)中要选择qemu配置模拟器时,一定要选为qemu-arm-XX(我选的是qemu-arm-sb);否则运行./hello会出现:

[sbox-arm: ~] > ./hello 

Error -8 while loading ./hello


3.arm开发板上运行HelloWorld

hello 文件下载到开发板当前目录,运行:

chmod a+x hello

./hello

可以在开发板上看到程序的运行结果。


七、关于登陆scratchbox出现Scratchbox is not properly set up的解决方法

官网的解释:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25204.html