要来裁减Linux,首先要明白两个问题:
1、Linux是如何启动的?
2、Linux由是如何组成的?(如果不知其组成,何来裁减)
这篇文章,并不打算重复别人的话,只是谈一些个人的经验总结:
1、需要一个引导程序,也叫bootloader,一般有lilo,grub等,嵌入式系统上常用有uboot,redboot等;
2、需要一个内核,也就是常说的Linux,它只是一个程序;
3、初始化程序init,当内核把自己初始化完成,会来调用这个初始程序init,它会按照人为的配置去启动一大堆的脚本;
在裁减之前,可以先在硬盘上装一个lilo,然后编译一个内核(直接默认编译就是,没有必要先就去裁减),放上去,试试新的lilo能不能引导自己的内核,如果能够,应该可以看到一大堆的初始化信息,最后内核会报怨,"报不到init",当然了,因为还没有呢!!!
当然要完成这一步工作,基础知识要求:
1、了解lilo(或者是grub),你得学会在一个硬盘上分区,格式化,然后把引导程序安装上来;
2、了解内核的编译,事实上,这个是最简单的工作了。
完成了这两步,就可以认真地去研究一下内核的裁减和编译了,多失败几次,就熟练了!!
一般地认为,一套完整的Linux,不仅仅是内核本身,它还包含了一套根文件系统,也就是/目录下/root,/etc/,/lib……,虽然你可以随意地新建文件夹,DIY自己的根文件系统,由于历史的沉淀,最好还是遵守它的标准。
根文件夹中有什么东东?
当然在一个发行版上运行ls命令,就足以回答这个命令了,不过总的来讲,大体有六类东东:
1、应用程序,系统的,网络的……
2、应用程序所需要的配置文件;
3、应用程序所需要的动态库,*.so;
4、系统的启动/管理脚本;
5、日志文件;
6、临时文件;
后面两个并不需要自己手工来做。
首先就是应用程序,包括前面所说的init程序,还有其它所有你想要的程序,都可在放进去,每种程序,放在哪个目录,/bin?/sbin?/usr/bin?/usr/sbin?……令人困惑的相似性,读标准是痛苦的,所以,在理解它之前,一个简单的方法是参照发行版的作法。Redhat放在哪儿,我就跟着放在哪儿……
这一步要做的工作,就比较多了,需要把需要的程序,一个个地找到源代码,一个个地编译好,然后安装到自己新建的根文件系统的对应目录当中。
当然,如果都是X86平台,事实上,一个懒办法是把发行版中现成的程序直接拷贝到我自己的文件夹中对应的目录。
有很多常用的程序,它们比较占空间,所以,常常使用busybox代替。
程序要正常运行,还有一个麻烦事是它们一般需要动态库,*.so,一般在/lib或/usr/lib中,程序运行时需要调用它们,对于初次裁减,可以参考别人做好的系统,看看别人这些文件夹下有哪些库,自己也拷这些……ldd命令可以帮助你进一步了解你自己的程序,还需要哪些库文件。Copy
it!
当然,根文件系统中,程序并不是全部,我们说过了,需要启动脚本,另外,程序要运行,可能还需要一些相应的配置文件,习惯了Win32的图形配置的人,对程序的配置文件深恶痛绝,不过没有办法,还是得自己建立它们,一般来说,这些配置文件,在应用程序的源码目录中,都有样本参考,一个简单的办法,就是直接拷贝发行版的。
启动脚本稍微麻烦一点,从理论上来讲,把某个发行版的启动脚本全部拷贝来让自己用也是可行的,但是如果你真的这样做,会发行,它中间涉及到很多东西,最后会把自己的系统搞得很复杂——而我只是想要个简单的Linux。
所以,我的建议是,通读某个发行版的启动脚本,然后自己写一套,这是比较有意思的工作,事实上,我也这样做了,不过我相信会有很多的bug的,网上有很多制作现成的mini
linux,可以直接把它们的脚本拷贝过来……
综上所述:
1、学会在新的存储界质(如硬盘,或者是软盘,优盘,CF卡,光盘我没有试过,一直想试一下)上,分区,格式化,安装 bootloader,并配置它;
2、学会编译一个内核,并到格式化好的存储界质上;
3、建立一套自己的根文件系统,把自己需要的程序全部编译(或者是直接拷贝别个编译好的)/安装至自己对应的文件夹中;
4、为一些必要的程序,建立配置文件;
5、把程序运行时需要的动态库拷贝至相应文件夹,常用的库,可以参考别人做好的,不常用的,用ldd看看你的程序先;
6、为整个系统编译(或者是拷贝别人的)一套启动/管理脚本;
就这些工作了……
嵌入式系统要稍微麻烦一点,这是因为:
1、内核的裁减上,要求精而稳定,必须得对自己的需求,有一个全面的认识;
2、编译程序的工作,不能再使用X86的了,必须得为某一个平台编译专门的编译工具和库;
3、每一个程序,需要自己交叉编译;——也就是用自己第2步做的专门平台的编译器,重新编译应用程序;
linux裁减
最新推荐文章于 2022-01-18 21:29:45 发布