Linux裁剪方法研究 2006 2
Linux裁剪原理: 2
Linux嵌入式系統根文件系統的選擇與制作 2006 3
Linux嵌入式系統根文件系統的選擇與制作 2006 3
基於ARM的嵌入式Linux操作系統移植的研究 2006
5
基於ARM的嵌入式文件系統研究與設計 2010 6
基於嵌入式Linux的Ext2根文件系統制作分析 2015
6
嵌入式Linux裁剪研究 2009 7
嵌入式Linux根文件系統的構建與分析 2015 8
嵌入式Linux共享庫裁剪技術分析與改進 2009
8
嵌入式Linux系統的裁剪優化和測試技術 2012 10
嵌入式Linux系統的移植及其根文件系統的實現 2005 10
面向應用的嵌入式Linux裁剪方法研究與實現 2009 11
微型嵌入式實時操作系統文件系統 2015 12
基於ARM的嵌入式Linux移植技術 2010
12
基於ARM的嵌入式Linux移植與裁剪研究 2007
13
基於ARM的嵌入式平台的研究與實現 2009 14
基於ARM的嵌入式閃存驅動與UBIFS文件系統的分析與實現 2014
14
精簡型嵌入式文件系統設計 2010 15
嵌入式Linux內核裁剪及移植的研究與實現 2009 18
嵌入式存儲設備上文件系統的設計與實現 2007 18
嵌入式設備中基於NAND Flash的文件系統設計和優化 2013 18
嵌入式文件系統的研究與設計 2007 19
嵌入式Linux系統裁剪技術的分析與研究 2011 19
嵌入式Linux系統定制和裁剪技術的研究與實現 2006 19
嵌入式系統中NAND Flash文件系統的研究 2010 19
Linux裁剪方法研究 2006
Linux系統應用日益廣泛,但該系統龐大,裁剪困難。基於保留內核和系統必需文件的原則,介紹了當前應用較廣的幾種方法。
Linux裁剪原理:
裁剪Linux系統,必須首先了解Linux系統的啟動過程、系統文件結構和軟件安裝方法。
Linux系統的啟動過程大致包括bios2部分、引導扇區、內核、根文件及系統初始化。根文件目錄框架包括目錄/bin、/sbin、/usr、/etc、/dev、/root、/boot、/mnt、/proc、/home和lib。
常見的幾種方法:(1)定制安裝法。(2)rpm裁剪法。(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。
缺點:(1)Ext2fs是為IDE設備那樣的塊設備設計的,這些設備的邏輯塊大小是512字節,1K字節等這樣的倍數。不太適合於扇區大小因設備不同而不同的閃存設備。(2)Ext2fs沒有提供對扇區的擦除/寫操作的良好管理。為了在一個扇區中擦除單個字節,必需將整個扇區復制到RAM,然後擦除,再重寫入。(3)Ext2fs不能防御掉電的情況,不支持損耗平衡。
JFFS2
(1)JFFS2在扇區級別上執行閃存擦除/寫/讀操作比Ext2fs好。
(2)JFFS2提供了比Ext2fs更好的崩潰/掉電安全保護。
(3)專門為閃存芯片所創建,提供了更好的閃存管理。
CRAMFS
是一種被壓縮的只讀文件系統,壓縮比50%,界於RAMDISK和JFFS2之間的一種文件系統。
TMPFS
基於內存的文件系統,主要用於減少對系統的不必要的閃存寫操作這一唯一目的。因為TMPFS駐留在RAM中,所以寫/讀/擦除操作發生在RAM而不是在內存中。還是用磁盤交換空間來存儲,並且當為存儲文件而請求頁面時,使用虛擬內存子系統。
優點:(1)動態文件系統的大小可以根據具體的文件或目錄數量來縮放。(2)由於駐留在RAM中,讀寫操作很快。
缺點:系統重新引導時,會丟失所有數據。
根文件系統的選擇原則:
少flash,大RAM,RAMdisk可能是最佳選擇。RAMdisk上的文件系統是經過壓縮的,通常壓縮比比原生文件系統(CRAMFS和JFFS2)高很多,但是會使用較高的RAM。如果需要永久性存儲,不適合使用RAMdisk。此外,RAM價格相對於flash要便宜,但是更耗電。
如果系統擁有稍微多一點的flash,或者會盡可能給實際在目標版上執行的應用程序保留RAM空間,而且可以為運行時解壓縮出若干額外的CPU周期,那麼CRAMFS是個非常好的選項。其壓縮比低於RAM disk,但它的能力對大多數不需要永久存儲性嵌入式的應用來說已經夠了。
如果需要隨時改變文件系統的任何部分,JFFS2將會是最好的選擇。JFFS2會為垃圾回收功能維護空間,並且它的元數據的結構允許文件系統的寫入操作,所以JFFS2可以提供斷電可靠性和損耗平衡這兩個對使用flash系統來說非常重要的特性。但是如果使用NAND形式的flash設備,便不適合使用JFFS2。
基於ARM的嵌入式Linux操作系統移植的研究 2006
ARM Linux支持包括ARM7、ARM9、StrongARM等系列的ARM處理器,這些ARM處理器都帶有內存管理單元MMU,對於不帶內存管理單元的CPU,一般采用uClinux作為其操作系統。
略。
基於ARM的嵌入式文件系統研究與設計 2010
在存儲設備中,SD卡及兼容SD卡協議的TF卡以其體積小、接口簡單、成本低、性能好、安全性高等特點在嵌入式存儲設備中占據了很大的市場份額。FAT文件格式以其兼容性好、應用廣泛、安全性高、數據存儲共享性好等優點被作為文件格式應用於嵌入式文件系統的涉及中。
μC/OS-II實時多任務操作系統內核。它被廣泛應用於微處理器、微控制器和數字信號處理器。
略。
基於嵌入式Linux的Ext2根文件系統制作分析 2015
基於PowerPC構架下的MPC8379E處理器,分析了在Linux2.6內核的基礎上制作Ext2根文件系統的全過程,並給出了燒寫運行結果。根文件系統包含了一百多個常用Linux命令,囊括了必備的鏈接庫文件,壓縮後的燒寫鏡像只有2.3MB,可滿足大部分系統的要求。
PowerPC是1991年,由Apple、IBM、Motorola3家公司組成的AIM聯盟退出了一種精簡指令集微處理器構架,具有優異的性能、較低的能量損耗以及較少的散熱量。
使用busybox來制作根文件系統。原始大小為14.1M,經ext2壓縮之後為2.3MB。
嵌入式Linux裁剪研究 2009
Linux操作系統設計的本意是用於桌面,它是一個通用的操作系統。但由於嵌入式系統使用環境的限制,嵌入式系統自身的一些特殊性能要求,包括不同程序的實時性、系統的體積、功能、可移植性、可裁剪性等方面的要求,是的開發嵌入式的Linux系統要做許多工作。
嵌入式Linux系統的實時性問題
Linux是分時系統。Linux分為用戶態和內核態兩種模式,進程運行在用戶態時,如果實時進程具有高的優先級,可搶占進程;但如果運行在內核時,實時進程不能搶占進程。在定時器上,也有一些缺陷:(1) Linux周期模式定時器頻率僅為100Hz,遠不能滿足多種實時應用的要求。(2)軟定時由時鐘定時器完成,當軟定時器較多時,勢必引起共享時鐘定時器的沖突。此外,Linux進程采用多級輪轉調度算法,一個進程在一個時間片內未完成,其優先級將降低。雖然給實時進程提供了較高的優先級,但是並沒有加入時間限制。此外,大量的非實時進程也可能對實時進程造成阻塞。
嵌入式Linux系統的GUI支持問題
嵌入式GUI就是在嵌入式系統中為特定的硬件設備或環境而設計的圖形用戶界面系統。通常具有輕型、占用資源少、高性能、可配置的特點,一些較成熟的嵌入式GUI:Microwindows、MiniGUI、OpenGUI等。
嵌入式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)符號這兩種。導出符號是指在該文件中定義但可以被其它文件使用的符號,一般是可以由其它文件調用的函數;導入符號是指被該文件使用了但並沒有定義的符號,一般是被該文件調用的函數,而且導入符號一般指明了定義該符號的共享庫。
共享庫中就可能存在永遠不會被別的文件調用到的導出符號,將這些符號的相應代碼從共享庫中刪除不會影響到系統的正常運行。
用nm、readelf 或 obidump 等工具可以讀出二進制文件(共享庫或應用程序或其中間目標文件)中的所有外部符號的信息。
查找ψ中可能被應用程序和其它共享庫用到的導出(入)符號。查找提供這些符號的目標文件並重新鏈接成較小的共享庫。重復前兩步操作直到裁剪不能繼續進行為止。
不足:首先,上述庫裁
剪技術的粒度只達到了目標文件級,未被裁剪掉的目標文件中還是有不必要的導出符號及代碼;其次由於庫的源碼編寫沒有規范的標准,造成裁剪難度加大;第三,不同體系結構需要有不同的裁剪處理。
嵌入式Linux系統的裁剪優化和測試技術 2012
內核裁剪方式有多種 ,有基於原內核提供的 kbuild 體系的裁剪方法 ,有基於代碼分析的 linux 裁剪方法 ,有基於調用圖的 linux裁剪方法。基於短開發周期的需求考慮 ,選擇采用 kbuild 體系的裁剪方法。Kbuild 體系通過預定義一些變量(obj-m,obj-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 /*用mke2fs將my_ramdisk轉換為4MB的ext2格式FS*/
mount -o loop my_randisk /mnt/my_ramdisk_directory
/*用mount將my_ramdisk掛載到/mnt/my_ramdisk_directory目錄,該目錄應先建好*/
gzip my_ramdisk /*壓縮my_ramdisk,生成文件系統映像*/
面向應用的嵌入式Linux裁剪方法研究與實現 2009
函數調用關系圖的原理是提取程序工作過程中的各函數之間的調用關系,進而直觀的呈現出整個程序的函數關系結構,幫助我們更好的理解內核結構。將應用程序、系統庫以及內核抽象出來,構造一個整體的函數調用關系結構圖,然後根據這個關系圖刪除不必要的代碼,最終所得到的將是面向應用的嵌入式Linux系統。
由於面向應用的裁剪方法主要是根據嵌入式系統初期所設計的具體應用目標,采用從上到下步步深入的代碼分析的方法,從而能得到針對具體應用量體裁衣,按需裁剪,獲得比較理想的裁剪率。在實際的嵌入式系統中,系統的應用范圍在系統設計初期已經確定,而且以後更改的可能性比較小,因此可以采用面向應用的裁剪方法。
微型嵌入式實時操作系統文件系統 2015
略。
基於ARM的嵌入式Linux移植技術 2010
嵌入式操作系統種類繁多,常見的使用廣泛的有:嵌入式Linux、Windows CE、VxWorks、μC/OS-II、Palm 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啟動。嵌入式系統對根文件系統的加載主要通過兩種方法來實現。一種實現途徑是加載根文件系統到RAM的Ramdisk。開機啟動時一部分內存會被Ramdisk虛擬稱塊設備,同時把壓縮好的文件系統映像進行解壓縮,最後存儲在Ramdisk中。另一種實現途徑是MTD驅動。嵌入式中很多系統,比如YAFFS、YAFFS2、Cramfs、JFFS2等都可以被安裝稱MTD塊設備。Flash芯片驅動也在MTD中包含,這種驅動程序主要面對上層,實現讀、寫、擦除等相關操作,MTD負責封裝這些操作,然後為用戶層提供設備,設備的類型主要有MTD block和MTD char。
基於ARM的嵌入式Linux移植與裁剪研究 2007
太舊,略。
基於ARM的嵌入式平台的研究與實現 2009
本輪講述了一個移植bootloader、kernel、root fs案例。類似其他論文。
基於ARM的嵌入式閃存驅動與UBIFS文件系統的分析與實現 2014
大多數通用文件系統都是針對速度較慢的傳統硬盤開發的,緩存技術需要耗費大量系統資源,而嵌入式系統本身的系統資源就比較有限;嵌入式系統應用場合一般比較惡劣,而通用文件系統的可靠性不足;NAND Flash的接口訪問不同於傳統硬盤,如使用通用文件系統無法保證NAND Flash的ECC校驗與壞塊管理機制的靈活性。
為了能增加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
略。