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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 朋友圈可以投放小程式,小程式直接分享朋友圈還有多遠?
- 小程式可以轉發到朋友圈嗎
- linux繫結多個ip(轉載)Linux
- 極小Linux系統有何妙用Linux
- Linux支援多使用者嗎?Linux多使用者有哪些好處?Linux
- 有廈門的小夥伴可以內推的嗎
- Linux系統中有趣的命令(可以玩小遊戲)Linux遊戲
- 學完Linux,有哪些就業崗位可以選擇?Linux就業
- Linux可以增加分割槽大小嗎?有哪些好處?Linux
- 多門店小程式運營模式有哪些?模式
- 小程式創業:小程式到底有多少個流量入口,真的有40多個嗎?創業
- 普通人懂點資料分析,可以有多厲害?
- dcat 有沒有辦法可以在一行header裡放置多個cardHeader
- 有哪些免費的方法可以將PDF轉換成Word?
- [轉載] .NET 中可以有類似 JVM 的幻像引用嗎?JVM
- 這個可以有!讓筆記本一秒變多屏筆記
- IPTV系統一個後臺可以有多個apk介面嗎?APK
- linux裡source、sh、bash、./有什麼區別(轉)Linux
- 【Java小疑問】java原始檔當中可以有多個類,但是為什麼只能有一個public類呢?Java
- 請問有沒有可以測試微信小程式 / 支付寶小程式的頁面渲染時間的工具?微信小程式
- 有了 Lutris,Linux 現在也可以啟動 Epic 遊戲商城Linux遊戲
- 簡訊跳轉微信小程式有哪些好處?微信小程式
- SAP MM 計量單位EA的數量可以有小數點
- 微信轉賬24小時到賬可以申請退款嗎?微信轉賬退回的方法
- 凌晨4小時,三個“黑客”瘋狂盜轉30多萬黑客
- Linux運維有多難學?學完能做什麼工作?Linux運維
- 小程式對實體行業轉型有何影響?行業
- Jtti:常用的Linux系統安全小妙招分別有哪些JttiLinux
- 40歲還可以轉行做Linux運維嗎?學習難度大嗎?Linux運維
- EasyDL有多easy?一部小動畫片就能說清動畫
- 距離 Java 開發者玩轉 Serverless,到底還有多遠?JavaServer
- 自學linux可以成功嗎Linux
- 微信小程式有旋轉動畫效果的音樂元件微信小程式動畫元件
- “Linux” 小程式釋出 Web 版,現在你可以在 PC 上快速查詢命令啦!LinuxWeb
- Linux透過什麼命令可以檢視有多少個使用者登入?Linux
- 教小師妹學多執行緒,一個有深度的例子!執行緒
- 【Django】有關多使用者管理的一點小經驗分享Django
- 小技巧:如何使用預覽將多個影像轉換為單個PDF
- mp-vue微信小程式多層路由跳轉問題覆盤Vue微信小程式路由