linux文件系統源碼
⑴ linux操作系統的源代碼
Linux是一個開放的,自由的類Unix操作系統,它的源代碼是公開的, 各個版本的Linux,包括從內核到許許多多的應用程序的源代碼, 以及可執行文件都可以免費從互聯網上下載。
你也可以通過光碟得到Linux系統,和一般的軟體不同的是, 你可以合法的和你的朋友分享Linux光碟。很顯然Linux光碟的價格不會很高, 第一,因為你可以免費從網上下載;第二,你可以和你的朋友合夥湊錢買一套Linux光碟, 再和你的朋友分享使用。
Linux和一般的軟體不同,是可以和你的朋友分享的。 舉個例子來說:
如果朋友家有張非常漂亮的窗子,但是這窗子是95牌的, 那麼你仿製是違法的,如果這窗子是X牌的,或者說牌子是GPL, 那麼你仿製就不違法。如果你不想違法,但又想要漂亮的窗子, 答案是選擇自由軟體。選擇Linux。
Linux准確的說,是一個系統內核,它是最初在91年, 由芬蘭的了不起的學生Linus Torvalds發起, 接著又有全世界的志願者加入進來開發的。
現在有一些軟體公司在做Linux的生意, 著名的有RedHat,SuSE以及Caldera等等, 這些公司發布自己的基於Linux內核的一整套的Linux系統: 這些整套的系統通常包括有:一個C語言及C++編譯器,Perl腳本解釋程序, 外殼Shell,圖形用戶界面X窗口系統,包括有X Server以及眾多的應用程序等等。
這些整套的Linux系統按照習慣叫做Linux發布(distribution)。 目前使用最廣泛的Linux發布是RedHat公司的RedHat Linux。 以前使用廣泛的Slackware,現在也還有許多人在使用, 我自己的第一個Linux系統就是Slackware,現在我玩的是Debian, Debian和其他的Linux發布的不同之處在於:Debian是完全由志願者開發的, 不像RedHat和SuSE,是由軟體公司所支持的。
RedHat是使用最廣泛的Linux發布,並且RedHat公司現在得到了Netscape, 以及Intel的支持,前景看好,根據一般的看法Redhat也是最容易上手的Linux發布。
SLackware和RedHat相比要稍微復雜一些,這主要是指軟體的安裝方面, 由於RedHat使用rpm打包系統,安裝新軟體簡單到只要一行命令即可。 而Slackware往往要從源代碼重新編譯,稍微費事一些。
SuSE也是基於rpm打包系統,SuSE的特別之處在於它對X窗口系統的支持非常好, SuSE的吉祥物是一隻綠色的蜥蜴,非常可愛。
Debian基於自己的Deb格式的打包系統,但是它也可以安裝rpm軟體包。
Linux可以運行在DEC公司的Alpha機上,也可以運行在Sun公司的Sparc機器上。 當然也可以運行在Intel公司的386以上的機器上。 編寫的好的源代碼可以不經修改的在各種不同的Linux平台上直接編譯安裝運行, 但是顯然,不同的硬體平台之間的可執行文件是不兼容的。 但是一個特別針對Intel機器的rpm軟體包是可以輕易的在for Intel的RedHat,SuSE,Debian, 以及Slackware上安裝運行起來的。
RedHat,SuSE,Slackware以及Debian等各個發布之間的另一個不同是, 它們都帶有自己的系統管理工具。 RedHat使用著名的控制面板+Linuxconf, Debian使用臭名昭著的dselect(為什麼說臭名昭著?因為它非常難控制, 我自己只要有可能,就盡量不碰它) Slackware使用pkgtool, SuSE也有自己的管理工具。
Linux是一個開放的操作系統,它的各個部分:內核,應用程序, 庫程序是有機的結合的。並不是固定的死死的,碰都不能碰。Linux的內核的版本號是XX.XX.XX格式的,由三個數字組成, 第一個數字是主版本好,第三個數字是輔版本號,中間的數字如果是奇數, 表示這是一個開發版的內核,如果是偶數,表示是一個相對穩定的,可靠的內核。 一般來講,除非你正在研究Linux內核,或有特別的需要, 否則不要擺弄奇數版本的內核。
今天演示的第三個部分是Linux下的軟體。常常有人抱怨Linux缺乏有效的軟體的支持, 這在一定情況下的確如此,但是另一方面也是我們對Linux了解太少, Linux平台上現在已經有了相當多的應用軟體。 並且Linux正在得到越來越多的廠家的支持。 這段時間炒的非常火的Oracle,Sybase等等大型資料庫的Linux版本就是一例。
Linux下不但有類似於PhotoShop的免費的圖像編輯軟體:gimp, 還有免費的類似於3DS的三維設計軟體:MoonLight。 並且所有這些軟體,你都可以得到源代碼。
Linux下的圖形用戶界面是基於X窗口系統的, 這也秉承了Linux的一貫傳統:開放的,有機結合的。 XFree86隻是圖形界面的伺服器,上面可以運行各種不同的窗口管理器, 現在著名的窗口管理器有AfterStep,WindowMaker,以及Enlightenment。 有的窗口管理器做得非常的漂亮,真是叫做不看不知道,一看嚇一跳。 另外,如果你不喜歡花哨的窗口管理器,你可以選擇wm2或者9wm, 它們只佔用非常少的系統資源,我自己經常使用的就是9wm。
有了X伺服器和一個窗口管理器,你就有了圖形用戶界面。 你就可以運行Gimp或者Moonlight了,甚至你還可以運行Doom和quake!
現在還有一批程序員正在為Linux開發免費的,開放源代碼的紅色警報。
對Linux的一個最主要的批評是:Linux缺乏支持。 坦白的說,就我自己作為一個個人用戶來講,我覺得Linux的支持非常的好。 我曾經在安裝Debian的時候遇到幾個問題, 到Debian的Mail List里發信詢問了一下,幾個小時後就得到了答案。
⑵ Linux操作系統的文件系統有哪幾部分組成
Linux各種發行版的目錄結構基本一致,各個目錄簡單介紹如下:
/ 根目錄
/bin 做為基礎系統所需要的最基礎的命令就是放在這里。比如
ls、cp、mkdir等命令;功能和/usr/bin類似,這個目錄中的文件都是可執行的,普通用戶都可以使用的命令。
/boot Linux的內核及引導系統程序所需要的文件,比如
vmlinuz initrd.img
文件都位於這個目錄中。在一般情況下,GRUB或LILO系統引導管理器也位於這個目錄;啟動裝載文件存放位置,如kernels,initrd,grub。一般是一個獨立的分區。
/dev 一些必要的設備,音效卡、磁碟等。還有如
/dev/null. /dev/console /dev/zero /dev/full 等。
/etc 系統的配置文件存放地.
一些伺服器的配置文件也在這里;比如用戶帳號及密碼配置文件; /etc/opt:/opt對應的配置文件
/etc/X11:Xwindows系統配置文件
/etc/xml:XML配置文件
……
/home 用戶工作目錄,和個人配置文件,如個人環境變數等,所有的賬號分配一個工作目錄。一般是一個獨立的分區。
/lib 庫文件存放地。bin和sbin需要的庫文件。類似windows的DLL。
/media 可拆卸的媒介掛載點,如CD-ROMs、移動硬碟、U盤,系統默認會掛載到這里來。
/mnt 臨時掛載文件系統。這個目錄一般是用於存放掛載儲存設備的掛載目錄的,比如有cdrom 等目錄。可以參看/etc/fstab的定義。
/opt 可選的應用程序包。
/proc 操作系統運行時,進程(正在運行中的程序)信息及內核信息(比如cpu、硬碟分區、內存信息等)存放在這里。/proc目錄偽裝的文件系統proc的掛載目錄,proc並不是真正的文件系統,它的定義可以參見 /etc/fstab 。
/root Root用戶的工作目錄
/sbin 和bin類似,是一些可執行文件,不過不是所有用戶都需要的,一般是系統管理所需要使用得到的。
/tmp 系統的臨時文件,一般系統重啟不會被保存。
/usr 包含了系統用戶工具和程序。 /usr/bin:非必須的普通用戶可執行命令
/usr/include:標准頭文件
/usr/lib:/usr/bin/
和 /usr/sbin/的庫文件 /usr/sbin:非必須的可執行文件/usr/src:內核源碼/usr/X11R6:X Window System, Version 11, Release 6.
/srv 該目錄存放一些服務啟動之後需要提取的數據
⑶ linux 文件系統 是什麼意思
文件系統是操作系統用於明確存儲設備(常見的是磁碟,也有基於NANDFlash的固態硬碟)或分區上的文件的方法和數據結構;
即在存儲設備上組織文件的方法。
操作系統中負責管理和存儲文件信息的軟體機構稱為文件管理系統,簡稱文件系統。
文件系統由三部分組成:文件系統的介面,對對象操縱和管理的軟體集合,對象及屬性。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。
⑷ 如何查看 linux 內核源代碼
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識;2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標准C的擴展的知識的了解。另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下Linux內核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於X86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/*/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。
fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/*/lib/目錄下。
scripts此目錄包含用於配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
俗話說:「工欲善其事,必先利其器」。 閱讀象Linux核心代碼這樣的復雜程序令人望而生畏。它象一個越滾越大的雪球,閱讀核心某個部分經常要用到好幾個其他的相關文件,不久你將會忘記你原來在干什麼。所以沒有一個好的工具是不行的。由於大部分愛好者對於Window平台比較熟悉,並且還是常用Window系列平台,所以在此我介紹一個Window下的一個工具軟體:Source Insight。這是一個有30天免費期的軟體,可以從www.sourcedyn.com下載。安裝非常簡單,和別的安裝一樣,雙擊安裝文件名,然後按提示進行就可以了。安裝完成後,就可啟動該程序。這個軟體使用起來非常簡單,是一個閱讀源代碼的好工具。它的使用簡單介紹如下:先選擇Project菜單下的new,新建一個工程,輸入工程名,接著要求你把欲讀的源代碼加入(可以整個目錄加)後,該軟體就分析你所加的源代碼。分析完後,就可以進行閱讀了。對於打開的閱讀文件,如果想看某一變數的定義,先把游標定位於該變數,然後點擊工具條上的相應選項,該變數的定義就顯示出來。對於函數的定義與實現也可以同樣操作。別的功能在這里就不說了,有興趣的朋友可以裝一個Source Insight,那樣你閱讀源代碼的效率會有很大提高的。怎麼樣,試試吧!
⑸ 都說linux是開源的,到底怎麼開源了
兄弟,如果你用一個多月的Linux還沒有見過Linux kernel的話,我只能說你沒有用心去學,而只是玩兒Linux罷了。Linux 內核源代碼就在Linux文件系統中,它的存放目錄就在:/usr/src下面。
所謂的開源顧名思義就是開放源代碼,在Linux中用的大多數的軟體都是開放源代碼的,你可以在那些為Linux提供應用軟體廠商的官方網站上去下載它們的完整的源代碼來閱讀和修改,但是尊從GNU的規則,你對源代碼的修改,也要開放源代碼並上傳到網路中,供大家來做進一步的改進。
⑹ 如何查看linux系統源碼
一般在Linux系統中的/usr/src/linux*.*.*(*.*.*代表的是內核版本,如2.4.23)目錄下就是內核源代碼(如果沒有類似目錄,是因為還沒安裝內核代碼)。另外還可從互連網上免費下載。注意,不要總到http://www.kernel.org/去下載,最好使用它的鏡像站點下載。請在http://www.kernel.org/mirrors/里找一個合適的下載點,再到pub/linux/kernel/v2.6/目錄下去下載2.4.23內核。
代碼目錄結構
在閱讀源碼之前,還應知道Linux內核源碼的整體分布情況。現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序和網路等組成。Linux內核源碼的各個目錄大致與此相對應,其組成如下(假設相對於Linux-2.4.23目錄):
1.arch目錄包括了所有和體系結構相關的核心代碼。它下面的每一個子目錄都代表一種Linux支持的體系結構,例如i386就是Intel CPU及與之相兼容體系結構的子目錄。PC機一般都基於此目錄。
2.include目錄包括編譯核心所需要的大部分頭文件,例如與平台無關的頭文件在include/linux子目錄下。
3.init目錄包含核心的初始化代碼(不是系統的引導代碼),有main.c和Version.c兩個文件。這是研究核心如何工作的好起點。
4.mm目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/*/mm目錄下。
5.drivers目錄中是系統中所有的設備驅動程序。它又進一步劃分成幾類設備驅動,每一種有對應的子目錄,如音效卡的驅動對應於drivers/sound。
6.ipc目錄包含了核心進程間的通信代碼。
7.moles目錄存放了已建好的、可動態載入的模塊。
8.fs目錄存放Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext3文件系統對應的就是ext3子目錄。
Kernel內核管理的核心代碼放在這里。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
9.net目錄里是核心的網路部分代碼,其每個子目錄對應於網路的一個方面。
10.lib目錄包含了核心的庫代碼,不過與處理器結構相關的庫代碼被放在arch/*/lib/目錄下。
11.scripts目錄包含用於配置核心的腳本文件。
12.documentation目錄下是一些文檔,是對每個目錄作用的具體說明。
一般在每個目錄下都有一個.depend文件和一個Makefile文件。這兩個文件都是編譯時使用的輔助文件。仔細閱讀這兩個文件對弄清各個文件之間的聯系和依託關系很有幫助。另外有的目錄下還有Readme文件,它是對該目錄下文件的一些說明,同樣有利於對內核源碼的理解。
在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程序的執行順序逐步進行;所謂橫向,就是按模塊進行。它們經常結合在一起進行。對於Linux啟動的代碼可順著Linux的啟動順序一步步來閱讀;對於像內存管理部分,可以單獨拿出來進行閱讀分析。實際上這是一個反復的過程,不可能讀一遍就理解。
⑺ 如何製作 linux 文件系統
一、什麼是文件系統 (Filesystem)
文件系統是包括在一個磁碟(包括光碟、軟盤、閃盤及其它存儲設備)或分區的目錄結構;一個可應用的磁碟設備可以包含一個或多個文件系統;如果您想進入一個文件系統,首先您要做的是掛載(mount)文件系統;為了掛載(mount)文件系統,您必須指定一個掛載點。
二、主要嵌入式採用的文件系統
Linux 中,rootfs 是必不可少的。PC 上主要實現有 ramdisk 和直接掛載 HD(Harddisk,硬碟) 上的根文件系統;嵌入式中一般不從 HD 啟動,而是從 Flash 啟動,最簡單的方法是將 rootfs load 到 RAM 的 RAMDisk,稍復雜的就是 直接從Flash 讀取的 Cramfs,更復雜的是在 Flash 上分區,並構建 JFFS2 等文件系統。
RAMDisk 將製作好的 rootfs 壓縮後寫入 Flash,啟動的時候由 Bootloader load 到RAM,解壓縮,然後掛載到 /.這種方法操作簡單,但是在 RAM 中的文件系統不是壓縮的,因此需要佔用許多嵌入式系統中稀有資源 RAM.
ramdisk 就是用內存空間來模擬出硬碟分區,ramdisk通常使用磁碟文件系統的壓縮存放在flash中,在系統初始化時,解壓縮到SDRAM並掛載根文件系統, 在linux系統中,ramdisk有二種,一種就是可以格式化並載入,在linux內核2.0/2.2就已經支持,其不足之處是大小固定;另一種是 2.4的內核才支持,通過,ramfs來實現,他不能被格式化,但用起來方便,其大小隨所需要的空間增加或減少,是目前linux常用的ramdisk技術。
initrd 是 RAMDisk 的格式,kernel 2.4 之前都是 image-initrd,Kernel 2.5 引入了 cpio-initrd,大大簡化了 Linux 的啟動過程,附合 Linux 的基本哲學:Keep it simple, stupid(KISS)。 不過cpio-initrd 作為新的格式,還沒有經過廣泛測試,嵌入式 Linux 中主要採用的還是 image-initrd.
Cramfs 是 Linus 寫的很簡單的文件系統,有很好的壓縮綠,也可以直接從 Flash 上運行,不須 load 到 RAM 中,因此節約了 RAM.但是 Cramfs 是只讀的,對於需要運行時修改的目錄(如: /etc, /var, /tmp)多有不便,因此,一般將這些目錄做成ramfs 等可寫的 fs.
SquashFS 是對 Cramfs 的增強。突破了 Cramfs 的一些限制,在 Flash 和 RAM 的使用量方面也具有優勢。不過,據開發者介紹,在性能上可能不如 Cramfs.這也是一種新方法,在嵌入式系統採用之前,需要經過更多的測試
三、建一個包含所有文件的目錄
1、建一個目錄rootfs 用來裝文件系統
2、mkdir bin dev etc lib proc sbin tmp usr var
3、ln -fs bin/busybox linuxrc(使用busybox)
4、到系統 /dev 把所有的device打一個包,拷貝到 dev下面(最省事的做法);或者使用mknod來自己建所需要的device,我自己用的如下:
crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console crw-rw-rw- 1 root root 5, 64 2006-02-24 13:12 cua0 crw-rw-rw- 1 root root 63, 0 2006-02-24 13:12 dk0 crw-rw-rw- 1 root root 63, 1 2006-02-24 13:12 dk1 drwxr-xr-x 2 root root 4096 2006-02-24 13:12 flash brw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 hda crw-rw-rw- 1 root root 36, 10 2006-02-24 13:12 ipsec crw-rw-rw- 1 root root 241, 0 2006-02-24 13:12 ixNpe crw-rw-rw- 1 root root 1, 2 2006-02-24 13:12 kmem crw-rw-rw- 1 root root 126, 0 2006-02-24 13:12 ledman lrwxrwxrwx 1 root root 16 2007-09-19 14:08 log -> /tmp/var/log/log crw-rw-rw- 1 root root 1, 1 2006-02-24 13:12 mem crw-rw-rw- 1 root root 90, 0 2006-02-24 13:12 mtd0 brw-rw-rw- 1 root root 31, 0 2006-02-24 13:12 mtdblock0 brw-rw-rw- 1 root root 31, 1 2006-02-24 13:12 mtdblock1 brw-rw-rw- 1 root root 31, 2 2006-02-24 13:12 mtdblock2 brw-rw-rw- 1 root root 31, 3 2006-02-24 13:12 mtdblock3 brw-rw-rw- 1 root root 31, 4 2006-02-24 13:12 mtdblock4 brw-rw-rw- 1 root root 31, 5 2006-02-24 13:12 mtdblock5 brw-rw-rw- 1 root root 31, 6 2006-02-24 13:12 mtdblock6 crw-rw-rw- 1 root root 90, 1 2006-02-24 13:12 mtdr0 crw-rw-rw- 1 root root 1, 3 2006-02-24 13:12 null crw-rw-rw- 1 root root 108, 0 2006-02-24 13:12 ppp crw-r——r—— 1 root root 5, 2 2006-03-29 15:56 ptmx drwxr-xr-x 2 root root 4096 2006-03-29 15:56 pts crw-rw-rw- 1 root root 2, 0 2006-02-24 13:12 ptyp0 brw-rw-rw- 1 root root 1, 0 2006-02-24 13:12 ram0 crw-rw-rw- 1 root root 1, 8 2006-02-24 13:12 random crw-rw-rw- 1 root root 5, 0 2006-02-24 13:12 tty crw-rw-rw- 1 root root 4, 0 2006-02-24 13:12 tty0 crw-rw-rw- 1 root root 3, 0 2006-02-24 13:12 ttyp0 crw-rw-rw- 1 root root 4, 64 2006-02-24 13:12 ttyS0 crw-rw-rw- 1 root root 1, 9 2006-02-24 13:12 urandom crw-rw-rw- 1 root root 1, 5 2006-02-24 13:12 zero舉例: mknod console c 5 1 這樣 crw-rw-rw- 1 root root 5, 1 2006-02-24 13:12 console
5、將編譯好的busybox拷貝到/bin下面,除了busybox外,所有其他的命令都是他的link
ash chgrp clear dd echo fgrep gzip ip ls modprobe mv ping pwd sed stty tar true zcat busybox chmod cp df egrep grep hostname kill mkdir more netstat ping2file rm sh sync tftp umount cat chown date dmesg false gunzip ifconfig ln mknod mount pidof ps rmdir sleep sysinfo touch uname
所有的命令你可以在busybox下面用make menuconfig來增減
6、同樣/sbin下面也是busybox的link
halt ifconfig init insmod klogd losetup lsmod mkswap modprobe reboot rmmod route swapoff swapon
[NextPage]
7、同樣/usr/bin下面也是busybox的link
basename dirname env free id logger reset tail tr tty uptime which xargs
awk cut expr head killall mkfifo sort test traceroute uniq wc whoami yes
上面幾乎是最全的link,各個看官可以酌情刪減,不過link也不佔什麼空間!
8、同樣/usr/sbin下面放著所有編譯完的可執行文件,具體就不多說了
9、非常重要之/lib,務必重視
找到你編譯環境的target目錄,把需要的lib文件先用strip壓縮(非target目錄下的,而已編譯環境提供的strip),先把最基本的libc, ld等等,必須同樣做跟target/lib裡面一樣的link.
然後根據特定的應用加相應的lib,不要把不用的加進去,lib比較占空間。
10、在/etc下面加上需要的配置文件,最最重要的是rcS
#!/bin/sh export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/scripts UTC=yes mount -n -t proc proc /proc mount -n -t ramfs ramfs /tmp mount -n -t devpts devpts /dev/pts # build var directories /bin/mkdir -m 0777 /tmp/var /bin/mkdir -m 0777 /var/lock /bin/mkdir -m 0777 /var/log /bin/mkdir -m 0777 /var/run /bin/mkdir -m 0777 /var/tmp #/bin/mkdir -m 0777 /tmp/etc #/bin/cp -a /usr/etc//etc #/bin/cp -a /usr/dev//dev/ # loads the NPE ethernet moles into the kernel. insmod /lib/moles/2.6.13.2/intel/ixp400.ko # Firmware code for NPE Engine. cat /etc/IxNpeMicrocode.dat > /dev/ixNpe insmod /lib/moles/2.6.13.2/intel/ixp400_eth.ko netdev_max_backlog=500 insmod /lib/moles/led.ko insmod /lib/moles/push_button.ko下面的具體應用沒有再舉例加上了,這個是系統init必須的。
其他的情況類似如此了,下面裡面給了一個lunksys的GPL項目的target.
四、生成一個ramdisk
#!/bin/sh MODULE_NAME=ramdisk RAMPATH=`pwd` TMPPATH=${RAMPATH}/tmp SOURCE=${RAMPATH}/……/target if [ ! -d ${TMPPATH} ] then mkdir ${TMPPATH} fi if [ `whoami` != 'root' ] then { echo "You should run the shell as root, Please rerun as a root." echo "Aborting." exit 1 } fi # Clear in tmp path rm -rf ${TMPPATH}/tmpmnt rm -rf ${TMPPATH}/ramrootfs mkdir ${TMPPATH}/tmpmnt # Clear the old ramdisk rm -f ${RAMPATH}/$MODULE_NAME # Make a temp file which size is suitable dd if=/dev/zero of=${TMPPATH}/ramrootfs bs=1k count=6144 # Create a ext2 filesystem mke2fs -F -m 0 -i 2000 ${TMPPATH}/ramrootfs # Mount it to tmpmnt/ mount -o loop -t ext2 ${TMPPATH}/ramrootfs ${TMPPATH}/tmpmnt # Copy everything from kernel to this. cd ${TMPPATH}/tmpmnt echo ${SOURCE} cp -av ${SOURCE}/. cd ${TMPPATH} # Unmount it the ext2 filesystem umount ${TMPPATH}/tmpmnt cat ${TMPPATH}/ramrootfs | gzip -9 > /${RAMPATH}/ramdisk echo Copying ramdisk image to ${RAMPATH} sync這里給出一個自動生成腳本!
五、生成一個cramfs
找到cramfs的toolchain./mkcramfs -r $(FS1_DIR) $(FS_NAME)。1
六、生成一個mksquashfs
找到squashfs的toolchain./mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI
做文件系統最困難和最可能出問題的地方是在/lib庫和/dev方面,請大家多注意這兩方面。