免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4334 | 回复: 13
打印 上一主题 下一主题

用busybox裁减 linux(原创),欢迎指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-01 09:46 |只看该作者 |倒序浏览
busybox 制作tiny linux


我省去了制作启动盘的过程,这个网上可以大把大把的抓!

更多...
我通过在硬盘上安装linux得到linux的分区:
/dev/hda1 /boot
/dev/hda2 /
/dev/hda3 swap

好了,现在开始用busybox来制作了。。。
实际操作过程相当简单:

下载好busybox的源文件,大家最好到busybox的官方网站上面去下,这样还可以看到很多文档 :)
我下载的是busybox-1.00-rc3版本,也是它的最新版

tar zxvf busybox-1.00-rc3.tar.gz

cd busybox-1.00-rc3

make menuconfig
(这个过程类似编译linux内核,如果你还不会编译内核的话,那先看看我的blog里面的另一篇文档好了)

做好自己的选项后,
make dep
make
make install
默认情况下,busybox会在当前目录下生成一个_INSTALL的目录,编译后生成的文件都在这个目录下,一会儿我们也要用这个目录下的文件来制作我们的tiny linux
我们先看一看这个目录下的结构:
/usr
/etc
/....
因为我是在编译好后才写这篇文档的,所以目录列不全了,反正这个也不重要,大家在尝试中自己观察吧

然后就是替换工作了,关于busybox的工作原理大家可以参考busybox的资料,网上一大把一大把的抓!!

主要的操作目录有 etc usr bin sbin
将这几个目录用刚才编译过的目录替换,然后将原etc目录下的 passwd passwd- shadow shadow-  几个文件放到busybox的目录下(你得登陆吧,哈哈,登陆就得用这几个文件了)
其实这个时候系统的大小就已经不到200M了,
下面是进一步的裁减工作,这个工作主要集中在lib目录下
lib目录的结构:
根目录下是一些常用的so库
modules 是linux的模块
modules 目录里面还有 EL 结尾的文件夹目录,如果你是多cpu的话,有一个smp结尾的目录,如果你已经编译了内核的话,还有一个ELcustom结尾的目录
决定你用那个内核,如你用smp的话,那就删掉其他的两个,如果你用自己编译的内核的话,那就删掉另外的两个,同样的道理

其他在lib目录下的so文件大家自己决定吧,不过有这样一个问题,如果你裁减完登陆时出现“Login incorrect:User 'unknown' failed on 'tty2'”提示的话,很可能就是你这里面的库删错了,补回来吧。。

裁减过程,除了删除文件外,我觉得还有一个问题,就是完善功能,实现linux的常用功能:如网络,文件系统的rw属性等

这个也是我在裁减过程中遇到的问题,
1,恢复网络功能
网络功能需要这样几个必要的条件:
1)内核支持inet4
2)有网卡驱动
好了,假设上面的都成立,我们开始给这个tinylinux设定网络:
我的网卡是8139的所以,我需要的网卡驱动在/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
当然,pci的网卡还需要这个东东:/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o(为什么要这个我也说不清楚,反正要一定要有,freebsd在编译内核的时候,也是一定要加上mii这个东西的,编译过bsd内核的朋友一定有印象)
ok,还有一个so是要加上的,那就是/lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o,这个东东,是什么作用,高手来解答吧,我也不清楚,或者大家去google搜索一下好了

总结一下加入网络的步骤:
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
看到什么了吗?
你的网卡已经起来了。。。不过这样还不可以
在/etc/modules.conf文件中要增加这样的一句:alias eth0 8139too (为啥呢?我也不懂,向大家请教,)
现在应该可以了,控制台里面输入:ifconfig eth0 inet 192.168.0.2 netmask 255.255.255.0
结果呢?应该就是大家期望的了。。
还可以添加路由的:
/sbin/route add default gw 192.168.0.1
不管别的了,先ping一下网关再说:
#ping 192.168.0.1
.........................
登陆到192。168。0。1上面去:
192。168。0。1#ping 192.168.0.2
。。。。。。。。。。。。。
网络功能基本上没有问题了,我试过ping 202.102.88.*这个外网ip的。

2。文件系统的读写功能。
busybox的启动过程跟linux是不一样的,它在内核启动后,运行/etc/init.d/rcS这个脚本的,而且只有这一个启动脚本,所以,如果有什么在启动时候运行或初始化的程序,只能写在这个脚本里了。
在我的观察来看,linux启动过程中,与文件系统(我指的是mount或umount这样的操作)相关的操作是有这样的步骤的:第一个步骤是内核以ro(read-only,只读)的形式来mount / ,这个在grub。conf(grub的配置文件,在/boot/grub/目录下)有这样的描述:”kernel /boot/powerbit.vmlinux ro root=/dev/hdb1“ ,看到那个“ro”了吗?
第二个步骤是系统在fsck(磁盘扫描,检查文件系统上一次关机时是否正常umount),然后进行“umount -a”
第三个步骤是这样的,在检查完文件系统没有问题后,运行"mount -t ext3 remount rw /" 这样的语句, 注意到“rw”了吗?就是这个标志,决定我们的tiny linux的文件系统是否能够写入的,或许你这样考虑,我直接在grub.conf里面把“ro”改成“rw”不可以吗?自己试试就知道了:)
3。login
关于login我不想多说了,关键在于/lib里面的库文件,不可多删,当然,为了系统尽可能的小,也一定不要少删啊。。
多用户登陆的话,需要更改/etc/inittab,详细的参考busybox的文档吧

