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

2023-05-16

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系统。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Buildroot构建指南——根文件系统(Rootfs) 的相关文章

随机推荐

  • 【算法】151. 反转字符串中的单词

    链接 xff1a https leetcode cn problems reverse words in a string 给你一个字符串 s xff0c 请你反转字符串中 单词 的顺序 单词 是由非空格字符组成的字符串 s 中使用至少一个
  • TensorFlow中numpy与tensor数据相互转化

    numpy与tensor数据相互转化 xff1a Numpy2Tensor 虽然TensorFlow网络在输入Numpy数据时会自动转换为Tensor来处理 xff0c 但是我们自己也可以去显式的转换 xff1a data tensor 6
  • ESP32环境搭建 HomeKit 平台搭建 苹果智能家居HomeKit

    本文所有操作环境在linux下 xff0c 参考README文档 xff0c 官方sdk获取连接 https github com espressif esp apple homekit adk HomeKit是Apple开发的框架 xff
  • 乐鑫代码中Ring Buffers (环形缓冲区)说明

    本文翻译自乐鑫文档 xff0c 详见链接地址 xff0c 结合用例自行测试 xff0c 欢迎交流 源码链接ringbuf c 项目中用乐鑫的wifi模组 xff0c esp8266 xff0c esp32中发现ringbuf的身影 xff0
  • Qt界面程序中嵌入其他可执行exe程序

    背景 xff1a 本文实验环境 windows10 xff0c qt5 14 由于工作需要写了一个小的qt程序 xff0c 然后在实际使用过程中还要和其他小工具来回切换 xff0c 就想能不能把其他工具代码集成 xff0c 最后发现对我来说
  • Windows10系统旧电脑打包迁移新电脑

    由于需要换了一台新电脑 xff0c 但是配置系统是个繁琐的大工程 xff0c 想想windows的环境变量啥的就头大 xff0c 就想偷懒把系统直接转移到新电脑 xff0c 网上搜索了一下是可行的 xff0c 好多ghost备份还原 xff
  • 线程池1.0和any类

    threadpool h ifndef THREAD POOL H define THREAD POOL H include lt iostream gt include lt memory gt include lt functional
  • esp8266,esp32中的SPI FLASH 访问模式(QIO QOUT DIO DOUT)

    本文 ESP8266 和 ESP32 支持四种不同的 SPI flash 访问模式 xff1a DIO DOUT QIO 和 QOUT 这些可以通过 esptool py write flash 的 flash mode 选项设置 这些控制
  • IMX6ULL裸机启动,IMX6ULL运行freeRtos

    IMX6ULL裸机启动 xff0c IMX6ULL运行freeRtos 裸机启动部分 imx6ull中根据运行代码位置的不同RAM flash SD卡 xff0c 上电会先运行片上ROM中的代码 xff0c 搬运的数据大小是不同的 xff0
  • freeRtos中操作pxCurrentTCB部分汇编指令的理解

    关于freeRtos中操作pxCurrentTCB部分汇编指令的理解 asm void vPortSVCHandler void INDENT OFF PRESERVE8 ldr r3 61 pxCurrentTCB Restore the
  • 嵌入式开发中bin文件合并

    1 tr span class token string 39 000 39 span span class token string 39 377 39 span lt span class token operator span dev
  • 鲁班路由器AX1800折腾记录

    京东云鲁班畅享版64G Ram 512M flash 16M 型号 RF CP 02 ssh功能 当时看到帖子说R2010能直接进入ssh xff0c 果断关闭自动升级 xff0c 这一步就省略了 xff0c 参考如下 鲁班R2010 开通
  • Cannot convert a symbolic Tensor to a numpy array

    使用TF进行计算 xff0c 出现 xff1a Traceback most recent call last File 34 infer py 34 line 14 in lt module gt logits 61 classifier
  • ARM嵌入式系统为什么要做内存对齐

    做嵌入式系统软件开发 xff0c 经常在代码中看到各种各样的对齐 xff0c 很多时候我们都是知其然不知其所以然 xff0c 知道要做好各种对齐 xff0c 但是不明白为什么要对齐 xff0c 不对齐会有哪些后果 xff0c 这篇文章大概总
  • 第一篇博客,Hello World

    Hello World 这是我的CSDN第一篇博客 xff0c 掐指一算 xff0c 从学单片机开始 xff0c 学习开发嵌入式软件已经5年了 终于找到一个小窝能够和大家一起分享交流技术 今天是一个美好的开始 xff0c 你好 xff0c
  • Buildroot构建指南--Overview

    使用Buildroot 让嵌入式Linux系统构建更加便捷 本文以Buildroot 2016 05的版本为基础来讲解 xff0c 不同版本之间有细节差异 xff0c 需要根据读者使用的版本自行调整 Buildroot是什么 Buildro
  • Buildroot构建指南--快速上手与实用技巧

    Buildroot官方全英文使用手册的链接是https buildroot org downloads manual manual html xff0c 需要知道每一个细节的朋友 xff0c 可以仔细查阅 xff0c 这篇文章只是我自己从中
  • 构建Linux系统之实现Gnome桌面

    3 3 基于Ubuntu 实现Gnome 桌面 GNOME 是 GNU 网络对象模型环境 The GNU Network Object Model Environment 的简称 xff0c 目标是基于自由软件 xff0c 为Unix 或者
  • Buildroot构建指南——工具链

    Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件 一般大家默认工具链等于gcc或者arm linux gcc xff0c 但是实际上 xff0c gcc只是工具链的编译器部分 xff0c 不是全部 xff0c 制
  • Buildroot构建指南——根文件系统(Rootfs)

    Buildroot构建指南 根文件系统 Rootfs Buildroot的Rootfs构建流程有一个大框架 xff0c 有些部分是Buildroot系统做好的 xff0c 有些细节需要自己来实现 xff0c Rootfs也是Buildroo