做一个最小的Linux kernel

2016-01-29 19:26 7 1 收藏

做一个最小的Linux kernel,做一个最小的Linux kernel

【 tulaoshi.com - Linux 】

  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 这个核心做出来的。
# 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 



结果如下 : 


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&

来源:http://www.tulaoshi.com/n/20160129/1509393.html

延伸阅读
这个是模仿六月海的PS教程,用FW作的。(本FW教程系原创,转载请注明出处,谢谢!) 1,新建文件,白色画板,做一个矩形,用#EEF8E0填充。如图 2.为矩形填加滤镜效果 Eye Candy 4000--Jiggle 如图 3.为矩形添加内发光效果,参数如图 4.为矩形添加投影效果,如图 5.画几个矩形用#C1A880填充,然后用“更改形状区域”工具随意修...
一个男人最重要的应该是坚强 那些失败过一次就怨天尤人,萎靡不振、跌倒了爬不起来的男人坚决不能要。男人要能给女人安全感,如果你找一个老公,不能够照顾你,还要经常在你面前哭诉自己的不幸,让你也承担他实际上是可以挽救的痛苦,是非常的失败的。 忠诚 这点就不用多说了,相信所有的女人都不愿意自己的老公红杏出墙。 ...
标签: 孕前
做一个孕期中的好丈夫 母亲的紧张、愤怒、震惊、悲痛等负性情绪会伤害胎儿。孕期不仅需要一个良好的生活处所,还要有一付恬淡而充实的心境,而这些都离不开来自丈夫和家人的悉心关怀 今天,我和大伟因为一件小事吵了一架。事情虽然不大,是我不小心,在收拾房间时将我们结婚时朋友送的一只花瓶摔碎了。大伟埋怨了我几句,我就和他吵了起来。...
标签: 美容 美容方法
男士护肤 做个清爽男人 起床后,先去洗一个温水浴,让身体和你的脸都有一个清爽的开始。在清洁脸部时,可考虑使用适合混合性皮肤的产品来平衡油脂分泌,这类产品在洗后会觉得很清爽,而两颊也不会过于干燥。如果有面部磨砂膏或去角质类的洁肤品,大约每星期使用一次即可,千万别过度使用,以免刺激皮脂腺分泌更多的油脂。 使用专业的...
怎么做一个成熟的女人 生命是一段旅程,人生是一场修行。一路走来,渐渐发现,那些真正心智成熟,人格健全的人往往最容易获得世俗的成功,亦或是更能早日达成心中的理想愿景。老话说得好:先学做人,再学做事。一个真正成熟的人,应当具备哪些美好的内在品质?简单来说就是:知识而不世故,不被柴米油盐和瓶瓶罐罐所牵绊,懂得取悦...

经验教程

377

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部