您尚未登录。

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

在 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
已发帖子: 262
积分: 262

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

我先占个位,回头测试

离线

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

太一酱鸭
会员
注册时间: 2019-07-03
已发帖子: 154
积分: 154

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

你可能没有执行第3步





离线

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

太一酱鸭
会员
注册时间: 2019-07-03
已发帖子: 154
积分: 154

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

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

离线

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

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

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





离线

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

太一酱鸭
会员
注册时间: 2019-07-03
已发帖子: 154
积分: 154

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

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

离线

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

你在 buildroot 配置成了大端?





离线

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

太一酱鸭
会员
注册时间: 2019-07-03
已发帖子: 154
积分: 154

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

晕哥 说:

你在 buildroot 配置成了大端?

是的、、、、有点蠢

离线

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

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





离线

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

kernelpanic
会员
注册时间: 2019-11-08
已发帖子: 20
积分: 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
已发帖子: 262
积分: 262

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
已发帖子: 408
积分: 407

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
积分: 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
已发帖子: 408
积分: 407

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

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

离线

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

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

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

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


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





离线

#17 2020-03-08 23:14:02

firstman
会员
注册时间: 2019-04-06
已发帖子: 279
积分: 279

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

优秀的操作, 顶起来.

离线

#18 2020-03-12 09:20:16

iamkylin
会员
注册时间: 2019-10-09
已发帖子: 16
积分: 4

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

多谢大佬分享!

离线

#19 2020-05-08 14:56:27

孤星泪
会员
注册时间: 2020-03-18
已发帖子: 235
积分: 231

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

还有如此骚操作!又学到了新姿势了,看起来是用 qemu 模拟arm指令集吧?

离线

#20 2020-05-19 14:26:54

zsk_diy
会员
注册时间: 2020-05-19
已发帖子: 6
积分: 6

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

这操作,佩服,很值得学习,多谢分享啊

离线

#21 2020-05-23 15:14:15

歌以咏志
会员
注册时间: 2019-09-21
已发帖子: 219
积分: 210

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

还有这种骚操作,奇怪的姿势又增加了。

离线

#22 2020-05-23 15:58:47

angelsan
会员
注册时间: 2020-04-02
已发帖子: 139
积分: 131.5

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

学习了,正需要看一下 Chroot,不是很明白呢

离线

#23 2020-06-02 19:14:12

pythinker
会员
注册时间: 2019-02-12
已发帖子: 215
积分: 215

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

$ sudo chroot ${PWD} /bin/sh
/ # passwd
Changing password for root
New password: 
Bad password: too weak
Retype password: 
qemu: Unsupported syscall: 382
passwd: Function not implemented
passwd: can't update password file /etc/shadow
/ # whoami
root

奇怪, 我的更新不了密码?

离线

#24 2021-05-17 09:24:21

raspberryman
会员
注册时间: 2019-12-27
已发帖子: 503
积分: 465

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

请问qemu-arm 和 qemu-arm-static 有什么区别?

离线

#25 2021-05-17 18:31:49

jujiaqi
会员
注册时间: 2019-10-19
已发帖子: 17
积分: 16

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

raspberryman 说:

请问qemu-arm 和 qemu-arm-static 有什么区别?

qemu-arm 需要依赖一些库才能运行,不适合chroot场合,因为还要拷贝这些库到新的rootfs里面,甚至可能无法运行;
qemu-arm-static 是静态链接的,单个文件就能运行。qemu-arm-static比qemu-arm大不少。

离线

#26 2021-05-17 18:34:41

jujiaqi
会员
注册时间: 2019-10-19
已发帖子: 17
积分: 16

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

很好的工具。
比如ubuntu 不再发布 armhf 版的 server了,但是可以下载ubuntu base,一个比 ubuntu core 还mini的文件系统。
通过 chroot和 qemu 可以再host上给这个rootfs 安装各种软件、配置网络,然后就能在 arm 板子上跑了。

离线

#27 2021-09-07 14:07:28

szchen2006
会员
注册时间: 2019-10-09
已发帖子: 216
积分: 166.5

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

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:其他

#28 2021-12-15 10:32:53

lsgandwty
会员
注册时间: 2021-12-14
已发帖子: 3
积分: 3

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

准备使用ubuntu base做rootfs,这个方法刚好适用

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn