服务器在线 - 服务器软件 - 网站地图 服务器在线,专注于服务器技术!

当前位置:主页 > 云和虚拟化 > Qemu > 正文

在QEMU虚拟环境中使用Busybox模拟ARM的文件系统

时间:2015-01-18    来源:服务器在线    投稿:泡泡    点击:

1.下载最新的 busybox代码,解压。

2. 编译busybox

cd busybox-1.21.1/
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make defconfig
make install
之后,会生成一个 _install 目录,里面是一个root file system.

默认情况下,生成的busybox二进制文件是动态链接的。所以,需要拷贝用到的动态库到根文件系统里面。

可以用如下的命令查看用到了哪些动态库:

arm-linux-gnueabi-readelf -a busybox | grep lib
      [Requesting program interpreter: /lib/ld-linux.so.3]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
000ac394  0000a816 R_ARM_JUMP_SLOT   0000c824   __libc_start_main
   168: 0000c824     0 FUNC    GLOBAL DEFAULT  UND __libc_start_main@GLIBC_2.4 (2)
  000000: Version: 1  File: libm.so.6  Cnt: 1
  0x0020: Version: 1  File: libc.so.6  Cnt: 1

然后,把相应的库从arm-linux-gnueabi/libc/lib/拷到 busybox-1.21.1/_install/lib里面。

另外,在 _install下,执行下面的命令:

$ cd _install
$ mkdir proc sys dev etc etc/init.d
$ cd ..
然后,创建一个新文件 _install/etc/init.d/rcS:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
$ chmod +x _install/etc/init.d/rcS

/sbin/init会执行/etc/init.d/rcS.
最终的部分 RFS如下:

├── etc
│   └── init.d
│       └── rcS
├── lib
│   ├── ld-2.13.so
│   ├── ld-linux.so.3 -> ld-2.13.so
│   ├── libc-2.13.so
│   ├── libc.so.6 -> libc-2.13.so
│   ├── libdl-2.13.so
│   ├── libdl.so.2 -> libdl-2.13.so
│   ├── libm-2.13.so
│   └── libm.so.6 -> libm-2.13.so
3. 生成 ramdisk文件:
find . | cpio -o --format=newc > ../../../initramfs
4.测试。执行
$ qemu-system-arm -M vexpress-a9 -kernel ./linux-3.2/arch/arm/boot/zImage -initrd ../initramfs  -append "root=/dev/ram rdinit=/sbin/init"
可以进入到arm 系统

如果想让log到主机终端里,可以使用下面的命令:

$ qemu-system-arm -M vexpress-a9 -kernel ./linux-3.2/arch/arm/boot/zImage -initrd ../initramfs -serial stdio -append "console=ttyAMA0 root=/dev/ram rdinit=/sbin/init"

如果您的问题仍未解决,还可以加入服务器在线技术交流QQ群:8017413寻求帮助。


相关内容
最新热点内容
推荐内容