3

遵循从零开始的 Linux一书,我设法在 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 interpreter [Requesting program interpreter: /tools/lib/ld-linux.so.3]

所以我想知道是否有一种方法,比如为 CC LD READELF 使用适当的环境变量,在 x86_64 主机上使用这些工具继续为 ARM 构建。

谢谢你。

4

3 回答 3

1

是的,您当然可以在 x86 机器上 chroot 进入 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

Myrootfs用于小型嵌入式设备,所以一切都基于 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-staticusr/binrootfs树的子目录中。

就是这样; 现在我可以chroot进入那个 rootfs,甚至不用在chroot命令行上提到 QEMU。

于 2021-04-20T17:50:41.977 回答
-1

没有。你不能在 x86 上运行 ARM 二进制文件,所以你不能进入它的 chroot。没有多少环境变量会改变这一点。

您可以通过为目标创建文件系统映像并在模拟器(例如, qemu-system-arm)下运行它来继续该过程,但这是完全不同的事情。

于 2012-07-10T21:49:02.130 回答
-2

不,您不能,至少不使用chroot. 您手中有一个带有 ARM 目标的工具链,用于 ARM 主机。二进制文件只能在与其主机架构兼容的架构上直接执行 - 而 x86_64 与ARM兼容。

也就是说,您也许可以使用模拟环境。qemu例如,为 ARM 提供了两种模拟模式:qemu-system-arm模拟整个基于 ARM 的系统,以及qemu-arm使用 ARM 原生库为在非 ARM 主机上运行 ARM Linux 可执行文件提供更薄的模拟层。

于 2012-07-10T21:53:57.843 回答