linux - chroot 进入其他 arch 的环境

标签 linux arm chroot toolchain linux-from-scratch

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/

相关文章:

android - 控制如何进入android linux内核中的DT_MACHINE_START for arm board

c - 当我在 RL_ARM 中使用 TCP 函数时出现 undefined symbol

c++ - 学习嵌入式 C/C++ 开发的最佳评估套件是什么?

linux - 如何使用 linux 使用 tcpdump 仅捕获 http

Linux Shell 脚本文件和目录循环

java - 监控unix机器性能计数器的命令

linux - sudo dpkg -i mod-pagespeed-*.deb 给出 "not a debian format archive"错误

node.js - 在 Jailkit 中设置 nodejs 和 npm

linux - 在 chroot 环境中使用 SSH 进行 SFTP 和端口转发

linux - chroot 如何影响动态库内存使用?