LFS实践
用了三天,编译了两次LFS,把LFS的基本流程和原理都弄清了。用的是LFS 6.3,使用的教程是LFS速成手册(6.3) ,感觉很不错,如果按照它的做法,一步一步来,基本都能编译成功而且没什么错误。不过做LFS的目的就是学习,如果没有错误,也就起不到学期的目的的。
1.LFS会多次编译binutils,gcc和glibc,原因是令目标系统消除与宿主系统的关系,这里的宿主系统是指liveCD的系统,目标系统是指我们做LFS最终编译出来的系统。引用网上的人的说法:宿主系统就像是母体,目标系统像它的儿子,对这个母体,那是既爱又恨呀,没有她,目标无从生起,有了她,就有了她的血(glibc提供的库)和肉(那套编译工具)。所以lfs中需要多次编译binutils,gcc和glibc,以令目标系统消除与宿主系统的关系。
2.首先介绍一下binutils,gcc和glibc:Binutils 是一组开发工具,包括连接器,汇编器和其它用于目标文件和档案的工具。GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。 Glibc 包含了主要的C库。这个库提供了基本的例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。其它的工具必须在他们的基础上建立。
3.制作工具链的精髓是在.bashrc里面的PATH=/tools/bin:/bin:/usr/bin,原理是首先去/tools/bin(这是我们创建的目录)找工具,没有就去/bin,/usr/bin(这两个是宿主系统的目录),开始编译时由于/tools/bin没有工具,所以会使用宿主系统的工具,编译成功后,/tools/bin就有工具了,然后再次编译,编译就会使用之前编译的工具。从而逐渐减少,最后消除与宿主系统的关系。
4.chroot "$LFS" /tools/bin/env -i HOME=/root TERM="$TERM" PS1='\u:\w\$ ' PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash --login +h进入chroot环境 这里这是/mnt/lfs(即"$LFS")为默认的根目录。PATH设置为优先去lfs目录下的bin等目录找工具,最后才是/tools/目录,跟第3点的设置类似。
5.LFS编译的步骤以及原理:
| 步骤 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 编译的软件 |
binutils(第一遍)
|
gcc(第一遍) |
glibc(第一遍)
|
调整工具链,由/lib/ld-linux.so.2改到/tools/lib/ld-linux.so.2 |
gcc(第二遍)
|
binutils(第二遍) |
安装软件Ncurses |
|
编译的目标目录
|
/tools |
/tools
|
/tools
|
/tools
|
/tools
|
||
| 使用谁的工具 |
宿主系统
|
宿主系统
|
宿主系统
|
/tools
|
/tools
|
||
| 步骤 | 8 | 9 | 10 | 11 | 12 | 13 | |
| 编译的软件 |
进入chroot环境 |
glibc(第二遍) | 调整工具链,由/tools/lib/ld-linux.so.2改到/lib/ld-linux.so.2(这里的/lib与第一次调整时的/lib不同,因为chroot改变了根目录的位置,这里的/lib是指向目标系统的) |
binutils(第三遍) |
gcc(第三遍)
|
至此目标系统的编译工具编译完成,下面的软件都用目标系统的编译工具进行编译 | |
|
编译的目标目录
|
/usr | /usr | /usr | ||||
| 使用谁的工具 |
/tools
|
目标系统
|
目标系统
|
6.LFS过程中遇到的问题:
LFS实践的更多相关文章
- gitlab LFS 的应用实践
今天看到的gitlab LFS的文档,将自己的理解整理成博客,加深自己的印象.具体gitlab LFS的介绍可以直接百度了,不在这里详细阐述.只提一下他的作用:LFS就是Large File Stor ...
- 《从LFS到自己的Linux发行版》系列教程:一步到位体验LFS11.0
目录 前言 第一节:LFS 准备工作 第二节:一步完成你的 LFS11.0 第三节:开启你的 LFS 系统 结语 前言 如果你把从源代码开始编译构建一个操作系统的工作当成厨师做一桌菜的话,Lin ...
- webp图片实践之路
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- Logstash实践: 分布式系统的日志监控
文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Windows平台分布式架构实践 - 负载均衡
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
随机推荐
- JSON.NET概述
1. JSON.NET概述 当JSON逐渐成为Ajax的标准数据交互格式时,在.NET中处理JSON数据只能使用字符串拼接的方法,十分麻烦,因而催生了JSON.NET这个项目. JSON.NET是一个 ...
- js修改input的type属性问题
js修改input的type属性有些限制.当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题.但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以 ...
- jitsi
http://code.csdn.net/openkb/p-Jitsi https://download.jitsi.org/jitsi/nightly/ https://download.jitsi ...
- [Webpack 2] Import a non-ES6 module with Webpack
When you have a dependency that does not export itself properly, you can use the exports-loader to f ...
- java20 创建服务器:ServerSocket
创建服务器:ServerSocket import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- InnoDB的redo日志管理---饶珑辉
http://raolonghui.com/2015/06/24/innodb%E7%9A%84redo%E6%97%A5%E5%BF%97%E7%AE%A1%E7%90%86/#comment-11
- web工程中spring+ibatis的单元测试--转载
为了保证代码的正确,软件的质量,单元测试几乎是每个程序员都要面临的工作了;而开发中大部分的工作都涉及数据库的操作,也就是平时经常可以看到的DAO了;由于是对数据库的操作,就必然有事务的问题了;如果是启 ...
- (原创)speex与wav格式音频文件的互相转换(二)
之前写过了如何将speex与wav格式的音频互相转换,如果没有看过的请看一下连接 http://www.cnblogs.com/dongweiq/p/4515186.html 虽然自己实现了相关的压缩 ...
- js 获取当前时间格式怎么转换?
toLocaleDateString() 得到的时间是 yyyy年MM月dd日 HH:ss:mm 格式的,怎么转换成yyyy-MM-dd HH:ss:mm 在js里面 仅针对这个问题来说,不需要那么大 ...
- java基础加强
一.泛型 Generic 1.集合泛型: 在没有泛型之前,集合中存入的数据,类型就会丢失掉,在取出数据时,需要做强制类型转换,就有转换失败的风险,而这种风险,在编译阶段是没有办法检查出来的 引入泛型后 ...