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中的使用以及实际应用给我们带来的效率提升. 首先 ...
随机推荐
- 分布式数据库中间件–(3) Cobar对简单select命令的处理过程
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/284 在 ...
- ActionBarSherlock
https://github.com/JakeWharton/ActionBarSherlock https://github.com/ddewaele/GoogleMapsV2WithActionB ...
- IAP升级功能编写初期的一些困惑与疑问---完毕功能后的总结
IAP的源代码等资料我上传了,压缩包内有12个文件,,http://download.csdn.net/detail/f907279313/7524849(要积分的辛苦收集的你们就给点积分吧) 还有还 ...
- sendStickyBroadcast和sendStickyOrderedBroadcast
sendStickyBroadcast和sendStickyOrderedBroadcast发出的广播会一直滞留(等待),以便有人注册这则广播消息后能尽快的收到这条广播.其他功能与sendBroadc ...
- 移动Web开发图片自适应两种常见情况解决方案
本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...
- 由 Windows 向 Linux 迁移字体 和 Linux 等宽字体
1. From Windows Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windows下可用的字体.2. To Linux linux的字体库是 /usr/sha ...
- Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解
对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用到了Al ...
- 下载好一个android软件之后,怎样自动提示安装?
最近在做毕设,里面牵涉到版本更新,当有新版本时可以下载新版本,下载完成之后提示安装.那么怎么实现下载完成之后提示安装呢? 直接上代码吧: File mFile = new File(Environme ...
- Android(java)学习笔记140:SpannableString类的使用
我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为 ...
- c结构体初始化问题
结构体中的数组的初始化问题 我的代码 C/C++ code #include <stdio.h> #include <stdlib.h> struct a { int leng ...