ubuntu下使用qemu模拟ARM(四)-------编译busybox
来源:互联网 发布:数据质量系统 编辑:程序博客网 时间:2024/04/28 05:29
上面已完成了u-boot,kernel现在我们来做一个根文件系统
用busybox制作根文件系统
1.下载Busybox,
官方下载地址:https://busybox.net/downloads/
下载最新版 busybox-1.26.2.tar.bz2
sudo mkdir root_system 将下载后的文件放入/qemu_arm/root_system中
2.解压
book@book-virtual-machine:/qemu_arm/root_system$ tar xjf busybox-1.26.2.tar.bz2
3.编译
make clean
make menuconfig
在”Busybox Settings ---> Build Options --->“ 关闭“Build BusyBox as a static binary。
打开”Build shared libbusybox“。
关闭”Produce a binary for each applet“与”Produce additional busybox binary“。
保存退出
打开”Build shared libbusybox“。
关闭”Produce a binary for each applet“与”Produce additional busybox binary“。
保存退出
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
生成的文件就放在_install目录中了
4.查看要用到的动态库
方式1:
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ arm-none-linux-gnueabi-readelf -d busybox| grep NEEDED
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
方式2:
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ arm-none-linux-gnueabi-objdump -x busybox| grep NEEDED
NEEDED libm.so.6
NEEDED libc.so.6
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
NEEDED libm.so.6
NEEDED libc.so.6
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
方式3:
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ strings busybox | grep lib
/lib/ld-linux.so.3
libm.so.6
libc.so.6
__libc_start_main
/lib/modules
/var/lib/misc/udhcpd.leases
/lib/firmware
/var/lib/dpkg/info/%s.%s
/var/lib/dpkg/status
/var/lib/dpkg/status.udeb
/var/lib/dpkg/status.udeb.bak
shlibs
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
/lib/ld-linux.so.3
libm.so.6
libc.so.6
__libc_start_main
/lib/modules
/var/lib/misc/udhcpd.leases
/lib/firmware
/var/lib/dpkg/info/%s.%s
/var/lib/dpkg/status
/var/lib/dpkg/status.udeb
/var/lib/dpkg/status.udeb.bak
shlibs
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$
方式4:
ldd busybox
显示:not a dynamic executable //不知为什么 ,原因有待查找
//-------------应该显示为下面的提示才是正确的-----------------
linux-gate.so.1 => (0xb775d000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb76ea000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7530000)
/lib/ld-linux.so.2 (0x800ab000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb76ea000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7530000)
/lib/ld-linux.so.2 (0x800ab000)
//--------------这说明 linux.so.2的库还是存在依赖关系-------------
5.将编译后的文件拷到一个文件夹(rootfs)中:
sudo mkdir rootfs
sudo chmod 777 rootfs/
sudo cp busybox-1.26.2/_install/* -r rootfs/
6.将busybox-1.26.2/examples/bootfloppy下的etc文件夹拷到rootfs文件夹中
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mkdir etc
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo chmod 777 etc
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo chmod 777 etc
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo cp -r /qemu_arm/root_system/busybox-1.26.2/examples/bootfloppy/etc/* etc/
6.拷贝链接文件
查找libm.so.6文件位置
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ arm-none-linux-gnueabi-readelf -d bin/busybox | grep NEEDED
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ locate libm.so.6 //查找在哪里
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libm.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libm.so.6 //我们拷这个文件
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libm.so.6
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ locate libm.so.6 //查找在哪里
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libm.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libm.so.6 //我们拷这个文件
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libm.so.6
/lib/i386-linux-gnu/libm.so.6
book@book-virtual-machine:/qemu_arm/root_system/rootfs$
查找libc.so.6文件位置
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ locate libc.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libc.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libc.so.6 //我们拷这个库文件
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libc.so.6
/lib/i386-linux-gnu/libc.so.6
book@book-virtual-machine:/qemu_arm/root_system/rootfs$
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libc.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libc.so.6 //我们拷这个库文件
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libc.so.6
/lib/i386-linux-gnu/libc.so.6
book@book-virtual-machine:/qemu_arm/root_system/rootfs$
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mkdir lib
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo chmod 777 lib
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo chmod 777 lib
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ cp /arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/lib*.so.6 lib //文件库没拷全,启动时会提示 Kernel panic - not syncing: No working init found.
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ cp /arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/*.so* lib
7.创建4个tty端终设备
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mkdir dev
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty1 c 4 1
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty2 c 4 2
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty3 c 4 3
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty4 c 4 4
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty2 c 4 2
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty3 c 4 3
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty4 c 4 4
8.制作根文件系统镜像
1. 生成32M大小的镜像
busybox-1.26.2 busybox-1.26.2.tar.bz2 rootfsbook@book-virtual-machine:/qemu_arm/root_system$ dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.31139 s, 108 MB/s
book@book-virtual-machine:/qemu_arm/root_system$
2. 格式化成ext3文件系统
book@book-virtual-machine:/qemu_arm/root_system$ mkfs.ext3 a9rootfs.ext33. 将文件拷贝到镜像中
book@book-virtual-machine:/qemu_arm/root_system$ sudo mkdir tmpfs
book@book-virtual-machine:/qemu_arm/root_system$ sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
book@book-virtual-machine:/qemu_arm/root_system$ sudo cp -r rootfs/* tmpfs/
book@book-virtual-machine:/qemu_arm/root_system$ sudo umount tmpfs
book@book-virtual-machine:/qemu_arm/root_system$ sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
book@book-virtual-machine:/qemu_arm/root_system$ sudo cp -r rootfs/* tmpfs/
book@book-virtual-machine:/qemu_arm/root_system$ sudo umount tmpfs
9.用Qemu测试生成的根文件系统
qemu-system-arm -M vexpress-a9 -m 512M -kernel /qemu_arm/linux-kernel/linux-3.16.39/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd /qemu_arm/root_system/a9rootfs.ext3
显示一大堆信息,最后出现提示如下:
#0: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 43
input: ImExPS/2 Generic Explorer Mouse as /devices/mb:kmi1/serio1/input/input2
kjournald starting. Commit interval 5 seconds
EXT3-fs (mmcblk0): mounted filesystem with writeback data mode
VFS: Mounted root (ext3 filesystem) readonly on device 179:0.
Freeing unused kernel memory: 244K (805d6000 - 80613000)
random: nonblocking pool is initialized
mount: mounting proc on /proc failed: No such file or directory
Processing /etc/profile... Done
/ #
input: ImExPS/2 Generic Explorer Mouse as /devices/mb:kmi1/serio1/input/input2
kjournald starting. Commit interval 5 seconds
EXT3-fs (mmcblk0): mounted filesystem with writeback data mode
VFS: Mounted root (ext3 filesystem) readonly on device 179:0.
Freeing unused kernel memory: 244K (805d6000 - 80613000)
random: nonblocking pool is initialized
mount: mounting proc on /proc failed: No such file or directory
Processing /etc/profile... Done
/ #
说明内核已启动并且挂接了文件系统,此时已可以使用busybox的命令集了.
遇到的问题:
make clean
make menuconfig
make
make install 后生成的busybox不能用在ARM开发板中,因为没有修改过MAKEFILE文件所以就没有指定用交叉编译工具并且也不是arm的文件格式
可使用file busybox查看
book@book-virtual-machine:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ file busybox
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
注意红色字ARM,这才是用于arm开发板的busybox
根文件能挂接上,但不能运行,提示:
Kernel panic - not syncing: No working init found.
使用file命令查看
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ file linuxrc
linuxrc: symbolic link to bin/busybox
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ file /bin/busybox
/bin/busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=3009223865ed1ed7bfab5468767d7cd504d6ef49, stripped
linuxrc: symbolic link to bin/busybox
book@book-virtual-machine:/qemu_arm/root_system/rootfs$ file /bin/busybox
/bin/busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=3009223865ed1ed7bfab5468767d7cd504d6ef49, stripped
还有要注间的就是链接库的文件要拷全,不能只拷libm.so.6和[libc.so.6两个
另一个可能就在于上面提示的80386,可能在制作的过程中没有指定ARCH=arm造成的
参考文档:
http://blog.csdn.net/f413933206/article/details/6534685
0 0
- ubuntu下使用qemu模拟ARM(四)-------编译busybox
- ubuntu下使用qemu模拟ARM(二)-------编译u-boot
- ubuntu下使用qemu模拟ARM(三)------编译内核
- UBUNTU下使用QEMU模拟ARM
- ubuntu下使用qemu-system-arm模拟arm环境
- ubuntu下使用qemu-system-arm模拟arm环境
- ubuntu下使用qemu-system-arm模拟arm环境
- ubuntu下使用qemu-system-arm模拟arm环境
- ubuntu下使用qemu模拟ARM(六)------驱动程序编译进内核方法
- ubuntu下使用qemu模拟ARM(五)-------应用程序Hello World
- ubuntu下使用qemu模拟ARM(六)------驱动程序
- ubuntu下使用qemu-arm-static进入chroot编译环境
- 使用 QEMU 模拟 ARM
- ubuntu下使用qemu模拟ARM(一)-------安装ssh,ftp,nfs服务
- ubuntu下使用qemu模拟ARM(七)-----uboot从sd卡启动内核
- 在QEMU上用Busybox模拟ARM的文件系统
- 编译linux3内核,与busybox,用qemu模拟运行
- Gentoo下配置QEMU模拟arm环境
- FreeRTOS之配置详解、裁剪(FreeRTOSConfig.h)
- 谈谈spring 事务同步 transactionSynchronization 的作用
- 南邮离散数学实验四---图的随机生成及欧拉(回)路的确定
- volatile关键字小结
- 飞思卡尔IMX6处理器的GPIO配置方式
- ubuntu下使用qemu模拟ARM(四)-------编译busybox
- spring sse 技术2
- Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架(注解模式哦)
- 怎样升级spark集群到更新的版本?
- [Android] 如何在 Activity 或者 Fragment 的生命周期结束时停止订阅 Observable
- Wordpress的钩子(hook)
- CodeForces 59CTitle 模拟+回文
- Tengine详细安装教程
- spring sse 3