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 /usr/src/smalllinux/lib/lib.a

            20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a

            1865 18879 731233 total

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!