Linux可以有多小(轉)
Linux可以有多小(轉)[@more@]這篇文章有些奇怪,在文章的一開始,我就要宣稱本文是沒有太大意義的。Linux 能有多小呢 ? 每一個做 embedded 系統的人都把小看成第一要務,其實這是不對的。如果我們對系統的好壞和大小作圖,它應該長得像...最小的 Linux kernel這篇文章有些奇怪,在文章的一開始,我就要宣稱本文是沒有太大意義的。Linux 能有多小呢 ? 每一個做 embedded 系統的人都把小看成第一要務,其實這是不對的。如果我們對系統的好壞和大小作圖,它應該長得像||----|| -----|| --------| ---|-----------------------小當然不會比較壞,但不一定比較好。如果系統使用 4MB 和 5MB 沒有價格或效能上的差別,那 4MB 和 5MB 是一樣好的。到底有多小廢話說了一堆,那到底 Linux 有多小呢? 好吧,各位這么有小牛頓的精神。我也只好想辦法生一個答案出來了。首先我必須宣告,我的不一定最小。不要說我在欺騙世人,你的核心比我小。我無意比較,我的資料只是給大家一個參考而己。不過我歡迎大家提出自己的心得,告訴大家怎么樣做出更小的核心。我使用的是 Mandrake 內付的 2.2.15,我沒有修改任何一行程式碼,完全只靠修改組態檔得到這些資料。首先,使用 make xconfig 把所有可以拿掉的選項都拿得。不要 floppy不要 SMP,MTRR不要 networking,SCSI把所有的 block device 移除,只留下 old IDE device把所有的 character device 移除把所有的 filesystem 移除,只留下 minix不要 sound 支援相信我,我己經把所有的選項都移除了。這樣做之後,我得到了一個 188K 的核心。還不夠小嗎? OK,再加上一招,請把下列二個檔案中的 -O3,-O2 用 -Os 取代。./Makefile./arch/i386/kernel/Makefile這樣一來,整個核心水小了 9K,成為 179K。不過這個核心恐怕很難發揮 Linux 的功能,因此我決定把網路加回去。把 General 中的 network support 加回去,重新程式設計,核心變成 189 K。10K 換個 TCP/IP stack,似乎是很上算的生意。不過有 stack 沒有 driver 也是惘然,所以我把 embedded board 常用的 RTL8139 的 driver 加回去,195K。如果你需要 DOS 檔案系統,那大小成為 213K。如果 minix 用 ext2 換代,則大小成長至 222K。不過大家要注意,那裡的大小指的是核心檔的大小。那和所需要的隨取記憶體是二回事。這個數字代表的意義是你需要多小的 ROM 來存放你的核心。Linux 所需的記憶體大約在 600~800 K 之間。1MB 可能可以開機了,但可能不太有用。因為可能連載入 C 程式庫都有困難。2MB 應該就可以做點事了,但可能要到 4MB 以上才可以執行一個比較完整的系統。到底誰佔了這些空間看到這裡,是不是覺得 Linux 真的有點大。好吧! 那我們就來看看誰佔用了這些空間,下面這個列表是從 222K 這個核心做出來的。# wcarch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.oipc/ipc.ofs/filesystems.anet/network.adrivers/block/block.adrivers/char/char.adrivers/misc/misc.adrivers/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結果如下 :243 2250 81946 arch/i386/kernel/kernel.o42 316 10569 arch/i386/mm/mm.o173 1541 74660 kernel/kernel.o266 2307 68053 mm/mm.o222 3139 123193 fs/fs.o49 602 21600 ipc/ipc.o263 2940 106504 fs/filesystems.a137 1510 65512 net/network.a92 719 39178 drivers/block/block.a230 2308 87556 drivers/char/char.a1 1 8 drivers/misc/misc.a83 721 25680 drivers/net/net.a1 1 8 drivers/pnp/pnp.a20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a23 150 7714 /usr/src/smalllinux/lib/lib.a20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a1865 18879 731233 total先說明一下,這裡的大小和最終的大小有點差別,但大致還是可以做個參考。這邊顯示 730K 實際上大約在 600K 左右。很顯然的,filesystem 相當的大。大約在 230K 左右,佔了 1/3 的體積。記憶體管理佔了 80K,和核心其它部份的總合差不多。TCP/IP stack 佔了 65K,驅動程式佔了 120K。SysV IPC 佔了 21K,必要的話可以拿掉,核心檔應該可以再小個 10K 左右。所以如果要減核心大小,應該動那裡呢? 答案應該很明顯,當然是檔案系統。Linux 的 VFS 減化了檔案系統的設計,buffer cache, directory cache 增加了系統的效率。但這些對整個系統都在 flash 上的 embedded 系統而言根本就用處不大。如果可以把它們對拿掉,核心可以馬上縮小 20K 左右。如果跳過整個 VFS,直接將檔案系統寫成一個 driver 的型式,應該可以將 230K 縮減至 50K左右。整個核心縮到 100K 左右。從上面的資料來看,ucLinux 所減小的 mm 部份反到省的不多,主要是 mm 除了 virtual memory 之外,也要處理 memory allocation 的部份,這部份是省不得的。如果二者齊做,則 100K 以下的 Linux 核心不是不可能的事。結語如果有人有閒的話,不妨拿 2.0 或 1.0 的核心來試試。看能做出多小的核心。看完本文後,143K 的核心不再是技術上的挑戰了,是嗎? 也許明天就有人宣稱做了 120K 的核心了.....不過,所為何來,省那幾十K。不如好好想想 compressed filesystem 等更有用的技術吧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-938593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 朋友圈可以投放小程式,小程式直接分享朋友圈還有多遠?
- 微信小程式在哪裡開啟?目前已經有100多小程式可以使用微信小程式
- 從無到有Linux安裝小記(轉)Linux
- 小程式可以轉發到朋友圈嗎
- Linux IPC小結(轉)Linux
- 多門店小程式運營模式有哪些?模式
- Linux使用小知識(轉)Linux
- 普通人懂點資料分析,可以有多厲害?
- 小程式創業:小程式到底有多少個流量入口,真的有40多個嗎?創業
- 極小Linux系統有何妙用Linux
- dcat 有沒有辦法可以在一行header裡放置多個cardHeader
- 請問有沒有可以測試微信小程式 / 支付寶小程式的頁面渲染時間的工具?微信小程式
- 這個可以有!讓筆記本一秒變多屏筆記
- IPTV系統一個後臺可以有多個apk介面嗎?APK
- Linux支援多使用者嗎?Linux多使用者有哪些好處?Linux
- 【轉】linux date的多個用法Linux
- 【Java小疑問】java原始檔當中可以有多個類,但是為什麼只能有一個public類呢?Java
- 學完Linux,有哪些就業崗位可以選擇?Linux就業
- Linux可以增加分割槽大小嗎?有哪些好處?Linux
- 你與小程式開發的距離有多遠?
- LINUX-LILO可以裝在軟盤上(轉)Linux
- linux繫結多個ip(轉載)Linux
- [轉載] .NET 中可以有類似 JVM 的幻像引用嗎?JVM
- 有哪些免費的方法可以將PDF轉換成Word?
- 有了 Lutris,Linux 現在也可以啟動 Epic 遊戲商城Linux遊戲
- 簡訊跳轉微信小程式有哪些好處?微信小程式
- Linux檔名小寫的好處(轉)Linux
- Linux將可以跟Google talk 語音通話了(轉)LinuxGo
- 答疑:SATA硬碟上可以安裝Linux系統嗎?(轉)硬碟Linux
- 流氓與反流氓:流氓軟體有多忙?(轉)
- Linux下的多媒體軟體(轉)Linux
- 應用上雲可以有多快?
- DIV可以有name屬性
- 瀏覽器可以有多快?瀏覽器
- Linux世界這一週,有喜有憂(轉)Linux
- 有時間可以看看複習一下oracle-總結(轉)Oracle
- 微信小程式有旋轉動畫效果的音樂元件微信小程式動畫元件
- 關於Linux的幾個小誤解(轉)Linux