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中的使用以及实际应用给我们带来的效率提升. 首先 ...
随机推荐
- IOS7 自定义UIBarButtonItem 的一些问题
ios 下自定义导航栏的BarButtonItem 会产生一些偏移问题, 解决方案: 通过新建一个系统的带固定距离的Item来调节你的Item #define IOS7_NAVI_SPACE ...
- IOS-Archiver文件归档(2)
Archiver是持久化数据的一种方式,他跟 Plist的差别在于他能持久化自己定义对象.但他没Plist那么方便. Archiver默认能持久化的数据有NSNumber,NSArray,NSDict ...
- JavaScript常用正则表达式与应用(一)
JavaScript的String类和RegExp对象类都定义了相关方法使用正则表达式进行模式匹配,本文将以连载方式介绍JavaScript常用正则表达式与相关应用,欢迎交流 本节是连载一,首先介绍J ...
- Google高级技巧—google Hack★★★★
google hacking事实上并算不上什么新东西,当时并没有重视这样的技术,觉得webshell什么的,并无太大实际用途.google hacking事实上并非如此简单... 经常使用的googl ...
- leetcode每日解题思路 221 Maximal Square
问题描述: 题目链接:221 Maximal Square 问题找解决的是给出一个M*N的矩阵, 只有'1', '0',两种元素: 需要你从中找出 由'1'组成的最大正方形.恩, 就是这样. 我们看到 ...
- secureCRT常用设置
一.快捷键: 1. ctrl + a : 移动光标到行首[常用] 2. ctrl + e :移动光标到行尾[常用] 3. ctrl + d :删除光标之后的一个字符 4. ctrl + w : 删除行 ...
- Android开发之IPC进程间通信-AIDL介绍及实例解析
一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...
- 【转】MyEclipse第一个Servlet程序
转自:http://blog.csdn.net/wangdingqiaoit/article/details/7674367 前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统 ...
- Android开发JDBC连接mysql数据库导入驱动方法
在使用JDBC编程时需要连接数据库,导入JAR包是必须的,导入其它的jar包方法同样如此,导入的方法是 打开eclipse 1.右击要导入jar包的项目,点properties 2.左边选择java ...
- android的activity的跳转
1.无参数的跳转 先在layout下建立一个factivity.xml,在里面添加2个Button按钮和一个TextView,并添加属性 , 然后建立以个sactivity.xml文件, 在src下建 ...