|
楼主 |
发表于 2009-3-17 21:35:12
|
显示全部楼层
四、设置 sbox2 环境
完成步骤三后,普通用户 arm-linux-gnu 家目录下有如下目录结构:
/arm-linux-gnu/tools/
/arm-linux-gnu/tools/bin/arm-unknown-linux-gnueabi-* 交叉编译工具链
/arm-linux-gnu/rootfs/ 目标平台临时系统
再次强调:sbox2 可访问整个文件系统,绝不能以 root 身份运行,否则误操作可损坏宿主系统。
选择合适的用户运行 sbox2
选择1、把普通用户 arm-linux-gnu 的 shell 配置清理成一般普通用户状态。
交叉编译过程中的环境变量对 sbox2 有一些影响。
如果用的是 bash,可以这样- $ mkdir -pv ~/.bak
- $ mv ~/.bash* ~/.bak
- $ cp -a /etc/skel/.[^.]* ~/
复制代码 退出之后,重登录。
选择2、可以建立一个与 普通用户 arm-linux-gnu 同 userid 的新用户,如 arm-box2,并以 arm-box2 身份登录。- # useradd -m -o -d /home/arm-box2 -u $(id -u arm-linux-gnu) -g $(id -g arm-linux-gnu) -s /bin/bash arm-box2
复制代码
验证 qemu user mode 安装是否有效
运行下面命令- $ qemu-arm -L /arm-linux-gnu/rootfs /arm-linux-gnu/rootfs/bin/uname -a
- Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 [color=SeaGreen]armv5tel[/color] GNU/Linux
复制代码 看到类似上面的显示结果,表明 qemu user mode 安装有效。
请注意,如执行命令后,无输出,并且内存占用不断上升,请查找并删除 目标系统 rootfs /arm-linux-gnu/rootfs 下指向 根文件系统中目录的链接,这是一个 bug,之后再测试。
下面命令应可找到出问题的链接文件,请手工删除- for x in $(find /arm-linux-gnu/rootfs -type l); do
- [ ! -z $(ls -l $x | awk -F" " '{print $10}' | grep "^/") ] && echo $x
- done
复制代码
为运行 sbox2 的用户准备环境
- cd /arm-linux-gnu/rootfs
- sbox2-init -c /usr/bin/qemu-arm -m simple ARM /arm-linux-gnu/tools/bin/arm-unknown-linux-gnueabi-gcc
复制代码 cd 是必须的,sbox2-init 初始化当前目录为目标平台根目录;
-c /usr/bin/qemu-arm 必须指明绝对路径,否则后面会有些奇怪的问题;
-m simple 指明 sbox2 默认的路径映射规则,/usr/share/scratchbox2/lua_scripts/pathmaps/* 是具体的规则;
ARM 是为这个目标平台起的名字,随意;
/arm-linux-gnu/tools/bin/arm-unknown-linux-gnueabi-gcc 必须指明绝对路径,否则后面会有些奇怪的问题,用于指明交叉编译工具链路径。
运行时,sbox2 会下载 libtool 并以合适的参数编译、安装,
当显示成功设置时,最后显示sbox2-init completed successfully, have fun!
运行下面命令- $ sbox2 /bin/uname -a
- Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 arm GNU/Linux
- $
- $ sbox2 /arm-linux-gnu/rootfs/bin/uname -a
- Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 armv5tel GNU/Linux
- $
- $ sbox2 /usr/bin/gcc -v
- Using built-in specs.
- Reading specs from /usr/share/scratchbox2/modeconf/gcc-specs.devel
- rename spec cpp to old_cpp
- Target: arm-unknown-linux-gnueabi
- Configured with: /arm-linux-gnu/source/gcc-4.3.3/configure --prefix=/arm-linux-gnu/tools --build=i686-cross-linux-gnu --host=i686-cross-linux-gnu --target=arm-unknown-linux-gnueabi --with-sysroot=/arm-linux-gnu/rootfs --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix --disable-multilib
- Thread model: posix
- gcc version 4.3.3 (GCC)
- $
- $ sbox2 /usr/bin/ld
- /arm-linux-gnu/tools/bin/arm-unknown-linux-gnueabi-ld: no input files
复制代码 看到类似上面的显示结果,表明 qemu user mode 安装有效。
另一个验证方法,是编译经典的 hello,world。- $ cat > hello.c << eof
- #include <stdio.h>
- int main ()
- {
- printf ("hello,world!\n");
- return 0;
- }
- eof
- $
- $ sbox2 gcc -o hello hello.c
- $ file ./hello
- hello: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped
- $
- $ sbox2 ./hello
- hello,world!
复制代码 |
|