📄 新建 文本文档 (5).txt
字号:
云上的老鼠
云上的日子
DonewsBlog | Donews首页 | Donews社区 | Donews邮箱 | 我的首页 | 联系作者 | 聚合 | 登录 61篇文章 :: 0篇收藏:: 37篇评论:: 0个Trackbacks
公告
这是quickmouse的blog哟
^______^
文章的转载请保留全文以及注明出处,谢谢合作!
文章
Linux的小技巧(RSS)
讲台之上(RSS)
经典收藏(RSS)
面包板上的时光(RSS)
随笔(RSS)
云上的日子(RSS)
收藏
相册
采风
我的宝宝们
常用链接
白云黄鹤BBS(term)
白云黄鹤BBS(web)
我的联系方式
Email Me
友情推荐
aw's blog
主人推荐
tcpdump/libpcap过滤规则解析的bug
如何在Linux当中判断USB控制器的类型
寄语Dian团队的队员
裁减Linux(老文一篇)
存档
2006年07月(1)
2006年06月(3)
2006年05月(1)
2006年04月(7)
2006年03月(8)
2006年02月(4)
2005年12月(2)
2005年11月(4)
2005年10月(2)
2005年07月(2)
2005年06月(4)
2005年05月(5)
2005年04月(3)
2005年03月(6)
2004年11月(3)
2004年10月(6)
最近评论
aw:钟老师,啥时候搞出了我们国家自己的芯片就好了!
quickmouse:发现前面的评论讲错了,现在用得多的是25系列的,包括25T,25K,25G等,22和23系列的就是比较老的了。不过25K现在限速142km/h,25T才可以到160。另外,25T现在一般是独立编组,不带发电车和行李车,因为车钩问题还真的是限制了编组的灵活性
tmsonhust:很受启发
学习上
心态上
获益不少。。。。
Awflasher:good
ta:我从来不喜欢看这种教人性质的文章,不过觉得老师这篇文章真的写到点上了.可能是和我们的将来联系比较紧吧,所以通篇看完后觉得真的很不错,赞一个
裁减Linux(老文一篇)
这是自己在2003年初发表与华中白云黄鹤BBS Linux讨论区的一篇文章了,摘录于此,权做一个纪念,顺便更正当中的一些错误。不过文中的一些内容现在看来是有冗余的了,配置文件的理解也不如现在透彻,以后在撰文详述吧,搞一个patch?呵呵
发信站: 武汉白云黄鹤站 (2003年01月14日15:36:07 星期二), 站内信件
小弟近日对Linux进行了小小的裁减,偶有心得,愿大家共享
说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统)。以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑。
作为自己手中课题的一个铺垫,不久前我尝试了对Linux进行裁减,虽然没有达到预期的一张软盘大小,但结果也相当有吸引力。下面我对此一一做说明。
参考文档:
Linux bootdisk-HOWTO:
http://www.linux.org.tw/CLDP/gb/Bootdisk-HOWTO.html
initrd introduce on Linux system:
/usr/src/linux-2.4/Documentation/initrd.txt
裁减Linux一般有两种办法,其一是重新生成kernel和文件系统,其二是在原有的系统上删除不必要的文件缩小“体积”
对从一个完整的RedHat 7.3版本而言,其最小安装也有300M,因此,第二个方法是不太现实的。于是重构文件系统和kernel成为了必然。
裁减目标:构成一最小Linux系统担负实验室网关工作,系统载体为硬盘,运行使用RAMDISK,从而减小意外断电造成的文件系统修整消耗提高系统可靠性。
目标平台:P2-400,8G/64M,8139LAN adapt x 2
首先裁减kernel,既然是最小系统,则kernel里所有必须的部件都将直接编译进入内核。但是内核对module的支持需要保留。
如何编译内核,不再累述,具体说说哪些选项先:
Code maturity level options ---> 不选
Loadable module support ---> 当中的Set version....的可以不要,其他两个留着
Processor type and features ---> 按照目标系统选择对应的Process Family ,其他的嘛,留下Machine Check Exception、Low Latency....、HIGHMEM Support,其余都可以不要
General setup --->当中,PCI的选上,其他的不要(注意对照你的系统),SYSTEM V IPC、BSD Process accounting、sysctl support留下,Kernel support ELF binary留着,其他的可以不要
Binary emulation of other systems --->
Memory Technology Devices (MTD) --->
Parallel port support --->
以上三项都是可以不要的
Plug and Play configuration ---> 选上,不过如果没有ISA设备,可以不选对ISA P&P的支持(比如我的目标系统)
Block devices --->各取所需了,一般来说,如果你要用软盘,就选上Normal floppy disk support,大多数嵌入式系统是不要的。中间几个也是没有的;Loopback device是一定要的,Network block device我也没把握,可能可以不要不过我选了,呵呵,RAM Disk一定要,Initrd RAM Disk support当然要选。至于Default Ramdisk size就无所谓了,反正可以在启动的时候修改,呵呵。
Multi-device support (RAID and LVM) ---> 这个一般也用不上,不选了。
Networking options --->既然是打算做网关,呵呵,里面大部分东西都要选上而且是[*],编译入内核(前面已经说过了,没有编译为模块的)。从上到下一直选到IP: Virtual Server Configuration --->(从这个开始(含),可以不要了)。
需要说明的是,其中的IP: Netfilter Configuration --->子项即便选择全部编译到内核,似乎并没有什么变化,用iptables的时候一样要iptables的.so支持 :( 不过对irc和ftp的跟踪倒是不需要insmod了
Telephony Support --->
SCSI support --->
Fusion MPT device support --->
I2O device support --->
Amateur Radio support --->
IrDA (infrared) support --->
ISDN subsystem --->
Old CD-ROM drivers (not SCSI, not IDE) --->
上面几个都不用,为什么RedHat那么大,他们有不小的功劳哟~~~
Network device support --->里面找出你目标系统的网卡(我这里是8139)选上,其他的统统去掉吧。
Input core support --->如果你不是用的USB接口鼠标键盘,可以不用选他们。
Character devices --->这里面我只选了Virtual Terminal以及Support for console on virtual terminal,其他好多东西都没有选。
Multimedia devices --->
Crypto Hardware support --->
这两个对一般的最小系统来说都是不用的
File systems --->这个是内核大小的大头,ext2(Second extended...)是必要的,ext3也用上吧,/proc有必要,DOS FAT/VFAT(win-95)估计你可能也需要,分区表只要支持PC BIOS就可以了,Native Language我把iso8859-1给内置了
console drivers->我只选了VGA text console
Sound --->
USB support --->
Additional device driver support --->
Kernel hacking --->
这几个都没有选,make dep;make clean;make bzImage
看看吧,内核大概是700~800k左右
以前我总以为裁减kernel就是裁减Linux了,后来才发现是大错特错。
以前总以为最难的是裁减kernel,后来才发现自己多么无知。学习裁减内核,大概只用了一两天,编译一次内核也就20分钟不到,可是后来居然重建文件系统花了一两个星期,呜呜~~~
关于文件系统和kernel的关系,从参考文档里面可以知道,大家自己去看。如果连这个都不懂,建议暂时不要做裁减的事情,以为照着我的文章依葫芦画瓢多半是不能成功的。
首先按照ramdisk的生成方法或者loopback device的生成方法生成一个8M的磁盘挂接到/mnt(或者其他目录)上,就可以以/mnt为根目录构造文件系统。注意将其按照ext2方式格式化
lrwxrwxrwx 1 root root 4 Dec 28 09:31 bin -> sbin
drwxr-xr-x 5 root root 1024 Dec 27 13:42 dev
drwxr-xr-x 7 root root 1024 Jan 6 15:14 etc
drwxr-xr-x 2 root root 1024 Dec 12 08:33 initrd
drwxr-xr-x 4 root root 1024 Dec 30 06:52 lib
drwxr-xr-x 2 root root 1024 Dec 11 07:52 mnt
dr-xr-xr-x 24 root root 0 Jan 6 15:14 proc
drwxr-xr-x 2 root root 1024 Dec 26 03:03 root
drwxr-xr-x 2 root root 1024 Dec 30 07:28 sbin
drwxr-xr-x 2 root root 1024 Dec 26 03:04 sysroot
drwxr-xr-x 2 root root 1024 Apr 19 2002 tmp
drwxr-xr-x 3 root root 1024 Dec 12 07:45 usr
drwxr-xr-x 5 root root 1024 Dec 12 02:43 var
这几个目录是必须的
先看看bin下面有什么
lrwxrwxrwx 1 root root 6 Dec 30 07:28 ash -> ./bash
-rwxr-xr-x 1 root root 541096 Dec 30 07:27 bash
-rwxr-xr-x 1 root root 16020 Dec 13 08:56 cat
-rwxr-xr-x 1 root root 16680 Dec 27 15:40 chmod
-rwxr-xr-x 1 root root 36360 Dec 28 09:10 cp
-rwxr-xr-x 1 root root 62756 Dec 28 09:25 ftp
-rwxr-xr-x 1 root root 100624 Dec 28 09:14 grep
-rwxr-xr-x 1 root root 8672 Dec 26 03:27 halt
-rwxr-xr-x 1 root root 9624 Dec 28 09:14 hostname
-rwxr-xr-x 1 root root 54316 Dec 28 09:14 ifconfig
-rwxr-xr-x 1 root root 26920 Dec 12 02:42 init
-rwxr-xr-x 1 root root 105768 Dec 27 13:44 ip
-rwxr-xr-x 1 root root 60764 Dec 28 09:15 iptables
-rwxr-xr-x 1 root root 7764 Dec 26 17:26 kill
-rwxr-xr-x 1 root root 19080 Dec 12 02:25 login
-rwxr-xr-x 1 root root 9172 Dec 11 07:54 losetup
-rwxr-xr-x 1 root root 46888 Dec 13 08:55 ls
-rwxr-xr-x 1 root root 10316 Dec 13 08:37 mingetty
-rwxr-xr-x 1 root root 17992 Dec 27 14:15 mkdir
-rwsr-xr-x 1 root root 60104 Dec 11 07:54 mount
-rwxr-xr-x 1 root root 43496 Dec 28 10:02 mv
-rwxr-xr-x 1 root root 22196 Dec 26 02:09 nash
-rwxr-xr-x 1 root root 29464 Dec 28 09:49 ping
-r-xr-xr-x 1 root root 63304 Dec 26 16:57 ps
lrwxrwxrwx 1 root root 4 Dec 26 03:33 reboot -> halt
-rwxr-xr-x 1 root root 26216 Dec 26 17:35 rm
lrwxrwxrwx 1 root root 6 Dec 30 07:28 sh -> ./bash
-rwxr-xr-x 1 root root 14952 Dec 11 09:44 shutdown
-rwxr-xr-x 1 root root 219932 Dec 28 10:06 ssh
-rwxr-xr-x 1 root root 260616 Dec 27 14:04 sshd
lrwxrwxrwx 1 root root 6 Dec 26 16:48 swapoff -> swapon
-rwxr-xr-x 1 root root 7108 Apr 1 2002 swapon
-rwxr-xr-x 1 root root 27208 Dec 27 14:13 syslogd
-rwxr-xr-x 1 root root 78808 Dec 28 09:30 telnet
-rwsr-xr-x 1 root root 30664 Dec 27 14:23 umount
-rwxr-xr-x 1 root root 7832 Dec 12 01:54 update
-rwxr-xr-x 1 root root 386120 Dec 28 09:13 vi
-rwxr-xr-x 1 root root 13896 Dec 30 06:53 who
这里面包含了ftp、telnet、ssh客户端以及sshd服务器常用的命令和网络设置命令,iptables防火墙,vi编辑器,shell用的是bash,虽然ash很小但是总是不习惯没有auto complete功能,tcsh不大不小功能又全,可是对一些shell脚本的支持不太好。nash用来解析linuxrc,后面会讲到(如果你看了最前面提到的initrd.txt)也会明白。
接着,用ldd命令看bin目录下面的各个可执行文件分别都和哪些动态库连接把他们cp到/mnt/lib目录下,如用ldd看mv命令,结果如下
libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
把/lib/i686/libc.so.6和/lib/ld-linux.so.2复制到/mnt/lib下面即可。
libc.so.6是基本的libc库,好像不同的处理器还不一样,我就在一台P-MMX下面用P2的libc,结果死掉了。查了半天 :(
iptables命令除了其显示的以外,还要把/lib/iptables目录复制到/mnt/lib下面
/lib/security下面是PAM需要的库,最小系统只需要复制/lib/security下面的pam_unix.so、pam_stack.so到/mnt/lib/security下面即可
/etc下面的东西最是麻烦,要改的不是一点点
/etc/inittab init的配置文件,我改的是这样的:
id:3:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/mingetty tty1
2:23:respawn:/sbin/mingetty tty2
l0:0:wait:/etc/rc0
l6:6:wait:/etc/rc6
呵呵,简单吧
/etc/fstab记录系统启动应该mount的文件系统,因为系统在ramdisk上面跑,所以是这样的:
/dev/ram0 / ext2 defaults 1 0
none /proc proc defaults 0 0
从inittab里面知道,启动后执行脚本/etc/rc我是这样写的:
#!/bin/sh
/bin/mount -n -t proc /proc /proc
/bin/mount -n -o remount,rw /
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -