在 Linux from Scratch 之后我已经成功地为 ARM 构建了一个工具链 一只 ARM 。这是本书的第 6 章,在 ARM 板本身上我可以毫无问题地继续下去。 我的问题是我是否可以使用准备好的环境在我的 x86_64 Fedora 16 笔记本电脑上继续构建第 6 章的软件? 我认为虽然我已经设置了所有二进制文件,但我可以将它们复制到笔记本电脑,在里面进行 chroot 并感觉自己在 ARM 板上,但是使用书中的命令没有结果:
`# chroot "$LFS" /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash --login +h
chroot: failed to run command `/tools/bin/env': No such file or directory`
二进制文件在那里,但它不属于这个系统:
`# ldd /tools/bin/env
not a dynamic executable`
二进制文件是按照书上的编译的:
#readelf -l/tools/bin/env | grep 解释器
[请求程序解释器:/tools/lib/ld-linux.so.3]
所以我想知道是否有一种方法,比如为 CC LD READELF 使用适当的环境变量,继续在 x86_64 主机上使用这些工具为 ARM 构建。
谢谢。
最佳答案
是的,您当然可以 chroot 到 x86 机器上的 ARM rootfs。
基本上,像这样:
$ sudo chroot /path/to/arm/rootfs /bin/sh
sh-4.3# ls --version 2>&1 | head
/bin/ls: unrecognized option '--version'
BusyBox v1.22.1 (2017-03-02 15:41:43 CST) multi-call binary.
Usage: ls [-1AaCxdLHRFplinsehrSXvctu] [-w WIDTH] [FILE]...
List directory contents
-1 One column output
-a Include entries which start with .
-A Like -a, but exclude . and ..
sh-4.3# ls
bin css dev home media proc sbin usr wav
boot data etc lib mnt qemu-arm sys var
我的 rootfs
是用于小型嵌入式设备的,所以一切都是基于 BusyBox 的。
这是如何运作的?首先,我在内核中运行了 binfmt-misc
支持。我什么都不用做;它随 Ubuntu 18 一起提供。当内核看到 ARM 二进制文件时,它会将其交给注册的解释器 /usr/bin/qemu-arm-static
。
在我的 rootfs 中找到了一个同名的静态可执行文件:
sh-4.3# ls /usr/bin/q*
/usr/bin/qemu-arm-static
我是从 Ubuntu 软件包中获取的。我安装了:
$ apt-get install qemu-user-static
然后将/usr/bin/qemu-arm-static
复制到rootfs树的usr/bin
子目录中。
就是这样;现在我可以 chroot
进入那个 rootfs,甚至不用在 chroot
命令行上提到 QEMU。
关于linux - chroot 进入其他 arch 的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11422189/