最后总结一下rcS这个文件吧:
rcS:

/bin/fsck ????(参数自己找找吧,不懂的话看看rc.sysinit)
/sbin/umount -a
/sbin/mount -a
/sbin/mount -t ext3 remount rw /
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o
/sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
/sbin/ifconfig eth0 192.168.0.253 netmask 255.255.255.0
/sbin/route default gw 192.168.0.1

参考资料:
http://www.linuxjournal.com/article.php?sid=4335
http://www.linuxjournal.com/article.php?sid=4395
http://www.linuxjournal.com/article.php?sid=4528

论坛徽章:
0
2 [报告]
发表于 2004-10-14 16:42 |只看该作者

用busybox裁减 linux(原创),欢迎指教

我最近也在试着裁减LINUX内核让使其成为嵌入式LINUX,能否和你交流一下!
    我的QQ是:45517999
     邮箱: zhuyajun@donetech.com.cn

论坛徽章:
0
3 [报告]
发表于 2004-10-15 02:08 |只看该作者

用busybox裁减 linux(原创),欢迎指教

嵌入式我不懂的,只是因为busybox这个工具设计精巧,如果想满足linux在上面运行的话,大概也就10多M就可以了,其中包括rpm/net/及其他的各种常用的linux的工具。。至于在上面开发,没有经验,不敢乱说。。。

烦请高手续^^^^我的QQ是10237783。。
mail:chunshengsterATgmail.com(请把AT换成@)

论坛徽章:
0
4 [报告]
发表于 2004-10-15 08:24 |只看该作者

用busybox裁减 linux(原创),欢迎指教

感谢楼主,您的贴子非常好
我这里再贴一个编译内核的技巧

1. Code maturity level options
??代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。

2. Loadable module support
??对模块的支持。这里面有三项:

??Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
??Set version information on all module symbols:可以不选它。
??Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。

3. Processor type and features
??CPU类型。内容蛮多的,不一一介绍了,有关的几个如下:

??Processor family:根据你自己的情况选择CPU类型。
??High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
??Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。
??MTTR support:MTTR支持。可不选。
??Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。

4. General setup
??这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:

??Networking support:网络支持。必须,没有网卡也建议你选上。
??PCI support:PCI支持。如果使用了PCI的卡,当然必选。
??PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
??Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。
??PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。
??System V IPC
??BSD Process Accounting
??Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。
??Power Management support:电源管理支持。
??Advanced Power Management BIOS support:高级电源管理BIOD支持。

5. Memory Technology Device(MTD)
??MTD设备支持。可不选。

6. Parallel port support
??串口支持。如果不打算使用串口,就别选了。

7. Plug and Play configuration
??即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。
8. Block devices
??块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:

??Normal PC floppy disk support:普通PC软盘支持。这个应该必选。
??XT hard disk support:
??Compaq SMART2 support:
??Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
??Loopback device support:
??Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。
??Logical volume manager(LVM)support:逻辑卷管理支持。
??Multiple devices driver support:多设备驱动支持。
??RAM disk support:RAM盘支持。

9. Networking options
??网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。

10. Telephony Support
??电话支持。这个是什么东东?让我查查帮助,原来是Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。

11. ATA/IDE/MFM/RLL support
??这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。

12. SCSI support
??SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。

13. IEEE 1394(FireWire)support
??这个是什么?低版本的没有见过,看看帮助再说。原来是要Fireware硬件来提高串行总线的性能,我没有,不选了。

14. I2O device support
??这个也不清楚,帮助里说是这个需要I2O接口适配器才能支持的,在智能Input/Output(I2O)体系接口中使用,又是要硬件,不选了。

15. Network device support
??网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。

16. Amateur Radio support
??又一个不懂的,应该是配置业余无线广播的吧,没有,不要了。

17. IrDA(infrared)support
??这个要红外支持,免了。

18. ISDN subsystem
??如果你使用ISDN上网,这个就必不可少了。自己看着办好了。

19. Old CD-ROM drivers(not SCSI、not IDE)
??做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,反正我是用的IDE的CD-ROM,不选这个。

20. Character devices
??字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:

??I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
??Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。
??Joysticks:手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。
??Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
??Video For Linux:支持有关的音频/视频卡。
??Ftape, the floppy tape device driver:
??PCMCIA character device support:

21. File systems
??文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项:

??Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
??DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。
??ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
??NTFS file system support:ntfs是NT使用的文件格式。
??/proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。

??还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
22. Console drivers
??控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。

23. Sound
??声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。

24. USB supprot
??USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。

25. Kernel hacking
??配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。

论坛徽章:
0
5 [报告]
发表于 2004-10-15 09:19 |只看该作者

用busybox裁减 linux(原创),欢迎指教

对了,你还是把“我省去了制作启动盘的过程,这个网上可以大把大把的抓!”也加上的好,这样更有利于其他人的学习

我也没做过,我也不知道该抓什么,你抓来贴上就好了

论坛徽章:
0
6 [报告]
发表于 2004-10-15 09:28 |只看该作者

用busybox裁减 linux(原创),欢迎指教

好啊,非常感谢楼主,正好想做一下裁减LINUX呢,哈哈,有参考了,谢谢!

论坛徽章:
0
7 [报告]
发表于 2004-10-15 09:40 |只看该作者

用busybox裁减 linux(原创),欢迎指教

各位同仁好,我目前在将linux安装在64M 的CF卡上,请问只要通过基本的配置后就可以直接将linux放在CF卡上运行吗,我的系统是PC104,486的机器

论坛徽章:
0
8 [报告]
发表于 2004-10-15 14:54 |只看该作者

用busybox裁减 linux(原创),欢迎指教

原帖由 "平凡的香草" 发表:

我省去了制作启动盘的过程,这个网上可以大把大把的抓!
然后就是替换工作了,关于busybox的工作原理大家可以参考busybox的资料,网上一大把一大把的抓!!

老大!您省了这“两大把”之后我就晕菜了!
第一,我用mkbootdisk制作了启动盘,这是您说的“第一大把”吗?
第二,您说的“第二大把”的替换指的是什么?这里有点不明白,网上确实很多,但不知道抓哪些……

如果老大把文档完善一下,把那“两大把”也加进去就太好了,我们这些菜鸟们就也能学会了!

论坛徽章:
0
9 [报告]
发表于 2004-10-19 10:29 |只看该作者

用busybox裁减 linux(原创),欢迎指教

续:
谢谢各位的批评,马上补上原来的内容..

制作启动盘的过成实际上是在一个空空的硬盘或软盘上加上启动信息的过程,针对linux或unix来讲,也就是增加lilo启动信息的过程,从而使得我们转移到本硬盘的内核能够启动,进一步能够执行linux其他的一些必要的系统初始程序...

论坛徽章:
0
10 [报告]
发表于 2004-10-19 10:59 |只看该作者

用busybox裁减 linux(原创),欢迎指教

启动盘的制作过程可以搜索关键字:"制作软盘linux" 或"tiny linux"

或这个url: (http://www.google.com/search?hl=zh-CN&q=%E5%88%B6%E4%BD%9C%E8%BD%AF%E7%9B%98%E5%90%AF%E5%8A%A8%E7%9A%84linux&lr= )

如果你裁减的linux是在硬盘上的话,可以这样:
1,准备两块硬盘A B,分别安装好linux.
2,讲其中A上linux重新编译内核,尽量做到最小且满足您的需要,并设置好lilo或grub,保证编译好的内核能够启动起来.
3,在机器上挂载硬盘B且是B成为主硬盘,保证启动时候启动B上的linux系统,再将A挂在机器上,保证A是B的从盘.
4,启动linux,进入B硬盘上的系统
5,在B硬盘上编译好busybox.(如1楼贴中所述)
6,删除硬盘A中的/bin /sbin 和/lib目录中的一些其他的少用的库文件(这个需要大家自己尝试,我没有做具体的记录)用硬盘B上编译好的busybox中的/usr /bin /sbin /etc拷贝到A盘的相应分区上面..
7,去掉B盘,使A盘做主盘(保证A是主盘的同时,还要保证类似grub中"/dev/da0 /dev/da1"这样的参数正确,如果启动时后找不到内核,问题一般出在这里,一个比较稳妥的方法是两块硬盘完全相同,且保证A B分别做主盘时硬盘跳线都一样,接到主板的数据线都一样)..
8,如果此时A盘不能启动,请大家联系我....
9,如果A盘能够启动,从新用B做主盘,A做从盘,参照主贴中的描述完善A盘中的文件,主要是不需要的函数库的清理和网络功能,及文件系统功能的完善...
10,完善好以后,可以将A盘做成ghost,然后直接ghost到软盘/CF盘/其他硬盘上...
11,登陆功能的完善,这个很讨厌(个人觉得),大家删除/lib下面的库的时候一定要小心,如一下加密的库,如pam的库,libc的库等...(有兴趣可以查看linux登陆过程的相关介绍,我看过,但是早就忘了)
注:在我确定这个思路以后,裁减时间一共用了1天的时间(此前用其他方案做了一个星期没有完成),大约50次拆/装硬盘...希望大家在制作的过程中不要怕麻烦..

其他任何问题可以到我的blog(http://blog.muduo.net)或在此贴留言..

谢谢大家的讨论,让我重新回顾了很多以前做过的工作..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP