国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

做一個(gè)最小的Linux kernel

2024-07-26 00:30:52
字體:
供稿:網(wǎng)友
linux 能有多小呢 ? 每一個(gè)做 embedded 系統(tǒng)的人都把小看成第一要?jiǎng)?wù),其實(shí)這是不對的。如果我們對系統(tǒng)的好壞和大小作圖,它應(yīng)該長得像
|
|----
|
| -----

| --------
| ---
|----------------------- 

小當(dāng)然不會(huì)比較壞,但不一定比較好。如果系統(tǒng)使用 4MB 和 5MB 沒有價(jià)格或性能上的差別,那 4MB 和 5MB 是一樣好的。 

到底有多小 
廢話說了一堆,那到底 Linux 有多小呢? 好吧,各位這么有小牛頓的精神。我也只好想辦法生一個(gè)答案出來了。 

首先我必須聲明,我的不一定最小。不要說我在欺騙世人,你的核心比我小。我無意比較,我的數(shù)據(jù)只是給大家一個(gè)參考而己。不過我歡迎大家提出自己的心得,告訴大家怎么樣做出更小的核心。 

我使用的是 Mandrake 內(nèi)付的 2.2.15,我沒有修改任何一行程序碼,完全只靠修改組態(tài)檔得到這些數(shù)據(jù)。 

首先,使用 make xconfig 把所有可以拿掉的選項(xiàng)都拿得。 

不要 floppy
不要 SMP,MTRR
不要 networking,SCSI
把所有的 block device 移除,只留下 old IDE device
把所有的 character device 移除
把所有的 filesystem 移除,只留下 minix
不要 sound 支援
相信我,我己經(jīng)把所有的選項(xiàng)都移除了。這樣做之后,我得到了一個(gè) 188K 的核心。
還不夠小嗎? OK,再加上一招,請把下列二個(gè)檔案中的 -O3,-O2 用 -Os 取代。
./Makefile
./arch/i386/kernel/Makefile 

這樣一來,整個(gè)核心水小了 9K,成為 179K。 

不過這個(gè)核心恐怕很難發(fā)揮 Linux 的功能,因此我決定把網(wǎng)絡(luò)加回去。把 General 中的 network support 加回去,重新編譯,核心變成 189 K。10K 換個(gè) TCP/ip stack,似乎是很上算的生意。 

不過有 stack 沒有 driver 也是惘然,所以我把 embedded board 常用的 RTL8139 的 driver 加回去,195K。 

如果你需要 DOS 檔案系統(tǒng),那大小成為 213K。如果 minix 用 ext2 換代,則大小成長至 222K。 

不過大家要注意,那里的大小指的是核心檔的大小。那和所需要的隨取記憶體是二回事。這個(gè)數(shù)字代表的意義是你需要多小的 ROM 來存放你的核心。 

Linux 所需的記憶體大約在 600~800 K 之間。1MB 可能可以開機(jī)了,但可能不太有用。因?yàn)榭赡苓B載入 C 程序庫都有困難。2MB 應(yīng)該就可以做點(diǎn)事了,但可能要到 4MB 以上才可以執(zhí)行一個(gè)比較完整的系統(tǒng)。 


到底誰占了這些空間 
看到這里,是不是覺得 Linux 真的有點(diǎn)大。好吧! 那我們就來看看誰占用了這些空間,下面這個(gè)列表是從 222K 這個(gè)核心做出來的。
# wc /
arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o /
ipc/ipc.o /
fs/filesystems.a /
net/network.a /
drivers/block/block.a /
drivers/char/char.a /
drivers/misc/misc.a /
drivers/net/net.a drivers/pnp/pnp.a /
/usr/src/smalllinux/arch/i386/lib/lib.a /
/usr/src/smalllinux/lib/lib.a /
/usr/src/smalllinux/arch/i386/lib/lib.a 



結(jié)果如下 : 


243 2250 81946 arch/i386/kernel/kernel.o
42 316 10569 arch/i386/mm/mm.o
173 1541 74660 kernel/kernel.o
266 2307 68053 mm/mm.o
222 3139 123193 fs/fs.o
49 602 21600 ipc/ipc.o
263 2940 106504 fs/filesystems.a
137 1510 65512 net/network.a
92 719 39178 drivers/block/block.a
230 2308 87556 drivers/char/char.a
1 1 8 drivers/misc/misc.a
83 721 25680 drivers/net/net.a
1 1 8 drivers/pnp/pnp.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
23 150 7714 /usr/src/smalllinux/lib/lib.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
1865 18879 731233 total 

先說明一下,這里的大小和最終的大小有點(diǎn)差別,但大致還是可以做個(gè)參考。這邊顯示 730K 實(shí)際上大約在 600K 左右。 

很顯然的,filesystem 相當(dāng)?shù)拇蟆4蠹s在 230K 左右,占了 1/3 的體積。記憶體管理占了 80K,和核心其它部份的總合差不多。TCP/IP stack 占了 65K,驅(qū)動(dòng)程序占了 120K。SysV IPC 占了 21K,必要的話可以拿掉,核心檔應(yīng)該可以再小個(gè) 10K 左右。 

所以如果要減核心大小,應(yīng)該動(dòng)那里呢? 答案應(yīng)該很明顯,當(dāng)然是檔案系統(tǒng)。Linux 的 VFS 減化了檔案系統(tǒng)的設(shè)計(jì),buffer cache, directory cache 增加了系統(tǒng)的效率。但這些對整個(gè)系統(tǒng)都在 Flash 上的 embedded 系統(tǒng)而言根本就用處不大。如果可以把它們對拿掉,核心可以馬上縮小 20K 左右。如果跳過整個(gè) VFS,直接將檔案系統(tǒng)寫成一個(gè) driver 的型式,應(yīng)該可以將 230K 縮減至 50K左右。整個(gè)核心縮到 100K 左右。 

從上面的數(shù)據(jù)來看,ucLinux 所減小的 mm 部份反到省的不多,主要是 mm 除了 virtual memory 之外,也要處理 memory allocation 的部份,這部份是省不得的。如果二者齊做,則 100K 以下的 Linux 核心不是不可能的事。 


結(jié)語 
如果有人有閑的話,不妨拿 2.0 或 1.0 的核心來試試。看能做出多小的核心。看完本文后,143K 的核心不再是技術(shù)上的挑戰(zhàn)了,是嗎? 也許明天就有人宣稱做了 120K 的核心了..... 

不過,所為何來,省那幾十K。不如好好想想 comPRessed filesystem 等更有用的技術(shù)吧!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日土县| 漾濞| 柳河县| 平度市| 密云县| 天水市| 乡宁县| 日喀则市| 盐津县| 奈曼旗| 古丈县| 沅陵县| 苗栗市| 昌都县| 阳朔县| 广东省| 阜宁县| 吴堡县| 湘潭县| 沙河市| 陇南市| 扬州市| 鄯善县| 河西区| 平阳县| 卢氏县| 江孜县| 枞阳县| 沂水县| 莱西市| 五常市| 娄烦县| 托克托县| 滦平县| 昌江| 南充市| 平定县| 衡南县| 中山市| 砚山县| 盐池县|