用busybox-1.32.0制作Linux根文件系统

busybox的下载地址:https://busybox.net/downloads/
1.系统的init主进程通过/etc/inittab文件控制子进程
  在系统启动之前会启动sysinit,wait,once三类子进程
  在系统启动之后会启动respawn,askfrist这两类子进程,并监视他们,发现他们退出就会重启他们
  在系统退出之后会启动shutdown,restart,ctrlaltdel这三类子进程。
  
2./etc/inittab中每个条目用来定义一个子进程,并且确定他们的启动方法
  <id>:<runlevels>:<action>:<process>
  
  id:表示该子进程使用的控制台(用来标准输出输入的),可以指定为ttySAC0,如果不指定就用init主程序从内核那里继承过来的。
  runlevels:对于busybox,这个字段没意义
  action: init主进程对这个子进程的控制方法
  process: 这个子进程的执行函数或者执行脚本
  
3.配置busybox的三个基本要点:启用哪些常用的指令,选择编译方式(即动态还是静态),安装路径
  make menuconfig的配置:
  Networking Utilities:选择ping,tftp,telnetd等指令
  Process Utilities: 选中ps,free,kill,top,全都选中也行
  Editors: 选中vi
  linux Module Utilities: 模块加载卸载的命令,一般都选中。
  Coreutils: 核心的命令,比如ls,cp等
  Archival Utilities: 各种解压,压缩的工具,根据需要选择命令。
  
  (1)bosybox添加自动补全功能:
      Busybox Setting -->
            Busybox Library Tuning ---->
                    [*]    Tal completion
                
  (2)取消根文件的静态编译:
      Build Option --->
            [] Build Busybox as a static binary (no shared libs)
            
  (3)压缩,解压工具的选择:
      Archival Utilities --->
            所有选择都选中
            
  (4)模块的加载或者卸载的配置
      Linux Module Utilities --->
            所有都选上
  
  (5)支持mdev(自动创建设备节点),支持NFS的mount,umount功能
      Linux System Utilities --->
            所有都选上
            
  (6)支持ifconfig命令.
      Networking Utilities --->
          [*] ifconfig
          [*] Enable status reporting output (+7)
          
          [*] Enable option "hw" (ether only)
          [*] set the broadcast automatically
  
/etc/fatab:用来控制mount指令的作用(Rcs脚本里面mount -a之后要执行fatab里的挂接程序)
           dump:一个用来备份文件的程序,设置为0,则dump会忽略备份这个文件系统
           fsck: 决定磁盘的检车顺序,根文件系统设置为1,其他文件系统设置为2,如果设置为0,表示忽略这个文件系统。
 

在busybox的顶层Makefile中指定:
ARCH = arm
CROSS_COMPILE = arm-linux-gnueabihf-
 
 
 配置完之后编译busybox,在busybox目录下make指令
 
 
配置完busybox之后制作busybox:
    make CONFIG_PREFIX=/home/zhangjiaqi/nfs_share/first_rootfs install
 
接下来安装clib库,以下的流程可以直接参考完全开发手册了
cp -d:如果原来是一个链接那就保持是一个链接来复制,
    按照开发手册来将编译工具的整个Libc库都复制到first_rootfs/lib的话会比较大,造成first_rootfs.yaffs2很大,占很多内存
应该只复制busybox要用到的库就好了参考:https://blog.csdn.net/qq_29350001/article/details/51887141


busybox启动的时候出现(解决使用mdev时“cannot create /proc/sys/kernel/hotplug:nonexistent directory”错误)
参考:https://www.cnblogs.com/klb561/p/9245883.html  , http://www.manongjc.com/detail/18-amjjofqsqaocdga.html
      查阅内核的(kernel/sysctl.c)
      make menuconfig  (将UEVENT_HELPER选上,重新编译内核即可以在根文件的目录proc/sys/kernel下产生hotplug用于生成mdev)

 /etc/init.d/rcS里的mount -a的作用是:根据/etc/fstab脚本文件将内核里的文件系统挂接到前端(busybox的文件夹)
 fstab的作用是将内核的文件系统挂接到前端busybox的某个文件夹,比如:
 #device          point   type    options     dump fsck   order
  proc            /proc   proc    defaults    0    0
 表示将内核的设备proc挂接到busybox的/proc文件夹,proc文件夹要在制作根文件系统的时候就要mkdir
 
 
 
 
 
 
 
 
 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

猜你喜欢

转载自blog.csdn.net/qq_43418840/article/details/118936912