一、什麼是rootfs
rootfs是Linux系統中的一個非常重要的概念,也是Linux嵌入式開發中的一個重要部分。rootfs是操作系統內核啟動後掛載的根文件系統,也是用戶空間基礎的文件系統,提供了文件和目錄的基本信息。在Linux系統啟動後,內核實現了系統調用、進程管理、內存管理等基本功能,然後將根文件系統作為用戶空間的基礎,繼續提供更高級別的服務。
rootfs在其他文件系統還沒有初始化之前被掛載在根目錄下,可以理解為“第一個文件系統”,它包括Linux操作系統所必需的所有組件和文件,例如:設備文件、命令、庫文件、配置文件等等,同時也支持用戶添加自定義的文件和目錄。究其原理,Linux的系統啟動流程包含了三段式啟動過程,第一階段是Bootloader、第二階段是Kernel(內核)、第三階段是用戶空間或者說Root File System。
二、rootfs的掛載方式
在Linux系統中 mount 命令用於將文件系統掛載到指定路徑。對 rootfs 掛載,可以在系統啟動時通過Kconfig配置文件進行設定。Kconfig配置路徑為“Kernel building -> Filesystem ->”下的“Initial RAM filesystem and RAM disk”。
1、Uses initramfs / rootfs (Initramfs source file(s))
在Type of root filesystem中選擇initramfs,當系統啟動時,先掛載initramfs,在initramfs中配置好rootfs中的初始設置和應用程序,並使用/bin/init代替/bin/sh以啟動用戶空間,之後進行rootfs掛載,最終完成系統啟動。
2、Root filesystem (initramfs) contents
在rootfs配置菜單中,有一個選項允許我們指定rootfs掛載點。此過程通常涉及將根文件系統的映像文件複製到bootloader文件系統的RAM中,並在內核啟動時從中提取該映像文件。此映像文件包含初始文件系統和應用程序。
以上兩種掛載方式都是非常常見的,其中第二種方式常用於不支持initramfs的平台,但是相對於第一種方式,會增加額外的工作量。
三、rootfs的文件類型和作用
Linux中rootfs的文件類型可以分為以下幾種:
1、普通文件
普通文件是用戶在文件系統中創建的可讀、可寫的文件,像調試信息、配置文件等等,它們是Linux系統中最基本的文件類型,通常存在於系統中的各種用戶應用程序中,如命令行工具。
2、塊特殊文件
塊特殊文件與普通文件最大的區別在於塊特殊文件為非常重要的硬件設備提供支持。Linux系統中/dev目錄下的塊特殊文件通常與文件系統直接掛載的設備有關,例如:硬盤、U盤、SD卡等。
3、字符特殊文件
字符特殊文件也是用於實現硬件設備驅動的重要組成部分,通常包括為硬件設備提供支持的程序、驅動程序和插件。通過這些驅動程序,用戶可以訪問並控制各種硬件設備,如串口、USB設備等。
4、目錄文件
目錄文件用於組織其他文件和目錄。目錄文件下還可以包含具有特定關係的文件和目錄,如 /etc/cron.daily 目錄中的cron.daily文件。
除上述文件類型外,rootfs還提供了許多其他功能,如模塊、配置文件、腳本、鏈接文件等。
四、rootfs的使用案例之BusyBox
BusyBox集成了Linux系統中的常見工具程序,如ls、cat、mount等,並可以將這些工具程序組合成一個可執行文件。因此,BusyBox也常用於解決嵌入式系統上的文件系統、磁盤、網絡等常見問題。
在使用BusyBox時,首先需要將 BusyBox 作為靜態庫鏈接到嵌入式 Linux 系統中,並指定 init 程序作為 rootfs 中的第一個進程。這樣就得到了一個非常簡單的、啟動嵌入式 Linux 系統的方法。
BusyBox的安裝方法:
1.下載busybox源碼包
2.解壓後進入源碼目錄
3.使用make menuconfig進行配置
4.使用make進行編譯
BusyBox的使用方法:
1.從busybox/targets目錄下拷貝busybox二進制文件至tftp目錄下。
2.修改u-boot配置文件,設置啟動參數。
setenv bootargs "console=ttyAMA0,115200 root=/dev/nfs nfsroot=mynfs:/export/nfsroot2 ip=192.168.1.3:192.168.1.1:192.168.1.1:255.255.255.0::eth0:off"
tftp 0x2000000 busybox-1.18.5_nfs (把busybox下載到內存0x2000000
bootm (到0x2000000運行)
3.之後便可以通過nfs服務啟動對應的嵌入式系統。
五、rootfs的優化策略
為了提高系統的效率和性能,開發者需要對 rootfs 進行一定的優化。
1、精簡文件系統
在不影響系統正常運行的前提下,盡量精簡文件系統,減少空間佔用的大小和系統啟動時間的長短。可以刪除一些不必要的文件、目錄包括一些無用的語言庫等等。
2、讀寫效率優化
為了提高文件系統的讀寫效率,在編譯隨內核啟動模塊時,需要將一些經常讀寫的文件、目錄組建進rootfs文件,從而改善iocps和應用讀寫文件的響應速度和效率。
3、文件壓縮
文件壓縮可以去除一些不必要的文件或者將文件的大小縮減,從而達到減小文件系統體積和加快啟動速度的目的。通常的壓縮方式包括zlib、gzip、lzma等等。
4、文件系統緩存
Linux內核中緩存機制是提高文件讀寫性能的一個重要方法。對於文件系統中的數據,內核會將其緩存到一段空間中,以便提高訪問速度,加快文件的讀寫操作。
六、結語
rootfs是Linux系統的重要組成部分,為操作系統的文件系統和用戶空間基礎提供了支持,不同的rootfs掛載方式和文件類型也能夠滿足不同開發者的需求。同時,為了提高系統效率和性能,不斷優化rootfs也是嵌入式Linux開發中的關鍵任務之一。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/157487.html