WhyCan Forum

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-11-19 11:08:33

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

参考1: 精华帖 Debian 9.9 文件系统制作
参考2: 在 x86 下 chroot 到 ARM 平台的 rootfs

1. 准备工作:

sudo apt install qemu-user-static -y

2. 编译buildroot, 或单独编译 busybox 等。

3. 找到buidlroot的target目录, 复制qemu-user-static到target目录

$ cp /usr/bin/qemu-arm-static /buildroot-2018.08.2/output/target/usr/bin/

4. chroot:

sudo chroot /buildroot-2018.08.2/output/target/ /bin/sh

好了, 现在你可以为所欲为, 就像在嵌入式系统一样,执行任何busybox 命令了:


whycan@ubuntu$ sudo chroot /buildroot-2018.08.2/output/target/ /bin/sh
/ $ ls
THIS_IS_NOT_YOUR_ROOT_FILESYSTEM  linuxrc                           run
bin                               media                             sbin
dev                               mnt                               sys
etc                               opt                               tmp
lib                               proc                              usr
lib32                             root                              var
/ $ 
/ $ 
/ $ ping
BusyBox v1.27.2 (2017-11-10 15:34:58 CST) multi-call binary.

Usage: ping [OPTIONS] HOST

Send ICMP ECHO_REQUEST packets to network hosts

	-c CNT		Send only CNT pings
	-s SIZE		Send SIZE data bytes in packets (default 56)
	-t TTL		Set TTL
	-I IFACE/IP	Source interface or IP address
	-W SEC		Seconds to wait for the first response (default 10)
			(after all -c CNT packets are sent)
	-w SEC		Seconds until ping exits (default:infinite)
			(can exit earlier with -c CNT)
	-q		Quiet, only display output at start
			and when finished
	-p		Pattern to use for payload
/ $ 

离线

#2 2019-11-19 13:08:34

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 172

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

我先占个位,回头测试

离线

#3 2019-11-19 13:59:32

太一酱鸭
会员
注册时间: 2019-07-03
累计积分: 146

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

chroot /buildroot-2019.02.4/output/target /bin/sh
chroot: failed to run command ‘/bin/sh’: No such file or directory
显示没有这条命令,实际上是存在链接至busybox的

最近编辑记录 太一酱鸭 (2019-11-19 13:59:49)

离线

#4 2019-11-19 14:02:05

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

你可能没有执行第3步

离线

#5 2019-11-19 14:05:01

太一酱鸭
会员
注册时间: 2019-07-03
累计积分: 146

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

执行了,/target/usr/bin里也有qemu-arm-static

离线

#6 2019-11-19 14:13:06

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

那可能如前面那个网友说的, 你可能缺 lib 了.

因为我换了几台电脑, 甚至搬瓦工上的虚拟机都是OK的。

离线

#7 2019-11-19 17:30:25

太一酱鸭
会员
注册时间: 2019-07-03
累计积分: 146

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

问题解决,不是缺lib,而是大端小端弄错了,选择小端之后可以执行!!!感谢晕哥!!!

离线

#8 2019-11-19 17:37:47

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

你在 buildroot 配置成了大端?

离线

#9 2019-11-19 17:43:52

太一酱鸭
会员
注册时间: 2019-07-03
累计积分: 146

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

晕哥 说:

你在 buildroot 配置成了大端?

是的、、、、有点蠢

离线

#10 2019-11-19 17:45:48

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

哈哈,这样自嘲不好吧,不过现在基本见不到大端的系统。

离线

#11 2019-11-20 16:32:34

kernelpanic
会员
注册时间: 2019-11-08
累计积分: 20

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

测试成功!

不过,target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM 这个文件有说明,不要把这个目录当作根文件系统来挂载,它是一个中间产物。
是不是解压 tar 包之后,再用 qemu 模拟会更合适?

离线

#12 2019-11-20 17:00:00

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 172

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

应该可以的,最终的rootfs.tar是由target打包成的。修改后make试试,会打包进rootfs.tar


kernelpanic 说:

测试成功!

不过,target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM 这个文件有说明,不要把这个目录当作根文件系统来挂载,它是一个中间产物。
是不是解压 tar 包之后,再用 qemu 模拟会更合适?

离线

#13 2019-11-20 17:05:00

超级萌新
会员
注册时间: 2018-05-04
累计积分: 342

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

这个 THIS_IS_NOT_YOUR_ROOT_FILESYSTEM target目录实际上也能用,到底是为什么呢?

离线

#14 2019-11-20 18:42:33

kernelpanic
会员
注册时间: 2019-11-08
累计积分: 20

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

Jmhh247 说:

应该可以的,最终的rootfs.tar是由target打包成的。修改后make试试,会打包进rootfs.tar

这个文件里面有解释了, 因为 buildroot 支持普通用户进行制作根文件系统,tartget/ 下面的文件 **可能** 并不是 root 创建,再这种情况,是没权限进行创建设备节点之类的动作的。 这里可能大家都是 root 用户下执行的,所以可以工作。另外一点是,buildroot 有个 post 脚本会再打包前执行,如果直接用 target/,相当于错过了这个步骤。

离线

#15 2019-11-20 19:02:15

超级萌新
会员
注册时间: 2018-05-04
累计积分: 342

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

这就奇怪了,我都是非root用户执行buildroot make,直接拷贝 target 目录,也没啥问题。

离线

#16 2019-11-22 08:18:10

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 8,528

Re: 在 ubuntu@x86 用 chroot 到 ARM 平台的 rootfs

既然大家都验证通过了, 我加入本站精华帖汇总应该没有不同意见吧:


210. 在 ubuntu@x86 用 chroot 到 ARM 平台的

离线

页脚