zoukankan      html  css  js  c++  java
  • Buildroot构建指南——根文件系统(Rootfs)【转】

    本文转载自;

     

    目录(?)[+]

     

    Buildroot构建指南——根文件系统(Rootfs)

    Buildroot的Rootfs构建流程有一个大框架,有些部分是Buildroot系统做好的,有些细节需要自己来实现,Rootfs也是Buildroot中最为复杂的部分。

    Rootfs的构建流程概述

    Rootfs的构建流程如图1所示。其中浅色框中为Buildroot实现的框架,深紫色框为用户实现的脚本。

    Figure 1 Buildroot系统的rootfs制作

    需要归纳的几点如下:

    1.      新版buildroot已经把rootfs的/etc/init.d/的rcS等启动脚本移到了package/initscripts/目录下。

    2.      系统默认的rcS脚本不会直接做系统用户态启动初始化操作,而是会调用/etc/init.d/目录下的SXX开头的脚本执行系统用户态启动的流程,其中XX是数字,数字越小的脚本优先于数字大的脚本被调用。用于实际的系统用户态启动脚本应该以SXX这这种格式命名,install到output/target/etc/init.d/目录下。

    3.      fakeroot是一个主机上使用的软件包,它会被buildroot下载编译,用于为构建rootfs提供一个虚拟的root权限环境,只有在root权限下,才能把output/target/中的目录和文件变成root用户,并创建dev节点。有了fakeroot环境,系统构建者无需获取主机的root权限,也能在fakeroot下把文件改为root用户,并制作root方式。

    4.      用户特定格式的rootfs制作脚本,最后都会被写到一个脚本中,该脚本会在fakeroot环境中执行。

    如何构建自己的Rootfs

    清楚流程后可以在Buildroot环境下构建自己的Rootfs了,以友善的tiny4412开发板的rootfs为例,demo一次构建自己的rootfs的流程。

    友善官方提供的rootfs压缩包在光盘中是rootfs_qtopia_qt4-20141213.tar.gz,这个rootfs非常臃肿,我们需要对它进行裁剪,最好是能够用busybox做一个最小的rootfs出来,但是由于暂时没有摸清楚它的每一个细节,怕直接编译的rootfs无法启动,因而我们最好在它官方的/etc/init.d/目录下的启动脚本的基础上做进一步裁剪,先保证系统能够启动。

    1.      在buildroot/system/目录中,拷贝一份skeleon/目录到tiny4412_skeleton/ ,同时拷贝一份device_table.txt到tiny4412_device_table.txt,因为tiny4412的文件系统中有特殊的部分需要修改,为了不影响通用的模板,所以进行拷贝。

    Figure 2 拷贝后的system/目录中内容

    2.      根据友善官方的rootfs内容,对tiny4412_skeleton/etc/目录进行一些删减和修改,删减修改后截图如下

    Figure 3 删减修改后的tiny4412_skeleton/etc/目录

    3.      将官方文件系统中,/etc/init.d/中的脚本cp到tiny4412_skeleton/etc/init.d/中,其实rcS更名为S00_tiny4412以匹配SXX的格式,XX代表数字。

    4.      将tiny4412_device_table.txt稍作修改,去掉passwd等一些最小系统中用不上的内容。

    Figure4 修改后的tiny4412_device_table.txt文件

    5.      由于tiny4412的文件系统比较特别,使用了友善专用的make_ext4fs工具来制作的,并且这是个不开源的bin程序,把一些参数和节点都在里面写死了,因而我们需要单独在fs/中,为制作tiny4412的文件系统添加方法。

    6.      在fs/目录下添加tiny4412_ext4/目录,将友善官方提供的make_ext4fs工具cp到该目录下,当然Config.in文件和tiny4412_ext4.mk脚本是必不可少的的。别忘了在fs/Config.in中将新添加的配置文件Config.in  source进去哦!

    Figure5 专为制作tiny4412 ext4文件系统而添加的脚本目录

    Figure6 tiny4412_ext4/目录中的内容

    Figure7 在fs/Config.in中将新加入的Config.in关联进去

    7.      在tiny4412_ext4/Config.in中加入以下的配置代码,其中BR2_TARGET_ROOTFS_TINY4412_EXT4是必不可少,让系统能够识别的文件系统类型的变量。剩下的变量则是可在menuconfig中配置的,文件系统大小,image制作工具的路径,以及image最后的名字

    [plain] view plain copy
     
    1. config BR2_TARGET_ROOTFS_TINY4412_EXT4                                                                                    
    2.         bool"ext4 root filesystem for tiny4412"                                     
    3.         help                                                                         
    4.           Build aext4 root filesystem specify for tiny4412                          
    5.                                                                                      
    6. if BR2_TARGET_ROOTFS_TINY4412_EXT4                                                   
    7.                                                                                      
    8.                                                                                      
    9. config BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN                                           
    10.         string"length of rootfs"                                                    
    11.         default"397508608"                                                          
    12.                                                                                       
    13.                                                                                      
    14. config BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH                                  
    15.         string "make image toolpath"                                                
    16.         default"$(TOPDIR)/fs/tiny4412_ext4/make_ext4fs"                             
    17.                                                                                      
    18.                                                                                       
    19. config BR2_TARGET_ROOTFS_TINY4412_EXT4_IMAGE_NAME                                    
    20.         string"image name"                                                          
    21.         default"rootfs_qtopia_qt4.img"                                              
    22. endif          

                         

    8.      在tiny4412_ext4.mk脚本中加入rootfs构建脚本。制作脚本的核心其实也就是ROOTFS_TINY4412_EXT4_CMD函数,它会在fs/common.mk脚本中,被写入fakeroot的执行脚本,然后会在fakeroot环境中被执行。ROOTFS_TINY4412_EXT4_CMD 函数 调用make_ext4fs工具根据配置的参数,生成rootfs的image。

    [plain] view plain copy
     
    1. ################################################################################                                          
    2. #                                                                                     
    3. # Build the TINY4412_EXT4 root filesystem image                                      
    4. #                                                                                    
    5. ################################################################################  
    6.                                                                                      
    7. TINY4412_EXT4_OPTS := -s -l$(BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN)                   
    8. TINY4412_EXT4_OPTS += -a root -L Linux                                               
    9.                                                                                      
    10. ifeq ($(BR2_TARGET_ROOTFS_TINY4412_EXT4),y)                                          
    11. PACKAGES_PERMISSIONS_TABLE :=                                                        
    12. endif                                                                                
    13.                                                                                      
    14.                                                                                      
    15. define ROOTFS_TINY4412_EXT4_CMD                                                      
    16.        $(BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH) $(TINY4412_EXT4_OPTS)$@  $(TARGET_DIR)  
    17. endef                                                                                
    18.                                                                                      
    19. $(eval $(call ROOTFS_TARGET,tiny4412_ext4))    

    9.      接下来是make menuconfig的配置了。在menuconfig -->  Systemconfiguration中,customer skeleton path 和 path to permissiontable 这两项填充为1—4步骤中,我们所拷贝修改过的tiny4412_skeleton和tiny4412_device_table.txt。

    Figure8 menuconfig -->  Systemconfiguration的配置

    10.  在menuconfig -->   Filesystemimages中,选中我们刚刚特制的ext4 rootfs tor tiny4412,剩下的参数估计被make_ext4fs工具程序内部写死了,用默认的就行。另外,在该选项中,busybox被默认选中,所以busybox中的所有软件默认都被当做应用编译和install到output/target/目录下。

    Figure9 menuconfig -->   Filesystem images的配置

    11.  保存之后,make rootfs-tiny4412_ext4 就生成我们自己的文件系统了。用tiny4412的SD卡烧录进去,是可以boot起来的,对S00_tiny4412脚本进行进一步裁剪后,我们可以得到一个在tiny4412开发板上最小的能boot起来的Linux系统。

  • 相关阅读:
    构建之法阅读笔记06
    构建之法阅读笔记05
    人月神话阅读笔记02
    人月神话阅读笔记01
    构建之法阅读笔记04
    学习进度09
    描绘用户场景并将典型用户和用户场景描述
    学习进度08
    第一冲刺阶段工作总结11
    第一冲刺阶段工作总结10
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7111835.html
Copyright © 2011-2022 走看看