【问题标题】:chroot into other arch's environmentchroot 进入其他 Arch 的环境
【发布时间】:2012-07-10 10:52:52
【问题描述】:

按照Linux from Scratch 这本书,我设法为 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 构建。

谢谢。

【问题讨论】:

    标签: linux arm chroot toolchain linux-from-scratch


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这就是我害怕的:)
    • 我不买这个。我使用qemu 进入嵌入式设备的根文件系统 在这个chroot 中,我可以运行/qemu-arm /bin/ls,例如,运行BusyBox ls,它工作得很好。所需要的只是内核有一个处理 ARM 二进制文件的处理程序,它将它们交给/qemu 解释器。 “你不能在 x86 上运行 ARM 二进制文件”与“你不能运行 shell 脚本”是同一个问题。为什么,他们只需要一名口译员。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      是的,您当然可以在 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
      

      我的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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多