1. 程式人生 > >Linux根檔案系統裁剪 論文閱讀筆記

Linux根檔案系統裁剪 論文閱讀筆記

Linux裁剪方法研究 2006

Linux系統應用日益廣泛,但該系統龐大,裁剪困難。基於保留核心和系統必需檔案的原則,介紹了當前應用較廣的幾種方法

Linux裁剪原理:

裁剪Linux系統,必須首先了解Linux系統的啟動過程、系統檔案結構和軟體安裝方法。

Linux系統的啟動過程大致包括bios2部分、引導扇區、核心、根檔案及系統初始化。根檔案目錄框架包括目錄/bin/sbin/usr/etc/dev/root/boot/mnt/proc/homelib

常見的幾種方法:(1)定製安裝法。(2rpm裁剪法。(3)手工刪除法。

使用busybox後需要改變原來Linux系統的初始化過程,因為

busybox的一些命令與原來的有些區別,會導致Linux系統不能夠順利初始化,同時也可以進一步縮小Linux

Linux嵌入式系統根檔案系統的選擇與製作 2006

Linux根檔案系統是Linux核心啟動期間進行的最後操作之一,它是Linux嵌入式系統的一個重要組成部分,系統地分析了Linux嵌入式系統根檔案系統的型別,內容選擇以及製作方法。

Linux嵌入式系統根檔案系統的選擇與製作 2006

Linux應用於嵌入式系統的開發有如下一些優點:

(1)Linux自身具備一整套工具鏈,容易自行建立嵌入式系統的開發環境和交叉執行環境,並且可以跨越在嵌入式系統開發中模擬工具ICE的障礙。

(2)核心的完全開放,可以自己設計和開發出真正的硬實時系統;對於軟實時系統,在Linux

中也容易實現。

(3)強大的網路支援,可以利用Linux的完了過協議棧將其開發成為嵌入式的TCP/IP網路協議棧。

/home/mnt /opt /root 是針對多使用者的所以嵌入式系統中可以不要是否要boot 目錄取決於載入程式是否會在核心啟動之前從根檔案系統取回核心。注意存放二進位制的幾個目錄:/bin/sbin/usr/bin/usr/sbin的區別, /bin存放使用者和管理員都必需的命令, /sbin存放管理員必備的命令而普通使用者不需要的, /usr/bin存放的不是使用者必備的命令, /usr/sbin不是管理員必備的命令。

/lib裡的檔案可以用glibc的也可以選用uClibc後者與前者相容

體積小很多。必須包含的庫檔案主要有兩類:以*.so結尾實際的庫檔案和以*.so.version主修版本連線檔案它們是在程式執行時使用。必須包括下列檔案:

ld-2.1.3.solibutil -2.1.3.so ld-linux.so.2 libutil.so.1 libc-2.1.3.so libtermcap.so.2.0.8 libc.so.6 libtermcap.so.2 libcrypt -2.1.3.so libresolv.so.2 libcrypt.so.1 libresolv-2.1.3.so libdb-2.1.3.so libpthread.so.0 libdb.so.3 libpthread-0.8.so libdl -2.1.3.so libproc.so.2.0.0 libdl.so.2 libnss-files.so.2 libm-2.1.3.so libnss-files-2.1.3.so libm.so.6 libnss-dns.so.2 libnsl-2.1.3.so libnss-dns-2.1.3.so libnsl.so.

/etc目錄包含了Linux的配置檔案,它們決定Linux的引導,執行特性。

Ramdisk上的Ext2fs

優點:穩定、可靠、健壯,即可在所有基於Linux的系統上都可使用Ext2fs

缺點:(1Ext2fs是為IDE裝置那樣的塊裝置設計的,這些裝置的邏輯塊大小是512位元組,1K位元組等這樣的倍數。不太適合於扇區大小因裝置不同而不同的快閃記憶體裝置。(2Ext2fs沒有提供對扇區的擦除/寫操作的良好管理。為了在一個扇區中擦除單個位元組,必需將整個扇區複製到RAM,然後擦除,再重寫入。(3Ext2fs不能防禦掉電的情況,不支援損耗平衡。

JFFS2

(1)JFFS2在扇區級別上執行快閃記憶體擦除//讀操作比Ext2fs好。

(2)JFFS2提供了比Ext2fs更好的崩潰/掉電安全保護。

(3)專門為快閃記憶體晶片所建立,提供了更好的快閃記憶體管理。

CRAMFS

是一種被壓縮的只讀檔案系統,壓縮比50%,界於RAMDISKJFFS2之間的一種檔案系統。

TMPFS

基於記憶體的檔案系統,主要用於減少對系統的不必要的快閃記憶體寫操作這一唯一目的。因為TMPFS駐留在RAM中,所以寫//擦除操作發生在RAM而不是在記憶體中。還是用磁碟交換空間來儲存,並且當為儲存檔案而請求頁面時,使用虛擬記憶體子系統。

優點:(1)動態檔案系統的大小可以根據具體的檔案或目錄數量來縮放。(2)由於駐留在RAM中,讀寫操作很快。

缺點:系統重新引導時,會丟失所有資料。

根檔案系統的選擇原則:

flash,大RAMRAMdisk可能是最佳選擇。RAMdisk上的檔案系統是經過壓縮的,通常壓縮比比原生檔案系統(CRAMFSJFFS2)高很多,但是會使用較高的RAM。如果需要永久性儲存,不適合使用RAMdisk。此外,RAM價格相對於flash要便宜,但是更耗電。

如果系統擁有稍微多一點的flash,或者會盡可能給實際在目標版上執行的應用程式保留RAM空間,而且可以為執行時解壓縮出若干額外的CPU週期,那麼CRAMFS是個非常好的選項。其壓縮比低於RAM disk,但它的能力對大多數不需要永久儲存性嵌入式的應用來說已經夠了。

如果需要隨時改變檔案系統的任何部分,JFFS2將會是最好的選擇。JFFS2會為垃圾回收功能維護空間,並且它的元資料的結構允許檔案系統的寫入操作,所以JFFS2可以提供斷電可靠性和損耗平衡這兩個對使用flash系統來說非常重要的特性。但是如果使用NAND形式的flash裝置,便不適合使用JFFS2

基於ARM的嵌入式Linux作業系統移植的研究 2006

ARM Linux支援包括ARM7ARM9StrongARM等系列的ARM處理器,這些ARM處理器都帶有記憶體管理單元MMU,對於不帶記憶體管理單元的CPU,一般採用uClinux作為其作業系統。

略。

基於ARM的嵌入式檔案系統研究與設計 2010

在儲存裝置中,SD卡及相容SD卡協議的TF卡以其體積小、介面簡單、成本低、效能好、安全性高等特點在嵌入式儲存裝置中佔據了很大的市場份額。FAT檔案格式以其相容性好、應用廣泛、安全性高、資料儲存共享性好等優點被作為檔案格式應用於嵌入式檔案系統的涉及中。

μC/OS-II實時多工作業系統核心。它被廣泛應用於微處理器、微控制器和數字訊號處理器。

略。

基於嵌入式LinuxExt2根檔案系統製作分析 2015

基於PowerPC構架下的MPC8379E處理器,分析了在Linux2.6核心的基礎上製作Ext2根檔案系統的全過程,並給出了燒寫執行結果。根檔案系統包含了一百多個常用Linux命令,囊括了必備的連結庫檔案,壓縮後的燒寫映象只有2.3MB,可滿足大部分系統的要求。

PowerPC1991年,由AppleIBMMotorola3家公司組成的AIM聯盟退出了一種精簡指令集微處理器構架,具有優異的效能、較低的能量損耗以及較少的散熱量。

使用busybox來製作根檔案系統。原始大小為14.1M,經ext2壓縮之後為2.3MB

嵌入式Linux裁剪研究 2009

Linux作業系統設計的本意是用於桌面,它是一個通用的作業系統。但由於嵌入式系統使用環境的限制,嵌入式系統自身的一些特殊效能要求,包括不同程式的實時性、系統的體積、功能、可移植性、可裁剪性等方面的要求,是的開發嵌入式的Linux系統要做許多工作。

嵌入式Linux系統的實時性問題

Linux是分時系統。Linux分為使用者態和核心態兩種模式,程序執行在使用者態時,如果實時程序具有高的優先順序,可搶佔程序;但如果執行在核心時,實時程序不能搶佔程序。在定時器上,也有一些缺陷:(1) Linux週期模式定時器頻率僅為100Hz,遠不能滿足多種實時應用的要求。(2)軟定時由時鐘定時器完成,當軟定時器較多時,勢必引起共享時鐘定時器的衝突。此外,Linux程序採用多級輪轉排程演算法,一個程序在一個時間片內未完成,其優先順序將降低。雖然給實時程序提供了較高的優先順序,但是並沒有加入時間限制。此外,大量的非實時程序也可能對實時程序造成阻塞。

嵌入式Linux系統的GUI支援問題

嵌入式GUI就是在嵌入式系統中為特定的硬體裝置或環境而設計的圖形使用者介面系統。通常具有輕型、佔用資源少、高效能、可配置的特點,一些較成熟的嵌入式GUIMicrowindowsMiniGUIOpenGUI等。

嵌入式Linux系統的裁剪

兩種方式:一是以一個已經安裝好的系統為基礎,刪除掉不需要的檔案,以減小整個系統的尺寸,而事實上這個方法幾乎是行不通的。二是從零開始根據需要構建整個系統,一個個安裝需要的軟體包。

通常包含三個部分:Linux核心,根檔案系統和引導器。

Kernel提供了一個作業系統的基本功能,如記憶體管理,程序排程,檔案系統,網路等,以及裝置驅動程式。

Root filesystem是存放執行、維護系統所必須的各種工具軟體、庫檔案、指令碼、配置檔案和其他特殊檔案(如裝置節點)的地方,也可以安裝各種軟體包。通常根檔案系統位於某個磁碟分割槽。

Boot Loader的任務是從引導裝置裝載核心,引導系統執行。Linux常見的有早期的LILO和近期的GRUB

嵌入式Linux根檔案系統的構建與分析 2015

Linux系統移植主要包括bootloader的移植、核心移植、根檔案系統的移植。

嵌入式Linux共享庫裁剪技術分析與改進 2009

Linux系統大致有以下4中主要的裁剪技術。

(1)刪除冗餘檔案。幫助文件、輔助程式、配置檔案和資料模組等。

(2)共享庫裁剪。嵌入式系統應用程式是有限的,共享庫中可能有很多永遠不會用到的冗餘程式碼。

(3)採用具有通用功能的替代軟體包。Linux上有許多具有相似功能的軟體包,可以選擇其中佔儲存空間較小的軟體包並移植到嵌入式裝置上。

(4)修改原始碼,包括重新配置、編譯。去掉不需要的功能,重新配置核心等。

在 Linux 系統中,應用程式與庫之間可以靜態連結或動態連結。靜態連結時,連結器從庫中選取應用程式需要的程式碼,然後複製到生成的可執行檔案中。顯然,當靜態庫被多個程式使用時,磁碟上、記憶體中都是多份冗餘拷貝。動態連結時,連結器並不真的把庫程式碼複製到可執行檔案中;僅當可執行檔案執行時,載入器才檢查該庫是否已經被其它可執行檔案載入進記憶體,如果記憶體中不存在才從磁碟上載入該庫。這樣多個應用程式就可以共享庫中的程式碼的同一份拷貝,節約了儲存空間。

共享庫和可執行檔案中都有若干個符號表,其中定義了一些外部符號,分為匯出(export)符號和匯入(import)符號這兩種。匯出符號是指在該檔案中定義但可以被其它檔案使用的符號,一般是可以由其它檔案呼叫的函式;匯入符號是指被該檔案使用了但並沒有定義的符號,一般是被該檔案呼叫的函式,而且匯入符號一般指明瞭定義該符號的共享庫。

共享庫中就可能存在永遠不會被別的檔案呼叫到的匯出符號,將這些符號的相應程式碼從共享庫中刪除不會影響到系統的正常執行。 

nmreadelf 或 obidump 等工具可以讀出二進位制檔案(共享庫或應用程式或其中間目標檔案)中的所有外部符號的資訊。

查詢ψ中可能被應用程式和其它共享庫用到的匯出(入)符號。查詢提供這些符號的目標檔案並重新連結成較小的共享庫。重複前兩步操作直到裁剪不能繼續進行為止。

不足:首先,上述庫裁

剪技術的粒度只達到了目標檔案級,未被裁剪掉的目標檔案中還是有不必要的匯出符號及程式碼;其次由於庫的原始碼編寫沒有規範的標準,造成裁剪難度加大;第三,不同體系結構需要有不同的裁剪處理。

嵌入式Linux系統的裁剪優化和測試技術 2012

核心裁剪方式有多種 ,有基於原核心提供的 kbuild 體系的裁剪方法 ,有基於程式碼分析的 linux 裁剪方法 ,有基於呼叫圖的 linux裁剪方法。基於短開發週期的需求考慮 ,選擇採用 kbuild 體系的裁剪方法。Kbuild 體系通過預定義一些變數(obj-mobj-y)和目標 (bzImage),使核心的編譯和擴充套件變得十分方便 ,具有很強的可定製性。

Y - 將該功能編譯進核心 ;

N - 不將該功能編譯進核心 ;

M - 將該功能編譯成可以在需要時動態插入到核心中的模組 ;

略。

嵌入式Linux系統的移植及其根檔案系統的實現 2005

系統板儲存器空間分配

在宿主機上製作一個4MB大小的randisk根檔案系統,流程如下:

dd if=/dev/zero of=my_ramdisk bs=1k count=4096 

/*建立一個大小為4MB的塊,讀寫塊大小為1kB,輸入檔案/dev/zero,輸出檔案my_ramdisk*/

mke2fs -vm0 my_ramdisk 4096 /*mke2fsmy_ramdisk轉換為4MBext2格式FS*/

mount -o loop my_randisk /mnt/my_ramdisk_directory

/*mountmy_ramdisk掛載到/mnt/my_ramdisk_directory目錄,該目錄應先建好*/

gzip my_ramdisk /*壓縮my_ramdisk,生成檔案系統映像*/

面向應用的嵌入式Linux裁剪方法研究與實現 2009

函式呼叫關係圖的原理是提取程式工作過程中的各函式之間的呼叫關係,進而直觀的呈現出整個程式的函式關係結構,幫助我們更好的理解核心結構。將應用程式、系統庫以及核心抽象出來,構造一個整體的函式呼叫關係結構圖,然後根據這個關係圖刪除不必要的程式碼,最終所得到的將是面向應用的嵌入式Linux系統。

由於面向應用的裁剪方法主要是根據嵌入式系統初期所設計的具體應用目標,採用從上到下步步深入的程式碼分析的方法,從而能得到針對具體應用量體裁衣,按需裁剪,獲得比較理想的裁剪率。在實際的嵌入式系統中,系統的應用範圍在系統設計初期已經確定,而且以後更改的可能性比較小,因此可以採用面向應用的裁剪方法。

微型嵌入式實時作業系統檔案系統 2015

略。

基於ARM的嵌入式Linux移植技術 2010

嵌入式作業系統種類繁多,常見的使用廣泛的有:嵌入式LinuxWindows CEVxWorksμC/OS-IIPalm OS等。

嵌入式Linux特點:原始碼開放,技術支援強大。核心穩定可靠,裁剪後非常小,效率高,半年左右就有新的核心版本發行。uClinux是專為沒有記憶體管理單元或虛擬記憶體的處理器而涉及的嵌入式作業系統。

Windows CE特點是模組化、結構化、與處理器無關、圖形使用者介面出色、基於Win32應用程式介面、產品開發較為容易等。

Vxworks是一款實時性很強的嵌入式作業系統,可靠性良好、使用者開發環境友好、核心效能高、任務可裁剪。價格不菲。

μC/OS-II,用ANSI C編寫了絕大部分原始碼,移植性強、支援8位、16位、32位處理器,原始碼開放,結構小巧,可裁剪,可固化,搶佔式實時多工等。

Palm OS,特點是強大的靈活性和移動性,效能穩定,設計簡潔高效,應用程式豐富,作業系統介面開放。

目前關於Linux核心裁剪有三種方法:

(1)Linux自帶的配置編譯工具,可以使用該工具對Linux核心編譯、定製。

(2)對核心原始碼修改實現系統裁剪。

(3)以系統呼叫關係為基準對Linux核心進行裁剪。

根檔案系統在傳統PC機上掛載主要有兩種方式,一種是Ramdisk載入,另一種是通過硬碟的直接掛載來實現。由於嵌入式系統資源有限,很多情況下都是通過Flash啟動。嵌入式系統對根檔案系統的載入主要通過兩種方法來實現。一種實現途徑是載入根檔案系統到RAMRamdisk。開機啟動時一部分記憶體會被Ramdisk虛擬稱塊裝置,同時把壓縮好的檔案系統映像進行解壓縮,最後儲存在Ramdisk中。另一種實現途徑是MTD驅動。嵌入式中很多系統,比如YAFFSYAFFS2CramfsJFFS2等都可以被安裝稱MTD塊裝置。Flash晶片驅動也在MTD中包含,這種驅動程式主要面對上層,實現讀、寫、擦除等相關操作,MTD負責封裝這些操作,然後為使用者層提供裝置,裝置的型別主要有MTD blockMTD char

基於ARM的嵌入式Linux移植與裁剪研究 2007

太舊,略。

基於ARM的嵌入式平臺的研究與實現 2009

本輪講述了一個移植bootloaderkernelroot fs案例。類似其他論文。

基於ARM的嵌入式快閃記憶體驅動與UBIFS檔案系統的分析與實現 2014

大多數通用檔案系統都是針對速度較慢的傳統硬碟開發的,快取技術需要耗費大量系統資源,而嵌入式系統本身的系統資源就比較有限;嵌入式系統應用場合一般比較惡劣,而通用檔案系統的可靠性不足;NAND Flash的介面訪問不同於傳統硬碟,如使用通用檔案系統無法保證NAND FlashECC校驗與壞塊管理機制的靈活性。

為了能增加NAND Flash使用壽命與縮短檔案系統掛載時間,UBIFS應運而生。它具有損耗平衡、垃圾收集和壞塊管理等機制。相比較早出現的YAFFS JFFS等,有優秀的啟動速度,佔用記憶體更少,在大容量NAND Flash應用上表現尤其突出。

JFFS2讀寫速度塊,但是掛載速度慢。

Raw Flash與其他Flash的區別

UBI只能工作在Raw Flash上。UBI提供了基於MTD分割槽之上的卷分割槽與壞塊管理、損耗均衡機制。UBIFS工作在UBI卷之上,無需關係MTD層與Flash層的操作。

UBIFS的異地更新機制。

UBIFS VS YAFFS2,啟動時間快5s左右。

精簡型嵌入式檔案系統設計 2010

對於存在壽命問題的Flash儲存介質來說,傳統檔案系統是不能直接使用的,必須增加Flash轉換層FTL,但效能會收到FTL瓶頸的約束而大大降低。

當修改或新建的檔案寫入儲存器時,傳統檔案系統在寫入檔案內容時,並沒有同時寫入檔案的元資料(meta-data,與檔案有關的資訊,例如:許可權、所有者以及建立和訪問時間),而是等到有空的時候才寫入。如果在寫入檔案的元資料是突然斷電,會造成不一致,很多不一致,會導致很嚴重的後果。日誌檔案系統能很好的解決這個問題。日誌檔案系統用獨立的日誌檔案跟蹤磁碟內容的變化。在任何寫入前,現將系統改動寫入日誌尾部,當斷電時,只要檢測日誌尾部,就可以迅速回復整個系統,大大縮短了系統崩潰的恢復時間。日誌檔案系統主要分為兩類:

(1)LogStructure日誌檔案系統:日誌是整個系統的唯一結構,整個磁碟被看做一個大的日誌檔案,整個磁碟都由日誌來管理,日誌是檔案系統在磁碟上的唯一代表,所有的寫操作都在日誌的尾部進行。日誌可以擴充套件,每次磁碟塊被修改後,它總要寫往一個新的地址。這就意味著日誌中的一些老的資料塊變得過時,每隔一定的時間,清除程式會把它們回收,同時對這個磁碟的日誌資料進行整理:清除所有的過時塊,把有線的資料集中到日誌的邏輯意義上的尾部,這樣日誌邏輯上的前部就能過被重新利用了。

(2)MetaData日誌檔案系統:僅僅記錄元資料的修改。檔案系統在磁碟上劃分一塊單獨的區域,或者在檔案系統內部制定一個特殊的檔案來儲存日誌,把元資料的修改記錄在日誌的尾部。

NTFS檔案系統重要特性:

(1)通用索引功能:檔案可以建立關於任何屬性的索引。

(2)大磁碟和大檔案:更有效地支援非常大的磁碟和非常大的檔案。

(3)多資料流:檔案的實際內容被當作位元組流來處理。

(4)可恢復性:當傳送故障時,NTFS能重建檔案卷,並返回到一致的狀態。NTFS還會對重要的系統資料進行冗餘儲存。

(5)安全性:使用Windows物件模型來實施安全機制。

REFS是一種針對NAND Flash儲存介質涉及的嵌入式檔案,負責對嵌入式系統中的Flash儲存器空間進行有效的組織和管理,並對使用者或程序提供以檔案為物件的操作方法函式。

(1)具有損耗平衡特性

(2)檔案讀寫符合NAND Flash的頁讀寫和塊擦除特點

(3)壞塊管理能力

(4)具有恢復檔案和系統自我修復能力,提高可靠性

(5)具有良好的時間效能

(6)具有可移植和可擴充套件效能。

嵌入式Linux核心裁剪及移植的研究與實現 2009

略。

嵌入式儲存裝置上檔案系統的設計與實現 2007

略。

嵌入式裝置中基於NAND Flash的檔案系統設計和優化 2013

Flash儲存器的優點:

(1)讀效能的一致,無尋道和旋轉操作下,使隨機讀效能與順序讀效能幾乎一致;

(2)與含有機械組成的磁碟相比,Flash儲存器的讀、寫延遲明顯降低;

(3)高可靠性,平均無故時間比磁碟長一個數量級;

(4)低能耗,單位時間內能量消耗明顯低於RAM和磁碟儲存器。

嵌入式檔案系統的研究與設計 2007

略。

嵌入式Linux系統裁剪技術的分析與研究 2011

從軟體的角度看,嵌入式Linux一般由Linux核心、檔案系統、應用程式三個部分組成。因此現有的Linux的裁剪主要包括三個方面:核心的裁剪、Linux庫裁剪、應用程式的裁剪。

核心裁剪:見上面所提。

庫裁剪:可利用uClibc構建嵌入式Linux系統比glibc佔用更小的空間。

應用程式的裁剪(shell),一般使用BusyBox來代替shell程式,大大減小系統的體積。

文章對現有的GNU libc裁剪原理進行較細緻的分析,設計了新的GNU libc裁剪方案。

嵌入式Linux系統定製和裁剪技術的研究與實現 2006

略。

嵌入式系統中NAND Flash檔案系統的研究 2010

略。