Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1505185
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 997
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-29 09:58
个人简介

兴趣是坚持一件事永不衰竭的动力

文章分类

全部博文(108)

文章存档

2021年(1)

2020年(10)

2019年(19)

2018年(9)

2016年(23)

2015年(43)

2013年(3)

我的朋友

分类: 嵌入式

2016-03-17 11:32:20

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

2. 编译busybox


[plain] view plain copy
 print?
  1. cd busybox-1.21.1/  
  2. export ARCH=arm  
  3. export CROSS_COMPILE=arm-linux-gnueabi-  
  4. make defconfig  
  5. make install  
之后,会生成一个 _install 目录,里面是一个root file system.


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

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


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


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

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


[plain] view plain copy
 print?
  1. $ cd _install  
  2. $ mkdir proc sys dev etc etc/init.d  
  3. $ cd ..  
然后,创建一个新文件 _install/etc/init.d/rcS



[plain] view plain copy
 print?
  1. #!/bin/sh  
  2. mount -t proc none /proc  
  3. mount -t sysfs none /sys  
  4. /sbin/mdev -s  
[plain] view plain copy
 print?
  1. $ chmod +x _install/etc/init.d/rcS  


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


[plain] view plain copy
 print?
  1. ├── etc  
  2. │   └── init.d  
  3. │       └── rcS  
  4. ├── lib  
  5. │   ├── ld-2.13.so  
  6. │   ├── ld-linux.so.3 -> ld-2.13.so  
  7. │   ├── libc-2.13.so  
  8. │   ├── libc.so.6 -> libc-2.13.so  
  9. │   ├── libdl-2.13.so  
  10. │   ├── libdl.so.2 -> libdl-2.13.so  
  11. │   ├── libm-2.13.so  
  12. │   └── libm.so.6 -> libm-2.13.so  

3. 生成 ramdisk文件:



[plain] view plain copy
 print?
  1. find . | cpio -o --format=newc > ../../../initramfs  

4.测试。执行



[plain] view plain copy
 print?
  1. $ 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到主机终端里,可以使用下面的命令:


[plain] view plain copy
 print?
  1. $ 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"   
阅读(1940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~