关闭

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

标签: buildrootMakefilelinuxrootfs文件系统
5468人阅读 评论(0) 收藏 举报
分类:

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最后的名字

 

config BR2_TARGET_ROOTFS_TINY4412_EXT4                                                                                  
        bool"ext4 root filesystem for tiny4412"                                   
        help                                                                       
          Build aext4 root filesystem specify for tiny4412                        
                                                                                   
if BR2_TARGET_ROOTFS_TINY4412_EXT4                                                 
                                                                                   
                                                                                   
config BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN                                         
        string"length of rootfs"                                                  
        default"397508608"                                                        
                                                                                    
                                                                                   
config BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH                                
        string "make image toolpath"                                              
        default"$(TOPDIR)/fs/tiny4412_ext4/make_ext4fs"                           
                                                                                   
                                                                                    
config BR2_TARGET_ROOTFS_TINY4412_EXT4_IMAGE_NAME                                  
        string"image name"                                                        
        default"rootfs_qtopia_qt4.img"                                            
endif        

                     

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

 

################################################################################                                        
#                                                                                   
# Build the TINY4412_EXT4 root filesystem image                                    
#                                                                                  
################################################################################
                                                                                   
TINY4412_EXT4_OPTS := -s -l$(BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN)                 
TINY4412_EXT4_OPTS += -a root -L Linux                                             
                                                                                   
ifeq ($(BR2_TARGET_ROOTFS_TINY4412_EXT4),y)                                        
PACKAGES_PERMISSIONS_TABLE :=                                                      
endif                                                                              
                                                                                   
                                                                                   
define ROOTFS_TINY4412_EXT4_CMD                                                    
       $(BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH) $(TINY4412_EXT4_OPTS)$@  $(TARGET_DIR)
endef                                                                              
                                                                                   
$(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中的所有软件默认都被当做应用编译和installoutput/target/目录下。

Figure9 menuconfig -->   Filesystem images的配置

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

2
1
查看评论

利用buildroot构建rootfs

利用buildroot构建rootfsbuildroot是一个开源项目,类似于busybox的一种集成包,其主要功能是提供了交叉编译工具链和rootfs的制作 对于厂商提供的bsp包,很多时候rootfs会以buildroot的方式提供,所以学会使用buildroot来构建rootfs是很有必要的
  • qq_28992301
  • qq_28992301
  • 2016-08-07 19:23
  • 3553

使用buildroot来编译文件系统

使用buildroot来编译文件系统 2015-1-9  用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以 直接添加到文件系统里边,如常用的udhcpc,tftp等.本文以以ZYNQ 7010为例,制作一个ram...
  • luoqindong
  • luoqindong
  • 2015-01-15 10:30
  • 6889

使用buildroot搭建linux文件系统

(文件系统搭建,强烈建议直接用buildroot,官网上有使用教程非常详细buildroot官网) 文件系统通常要包含很多第三方软件,比如busybox,tslib,qt,vim,交叉编译工具等,为了避免繁杂的移植工作。buildroot应运而生。通过menuconfig配置我们需要的功能,不...
  • MetalSeed
  • MetalSeed
  • 2015-05-01 22:58
  • 8720

Buildroot构建指南--Overview

使用Buildroot,让嵌入式Linux系统构建更加便捷。本文以Buildroot-2016.05的版本为基础来讲解,不同版本之间有细节差异,需要根据读者使用的版本自行调整。 Buildroot是什么 Buildroot是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Build...
  • zhou_chenz
  • zhou_chenz
  • 2016-08-23 23:55
  • 4608

buildroot 常用编译命令(前八章)

BusyBox的 如果您已经有BusyBox配置文件,则可以直接在Buildroot配置中使用指定该文件 BR2_PACKAGE_BUSYBOX_CONFIG。否则,Buildroot将从默认的BusyBox配置文件开始。 要对配置进行后续更改,请使用make busybox-menu...
  • qq_39101111
  • qq_39101111
  • 2017-12-01 11:21
  • 114

buildroot设置开机自动运行程序和自动登录

设置自动登录和开机启动 设置开机启动: 在# now run any rc scripts的注释下面照格式添加添加 ::sysinit:/etc/init.d/smtp_pop3   #smtp_pop3是我自己在init.d目录下建立的一个shell脚本 然后进入/etc/i...
  • xsp1989
  • xsp1989
  • 2014-06-14 21:36
  • 1053

手动构建rootfs及文件功能分析

手动构建rootfs及文件功能分析这份笔记记录了从0开始构建一个最小根文件系统的流程,从而达到分析其目录结构及文件的目的,基于的kernel版本为2.6.35
  • qq_28992301
  • qq_28992301
  • 2016-08-05 11:01
  • 1062

二、buildroot-2015.02编译根文件系统支持Qt

环境搭建和buildroot简单的介绍请看
  • Lidroid
  • Lidroid
  • 2015-08-27 14:43
  • 2572

Buildroot构建指南——Linux内核

Buildroot可以从Linux Kernel的官网(kernel.org)下载并编译内核,也可以使用用户自己的定制化内核。
  • zhou_chenz
  • zhou_chenz
  • 2016-08-28 22:07
  • 3544

buildroot制作的文件系统不见登陆命令行

正常情况下,启动linux最后会有“buildroot login:”要求输入用户名,重新制作了文件系统后,没有上述字样。Linux启动后会分析/etc/inittab中的内容,然后执行一些命令,可以顺着这条线分析哪出了问题。 看到这一条“::sysinit:/etc/init.d/rcS”,于是想...
  • zmc1216
  • zmc1216
  • 2014-12-29 11:21
  • 671
    个人资料
    • 访问:47937次
    • 积分:669
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论