使用BusyBox制作根文件系统的操作步骤

时间:2024-05-21 12:18:20

参考博客http://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html


一、构建根文件系统该有的目录

  • 即在/rootfs/目录下创建该有的空目录;
  • 一般有dev/   etc/   lib/   usr/   var/   proc/   tmp/   home/   root/   mnt/   bin/   sbin/  sys/ ;
  • /bin  /sbin由于是用busybox构建,再拷贝到此目录下的,所以可以先不创建;


二、使用busybox构建/bin  /sbin   linuxrc

1、获取busybox源码

2、解压后修改Makefile

  • ARCH = arm
  • CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-

3、配置busybox

  • 先make defconfig,然后make menuconfig,安装下面图示进行配置。

使用BusyBox制作根文件系统的操作步骤

p.s:出现错误

使用BusyBox制作根文件系统的操作步骤

解决思路方法:此文件和主功能无关,可以避开。

(1)先找到sync.c文件:在此目录下find -name "sync.c",知道其在./coreutils/sync.c

(2)cd coreutils,在Kbuild文件中,查找sync.o,可知由宏CONFIG_SYNC来控制是否编译

使用BusyBox制作根文件系统的操作步骤

(3)在make menuconfig中,查找SYNC的位置,转到其位置,选择为N。使用BusyBox制作根文件系统的操作步骤


4、输入make进行编译,然后输入make install进行安装

(1)make install,执行busybox顶层目录的一个目标install。

(2)安装目录默认在busybox/_install,里面有bin/  sbin/  linuxrc三个(目录)文件。

  • 也可以指定目录安装,以便后期不用再拷贝。

使用BusyBox制作根文件系统的操作步骤


(3)make install的解释

  • 安装软件的指令,在传统的linux系统中,安装软件时都是选择源代码方式安装的。
  • 下载要安装的软件源代码,然后配置、编译、安装。
  • 安装的含义是,将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定的目录下。

5、将bin/  sbin/  linuxrc拷贝到rootfs文件夹下

  • 指令是cp bin/  sbin/  linuxrc /root/rootfs -ra;


三、构建etc目录

主要是拷贝一些文件到etc/目录下,并进行一些修改

使用BusyBox制作根文件系统的操作步骤


1、将  busybox/examples/bootfloopy/etc/*  拷贝到  /rootfs/etc/  目录下,然后修改其中的inittab文件;

(1)开机免登陆,直接进入shell

[cpp] view plain copy
  1. #first:run the system script file  
  2. ::sysinit:/etc/init.d/rcS     
  3. ::askfirst:-/bin/sh           
  4. ::ctrlaltdel:-/sbin/reboot    
  5. #umount all filesystem  
  6. ::shutdown:/bin/umount -a -r  
  7. #restart init process  
  8. ::restart:/sbin/init  

或者

[cpp] view plain copy
  1. ::sysinit:/etc/init.d/rcS  
  2. #::respawn:-/bin/sh  
  3. #::respawn:-/bin/login  
  4. console::askfirst:-/bin/sh  //这个和上面一样,只是id明确给出而已  
  5. #tty2::askfirst:-/bin/sh  
  6. ::ctrlaltdel:/bin/umount -a -r  

(2)开机需要登陆

[cpp] view plain copy
  1. ::sysinit:/etc/init.d/rcS  
  2. #::respawn:-/bin/sh  
  3. ::respawn:-/bin/login  
  4. #console::askfirst:-/bin/sh  
  5. #tty2::askfirst:-/bin/sh  
  6. ::ctrlaltdel:/bin/umount -a -r  


2、用户名、密码设置:将虚拟机ubuntu的  /etc/passwd、/etc/group、/etc/shadow  拷贝到  rootfs/etc/  目录下,然后修改三个文件的相关内容;

(1)只保存与root相关项,修改passwd为root:x:0:0:root:/root:/bin/sh。

(2)只保存与root相关项,修改group为root:x:0:root。

(3)只保存与root相关项,shadow其他不需要更改(或者清除密码),登陆密码和拷贝源的密码一致。


3、修改profile文件;

[cpp] view plain copy
  1. # Ash profile  
  2. # vim: syntax=sh  
  3.   
  4. # No core files by default  
  5. ulimit -S -c 0 > /dev/null 2>&1  
  6.   
  7. USER="`id -un`"  
  8. LOGNAME=$USER  
  9. PS1='[\[email protected]\h \W]\# '  
  10. PATH=$PATH  
  11.   
  12. HOSTNAME=`/bin/hostname`  
  13.   
  14. export USER LOGNAME PS1 PATH  

4、修改fstab文件;

添加以下内容:注意这里的挂载点需要预先建立(如果在第一步创建空目录是没有创建的话)

[cpp] view plain copy
  1. #<file system>    <mount point>     <type>    <options>    <dump>     <pass>  
  2. proc        /proc       proc    defaults    0   0  
  3. sysfs       /sys        sysfs   defaults    0   0  
  4. tmpfs       /var        tmpfs   defaults    0   0  
  5. tmpfs       /tmp        tmpfs   defaults    0   0  
  6. tmpfs       /dev        tmpfs   defaults    0   0  

5、修改etc/init.d/rc.S文件;

[cpp] view plain copy
  1. #!/bin/sh  
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  3.   
  4. runlevel=S  
  5. prevlevel=N  
  6.   
  7. umask 022  
  8.   
  9. export PATH runlevel prevlevel  
  10.   
  11. mount -a  
  12.   
  13. echo /sbin/mdev > /proc/sys/kernel/hotplug  
  14. mdev -s  
  15.   
  16. /bin/hostname -F /etc/sysconfig/HOSTNAME  
  17.   
  18. ifconfig eth0 192.168.1.10  


四、构建lib目录

动态链接库拷贝到/root/rootfs/lib/目录下,动态链接库在  /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/  目录下。

  • 指令  cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/*so* /root/rootfs/lib/ -rdf