linux文件系統移植
A. 小白自製linux開發板 三. Linux內核與文件系統移植
Linux內核移植與文件系統構建過程
對於F1C100S/F1C200S,Linux官方源碼提供了licheepi nano的支持。我們可以通過使用licheepi nano的配置文件來完成內核移植。
首先,進入Linux系統官網下載最新長時間支持版本(推薦5.10.69)或根據個人需要選擇其他版本。在新頁面中,選擇【summary】,點擊【tag】中的【...】進行下載。下載完成後,將代碼復制到Ubuntu虛擬機並解壓。
接下來配置編譯過程。在VS中打開Linux內核代碼,找到Makefile文件並進行如下配置:指定架構為Arm,使用已安裝的編譯工具。修改Makefile中的ARCH 和 CROSS_COMPILE欄位,或直接在make命令中加上對應參數。進行內核配置,使用licheepi_nano的配置文件替換sunxi_defconfig,並完成內核和設備樹的編譯。
為了確保TF卡設備樹的正確配置,我們需要修改suniv-f1c100s.dtsi和suniv-f1c100s-licheepi-nano.dts文件。通過在根節點添加代碼確保設備樹正確識別硬體。
在編譯過程中,可能會因Ubuntu系統差異遇到編譯錯誤,可以通過復制錯誤信息並安裝缺失組件解決。首次編譯可能需要較長時間,完成後,內核文件zImage和設備樹文件suniv-f1c100s-licheepi-nano.dtb將生成。
為TF卡配置分區,通過Gparted軟體新建兩個分區,一個用於存放內核文件和設備樹文件,另一個用於根文件系統。選擇fat16和ext4格式,並配置相應卷標。完成分區後,使用文件管理器查看掛載的兩個分區。
將生成的內核文件和設備樹文件復制到TF卡的BOOT分區。插入開發板,重啟後,系統將自動進入內核啟動環節,此時需要確保文件系統正確掛載。
接下來進行文件系統移植。選擇Buildroot工具製作文件系統,通過官網下載buildroot2018.2.11版本並解壓。配置Target options、Build options、Toolchain和System configuration,確保系統兼容性。執行構建文件系統命令,等待完成。
將最終生成的rootfs.tar文件解壓到TF卡的第二分區。插入TF卡,進入root賬號後,系統將成功掛載根文件系統,進入shell交互環境。
對於命令行前置顯示#號的問題,修改/etc/profile文件以實現與常規Linux相同的操作體驗。在開發板運行過程中,需執行命令正常關閉系統,否則可能造成文件系統損壞。
完成內核和文件系統的移植後,我們可以通過Linux的GPIO系統在小開發板上實現LED燈的點燈實驗。配置文件系統,修改相關命令,編譯完成rootfs後重新寫入開發板。了解GPIO編號和值的計算方式,通過shell命令操作LED燈。
最後,雖然當前實現的點燈實驗較為基礎,但它是Linux內核功能的初步應用。未來,我們計劃升級硬體設備並進行更深入的開發。讓我們期待接下來的探索吧!
B. Linux文件系統的演變
說起文件系統的演變與發展,不得不從最早期的 Minix 操作系統開始說起。
Minix(MINI-UNIX) 是早期的一個迷你版本的 「類UNIX操作系統」 ,由荷蘭阿姆斯特丹自由大學計算機科學系的塔能鮑姆教授自行開發的可以與UNIX操作系統兼容的一個操作系統,因其小型,該操作系統被命名為 MINIX 。
MINIX 系統在設計之初,採用程序模塊化的思想,將一眾程序放在用戶空間運行,而不是在操作系統的內核中運行。如 「文件系統」 和 「存儲器管理」 等程序均是如此。
受 MINIX 操作系統的影響,早期的Linux操作系統也曾採用由塔能鮑姆教授開發的MINIX的文件系統。
然而,不只因為早期的 MINIX 操作系統並為真正意義上的開源軟體(在保護著作的前提下進行收費),而且基於 MINIX 的內部使用16位的偏移量,使文件系統能夠支持的最大空間只有64MB,支持的最大文件名為14字元,導致後來 Linux 操作系統轉而開發出了 ext(Extended File System) 第一代可擴展文件系統。
ext(Extended File System) 為Linux系統最早的擴展文件系統,採用 「UNIX文件系統」 的元數據結構,克服了 「MINIX」 操作系統性能不佳的問題。
ext 文件系統採用 虛擬文件系統(VFS) ,最大可支持2GB的文件系統。與 MINIX 文件系統不同的是, ext 可以使用最高2GB的存儲空間並同時處理255個字元的文件名。
但,在 ext 文件系統中,文件創建時生成的 inode 信息是不變的,這導致文件發生修改後 inode 中儲存的文件時間戳並不會發生變化;而且 ext 並不會為文件妥善分配空間,磁碟上的多個文件四散分布,嚴重製約了文件系統的性能。
ext 文件系統推出後不久,其開發者便意識到 ext 文件系統中存在很大缺陷( inode不變性 和 文件空間碎片化 ),並在一年後推出了 ext2 (Second Extened File System) 第二代擴展文件系統,用來代替 ext 文件系統。
ext2 吸取了 「UNIX文件系統」 的眾多優點,並且因其良好的可擴展性( 為系統在磁碟上存儲的數據結構預留了很多空間提供給開發者使用 ),在20世紀90年代眾多文件系統中脫穎而出。
眾多新的特性, POSIX(可移植操作系統介面) 、 訪問控製表 等都是在這一代擴展文件系統上實現的。直至今天, POSIX 仍被眾多操作系統所沿用。
不僅如此, ext2 還在 ext 的基礎上進行了完善,能夠最大支持的單個文件達到 2TB。
ext2 文件系統與20世紀90年代的眾多文件系統一樣,將數據寫入到磁碟的過程中如果發生系統奔潰或斷電,極容易導致文件損壞或丟失。
正是因為類似 ext2 等同時期的一眾文件系統,在遭遇系統奔潰或斷電時會出現文件損壞或丟失。盡管 ext2 文件系統擁有開機後對文件系統中文件的一致性校驗,但校驗的過程極為耗時,且校驗的過程中,操作系統上的任何卷組都是不可訪問的。
然而 ext2 遺留的問題在 ext3(Third Extended File System) 中得到了解決。
ext3 文件系統採用日誌記錄的方式,記錄下了操作系統運行中的所有事件,這意味著即便遇到操作系統非正常關機後也無須對文件系統進行校驗,從而防止了文件系統中數據丟失的可能。
盡管 ext3 使用日誌系統進行記錄文件系統的變化,但這並沒有影響 ext3 文件系統處理數據的速度。基於日誌系統在磁碟上的優化,在 ext3 中數據的傳輸效率是高於 ext2 的,並且可以通過重新設置日誌的級別來提升文件系統的性能。
其次, ext3 在設計之初就吸收了 ext2 的很多思想,這使得 ext2 文件系統遷移到 ext3 變得極為便利。事實上, ext3 可以在從 ext2 遷移 ext3 的過程中,無須進行文件系統資料的備份,且無須擔心升級後的數據恢復問題。
也正是因為 ext3 設計之初沿用了眾多 ext2 的功能,這使得 ext3 缺乏變通。例如, 「inode的動態分配」 和 「可變塊大小」 等問題並沒有得到解決。不僅如此, ext3 文件系統在被掛載為寫入時,無法對文件系統進行完整性校驗。
第四代擴展文件系統( Fourth Extended File System, ext4 ) 是繼 ext3 文件系統的後續版本,不僅支持 ext3 的日誌文件體系 ,同樣支持 大文件系統 ,不僅提高了文件系統對於存儲碎片化的抵抗,而且改進了 inode固一化 的問題。
同時, ext4 文件系統在開發之初就考慮到很多問題,對眾多問題的優化和改進也使得 ext4 擁有了眾多新的特性。例如, 大文件系統 、 使用Extent文件存儲的方式 、 預分配空間 、 延遲文件獲取空間的時間 、 突破原有子目錄限制 、 增加日誌校驗和 、 在線整理磁碟 、 文件系統快速檢查 、 向下兼容其他ext文件系統`。
時至今天, ext4 文件系統已經成為Linux發行版默認使用的文件系統。
與 ext2 文件系統同一時期出現的,還有 xfs 文件系統。 xfs 文件系統是高性能的文件系統,最早在 IRIX 操作系統上開發,後期被移植到 Linux 操作系統上。現在所有的 Linux發行版 都支持 xfs 的使用。
相比 32位 Linux 的操作系統來說,64位 xfs 的文件系統能夠支持的單個文件系統要遠遠超出 32位 操作系統。
xfs 對文件系統元數據提供了日誌支持,當文件系統發生變化後,總是會保證源數據在數據塊寫入磁碟之前被寫入日誌中,磁碟中有一處緩沖區專門用來存放日誌,從而不會影響正常的文件系統。
xfs 同樣支持 「條帶化分配」 。在條帶化RAID陣列上創建 xfs 文件系統時,可以指定 條帶化數據單元。通過配置條帶化單元,使 數據分配、inode分配、日誌等與RAID條帶單元對齊,來提高文件系統的性能。
與 ext4 文件系統不同的是, xfs 文件系統還支持在線恢復。 xfs 文件系統提供了 xfsmp 和 xfsrestore 工具協助備份 xfs 文件系統中的數據。
以下為各文件系統的出現時間及特性:
參考自: https://zh.wikipedia.org/wiki/Ext4
C. 嵌入式linux系統移植包含哪三部分內容
嵌入式Linux系統的移植主要有U-Boot、Linux內核、文件系統這三部分。
Uboot是在系統上電時開始執行,初始化硬體設備,准備好軟體環境,然後才調用Linux操作系統內核。文件系統是Linux操作系統中用來管理用戶文件的內核軟體層。文件系統包括根文件系統和建立於Flash內存設備之上文件系統。根文件系統包括系統使用的軟體和庫,以及所有用來為用戶提供支持架構和用戶使用的應用軟體,並作為存儲數據讀寫結果的區域。
可將Linux系統移植過程大致需要分成6個步驟:
1) 准備工作,包括下載源碼、建立交叉編譯環境等。交叉開發是指在開發主機上安裝開發工具,編輯、編譯目標板的引導程序、內核和文件系統,使其能在目標板上運行。
2) 配置和編bootloader(引導裝載程序)。通過這段小程序,可以初始化硬體設備、建立內存空間的映射表,從而建立適當的系統硬體環境,為最終調用操作系統內核做好准備。
3) 配置和編譯Linux內核,對其進行相應的裁剪,修改內核以支持相關的硬體設備。
4) 為大容量NAND Flash移植YAFFS文件系統,並將該文件系統加入Linux內核中;
5) 製作RAMdisk來掛載根文件系統。Linux系統中的文件和設備是通過文件系統來組織的。文件系統的存在使得數據和設備可以被有效而透明地存取訪問。一個linux的最簡根文件系統應該包括支持linux系統正常運行的基本內容,包括系統使用的軟體和庫,以及所有用來為用戶提供基本支持的架構和指令。
6) 燒寫、調試系統;如果調試出錯,則需要重新配置,返回上述步驟(2)。