用qemu和chroot调试异构rootfs
用qemu和chroot调试异构rootfs¶
参考:使用QEMU chroot进行固件本地调试 https://cloud.tencent.com/developer/article/1552161
qemu-user-static使用Linux的**binfmt_misc**机制,允许识别任意可执行文件格式,并将其传递给特定的用户空间应用程序。
QEMU User Mode 二进制翻译系统原理分析及使用方法: https://zhuanlan.zhihu.com/p/392753064
如果要使用这个功能的话,首先要绑定binfmt_misc,可以通过以下命令来绑定:
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
这样绑定的话,系统重新启动之后就失效了。如果想让系统每次启动的时候都自动绑定的话,可以往 /etc/fstab 文件中加入下面这行:
none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0
比如使用qemu-debootstrap创建的debian根文件系统,qemu-debootstrap会多做一件事,把qemu-user-static拷进去,所以可以直接chroot进去:
sudo apt-get update
sudo apt-get install debootstrap qemu qemu-user-static
sudo qemu-debootstrap --arch armhf bionic armhf-chroot
sudo chroot armhf-chroot
uname -m
而我们自己构建的rootfs,就需要自己拷贝了,比如我现在目标系统是32位的arm:
$ cd tmp/work/ebsx_imx6ull-poky-linux-gnueabi/GDEBS-ADA-01-image/1.0-r0/rootfs
$ cp /usr/bin/qemu-arm-static ./usr/bin/
$ sudo chroot .