欢迎来到天天文库
浏览记录
ID:26330220
大小:59.00 KB
页数:9页
时间:2018-11-26
《lfs构造原理的分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、LFS构造原理的分析摘要:随着Linux用户的增加,越来越多的人愿意自己定制自己的操作系统,LFS就是一种流行的从源代码构建Linux的一种方法。本文分析该方法的构建原理,重点分析了Binutils、Gcc和Glibc在构建过程种编译多次的原因。关键词:定制LFSBinutilsGccGlibc一、引言Linux是和Unix很相似的一种操作系统,具有Unix的全部特征,并和POSIX兼容。它是一个真正的多用户多任务操作系统,是一个优秀的应用软件开发平台。Linux最大的特点是它是自由的,这种自由有双重含义。一方面,Linux的自由的意义
2、是它是免费的,不必花费成本就可以得到它。Linux自由还有另一个重要的体现,那就是Linux可以提供无限宽广的技术发挥的自由空间。在购买到Linux之后得到的不仅仅是一个操作系统,还得到了系统的源代码。这样如果不喜欢Linux的工作方式,就可以改变它(不仅仅是做微小的改动,你甚至可以安装你的需求去改动整个操作系统)。只要按照通用公共许可证(GeneralPublicLicense)的要求,即可以无偿地自由采用,改进,发展。这也正是Linux发展如此迅速的一个原因。开放源代码,也使越来越多的人不甘于使用现成的发行版,要想对Linux完全满
3、意,必须从头构建自己的系统。本文的LFS正是构造Linux的一个方法。二、LFS及其特点LFS是LinuxFromScratch的缩写。"FromScratch"是一个词组,它的意思是"从零做起,白手起家,从无到有"的意思,因此"LinuxFromScratch"本质上不应当理解为一个Linux发行版名称。它最贴切的含义应当是一种"方法/思想":一切从源代码开始的方法/思想。如果把LFS比作建筑房子,那么LFS提供房子的框架蓝图,但是需要你自己建造它。使用现有的Linux系统来开发自己定制的系统,这个"完美的"Linux系统将拥有各种发
4、行版的优点而没有它们的缺点。用户可以控制系统的所有特征,包括目录布局、脚本设置和安全设置等等。最终的系统将从源代码直接编译生成,用户可以指定在哪里安装、为什么安装以及怎样安装每一个程序。可完全按照自己的需求定制Linux系统,而且对系统有更多的控制权。三、LFS的好处LFS存在的一个重要原因是可以帮助人们学习Linux系统内部是如何工作的。构建一个LFS系统会帮助演示是什么使Linux运转,各种组件如何在一起互相依赖的工作。最好的事情是通过这种学习可以获得完全根据自己的需求定制Linux系统的能力。LFS的一个关键的好处是它让用户对于系
5、统有更多的控制,而不是依赖于他人的Linux实现。在LFS的世界里,你自己坐在司机的位置,掌控系统的每一个细节。LFS的另一个好处是可以创建一个非常小巧的Linux系统。当安装一个常规的发行版时,人们经常要被迫安装一些可能永远不会用到的程序。这些程序浪费宝贵的磁盘空间,更糟的是占用CPU资源。自己定制Linux系统的另一个好处是安全性。通过从源码编译整个系统,你能够审查任何东西,打上所有的安全补丁,而不需要等待别人编译好修补安全漏洞的二进制包。除非是你发现并制作补丁,否则你无法确保新的二进制包被正确编译并修正了问题。四、LFS的构造原理
6、要基于源代码的方式来编译整个系统,那首先要解决的就是工具链的问题,即需要一个编译环境。所以构造LFS系统分两大步:一是构造一个临时的编译环境;二是构建LFS系统。临时编译环境其实也相当于一个小的Linux系统。只不过这个系统将仅包含必要的工具,能够构建最终的LFS系统。构建这个小系统分两步进行,第一步是构建一个新的不依赖于宿主系统的工具链(编译器、汇编器、连接器、库文件以及一些有用的软件),第二个步骤是利用这个工具链去构建其它基本的工具。在工具链中最基本的是:Binutils、GCC和Glibc。Binutils是一组开发工具,包括连接
7、器,汇编器和其它用于目标文件和档案的工具。GCC软件包包含GNU编译器,其中有C和C++编译器。Glibc包含了主要的C库。这个库提供了基本的例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。其它的工具必须在他们的基础上建立。所以在下面讲解的过程主要围绕着这三个工具的安装,以及工具链的调整为主。那么如何来创建一个这样的编译环境呢?那就需要一个现成的系统,称它为宿主系统。现在总体的思路就是在宿主系统创建一个临时的环境,可以chroot到这个环境,在该环境的基础上构建一个干净、没有问题的LFS系统。为了
8、尽量的与宿主系统分开,所以要创建一个自包含、自依赖的工具链。由于这里的工具链只起临时作用,在完成LFS后可以将其剥离,所以可将编译的所有文件都放在同一个文件中($LFS/tools)。在构建过程中应注意以下
此文档下载收益归作者所有