LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2286|回复: 12

找到一新玩具 sbox2

[复制链接]
发表于 2009-2-28 14:00:09 | 显示全部楼层 |阅读模式
sbox2
http://www.freedesktop.org/wiki/Software/sbox2
http://www.scratchbox.org/ 老版本
正常交叉编译方式,经常需要特别的 hack、特别的补丁,费时费力,有时几乎是不可能完成的任务。
曾有一个想法,把交叉编译伪装成本地编译,方便没有本地编译能力的嵌入式平台扩展软件。
上面的软件就是干这个活的,需要配合 qemu 或 真实目标板、交叉编译工具链、目标板 rootfs 使用。

这个或许能提供一种新的方式进行 CLFS:
需要机器 host target 各一部,均安装 GNU/Linux 系统,
在 host 上建立 sbox2 可用的针对 target 的工具链,
在 target 上安装 sbox2 服务端,
在 host 上用 sbox2 开始伪本地编译建立 target 可用 rootfs、内核,
在 target 上用新建系统启动,
完成。

最近,正琢磨给手头的 moto e2 大换血,应该能用上。
可用资源 http://wiki.openezx.org/Main_Page
发表于 2009-2-28 14:41:58 | 显示全部楼层
不是太明白,過程是:

1. 在 host 虛擬出 target 並在 host 運行 target 虛擬機
2. 期間 host 際作 toolchain 並傳遞到 target
3. 在 target 裡制作系統

跟傳統 CLFS 區別在於現在的 target 並非物理實體,而是 host 裡的虛擬機?

是這意思?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-28 14:55:40 | 显示全部楼层
偶个人的理解:
在 host 上启动 sbox2 后,
在 host 上配置软件,./configure时,传送大部分测试部分到 target 执行,configure过程中的实际编译过程仍在 host,使用的也是相应的交叉编译工具链,[color="Red"]效果与直接在 target 本地配置一样,
在 host 上编译安装软件,使用的仍是 make,sbox2 自动转换用交叉编译工具链编译,[color="Red"]效果与直接在 target 本地编译一样。

还在啃官网文档,理解也许有些偏差。

debian 仓库已经收录 sbox2,包名 scratchbox2。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-8 00:23:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-8 10:27:50 | 显示全部楼层
作为一懒人,资源利用最大化总是比较好的。

建立工具链:
延用 [color="Blue"]从源码构建本地编译GNU/Linux系统(gcc-4.3.1) 的方法,在 i686-pc-linux-gnu 系统上建立 arm-unknown-linux-gnu 交叉编译工具链。

仅需少许改动:
1、定义目标系统类型为 arm-unknown-linux-gnu。
2、启用 glibc-ports,这个之前已经加入。
3、交叉编译 glibc-2.7 需要额外补丁
6225_all_glibc-2.7-cargs6.patch、6224_all_glibc-2.7-lowlevellock-includes.patch、100-ARM-asm-page.patch (或者 touch ${ROOTFS}/usr/include/asm/page.h)
补丁源自
http://archives.gentoo.org/gento ... 578634ef937ed59.xml
http://sourceware.org/ml/crossgcc/2008-05/msg00018.html
另,清空配置过程中的 CFLAGS="..." 变量。

目标机 moto e2 CPU 是 "Intel XScale-PXA27x rev 7 (v5l)"。
启用 ARM EABI 应是好主意(arm-unknown-linux-gnueabi),更好的主意是使用 uclibc(arm-unknown-linux-uclibceabi),正式开工时再修改。
http://wiki.debian.org/ArmEabiPort
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-8 10:39:08 | 显示全部楼层
建立临时系统
继续延用上面方法,交叉编译建立临时系统,应不需太大改动即可顺利完成。

现在需要验证一些 sbox2 相关的想法,使用一个现成的系统是懒人该做的。
准备选用 debian arm lenny 分支,目标机暂用 qemu-system-arm 代替。

安装过程中出现问题:仿照 x86 光盘安装方式失败。
  1. ./local/bin/qemu-system-arm -hda hd.img -cdrom /tmp/debian-500-arm-netinst.iso -boot d
  2. [color="Red"]Kernel image must be specified[/color]
复制代码
这不奇怪,arm 机器没有 BIOS,一般都会使用 bootloader 直接加载内核。
bootloader 工作 qemu 可以代劳,看来光盘安装难。

再来,网络安装好了。
http://ftp.debian.org/debian/dis ... ges/iop32x/netboot/
http://ftp.debian.org/debian/dis ... ges/ixp4xx/netboot/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-8 18:52:55 | 显示全部楼层
参考
http://www.aurel32.net/info/debian_arm_qemu.php [color="Red"](可启动但无法完成安装)
http://909ers.apl.washington.edu/~dushaw/ARM/
http://crosscompile.org/arm-debian-on-ubuntu?v=4
网络安装还是失败。

再换条道,用 debootstrap 方式,很顺利的得到一个 arm 的 rootfs,
  1. debootstrap --arch arm lenny lenny-rootfs http://ftp.debian.org/debian/
复制代码
之后,拷贝到虚拟硬盘。
还差 linux-kernel(debian arm 内核不方便直接用,需手工生成 initrd),尝试直接配置交叉编译多次未果(无响应、或无显示)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-8 19:22:28 | 显示全部楼层
http://people.debian.org/~aurel32/qemu/arm/
这里有 qemu 可用的 debian arm etch 映像,借用一下好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-11 21:43:21 | 显示全部楼层
绕了一大圈,还是回到原地,继续建立临时系统

宿主这边
安装 sbox2 很顺利,但还没有完全跑起来,通不过测试。
查看 debian 中的依赖关系有 fakeroot,补上,还是通不过测试。
这中间已经翻遍 sbox2 相关文档、邮件列表。
原来 sbox2 要使用 qemu user mode,具体到 arm 平台要使用 qemu-arm。

单独运行
  1. qemu-arm -L /arm-linux-gnu/rootfs /arm-linux-gnu/rootfs/bin/echo a
复制代码
失败,会耗尽系统所有内存,终于找到问题了,之前安装时只是用其顺利运行静态编译 的 hello,world 便误以为正常安装,qemu 的邮件列表已快被翻个底掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 23:18:27 | 显示全部楼层
上面的怀疑对象又错了。

  1. $ /bin/uname -a
  2. Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 [color="Red"]i686[/color] GNU/Linux
  3. $
  4. $ qemu-arm -L /arm-linux-gnu/lenny /arm-linux-gnu/lenny/bin/uname -a
  5. Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 [color="Red"]armv5tel[/color] GNU/Linux
复制代码

表明 qemu 已正确安装,lenny 是前面 debootstrap 得到的 debian arm。

问题应该出在自己建立的临时系统 /arm-linux-gnu/rootfs 上。
通过 strace 比对,发现 qemu-arm 访问 /arm-linux-gnu/rootfs/lib/udev/devices/ 时异常,这个目录下有指向 /dev/ 下一些文件的软链接,删除后可以正常运行:
  1. $ qemu-arm -L /arm-linux-gnu/rootfs /arm-linux-gnu/rootfs/bin/uname -a
  2. Linux localhost 2.6.28.7 #1 SMP Thu Mar 5 00:36:51 CST 2009 [color="Lime"]armv5tel[/color] GNU/Linux
复制代码

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=297572 描述了类似问题,第一次看时,还以为 qemu-0.10.0 已经彻底解决了问题。



新问题,还是无法通过 hello,world 的测试
  1. $ arm-unknown-linux-gnu-gcc -o hello hello.c
  2. $ file hello
  3. hello: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped
  4. $ qemu-arm -L /arm-linux-gnu/rootfs ./hello
  5. hello,world!
  6. $ rm hello
  7. $
  8. $ sbox2 gcc -o hello hello.c
  9. $ file hello
  10. hello: ELF 32-bit LSB executable, ARM, version 1, for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped
  11. $ sbox2 ./hello
  12. [color="Red"]/lib/ld-linux.so.2: No such file or directory[/color]
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表