重走LFS之路:(四) 工具链编译-1

重走LFS之路:(四) 工具链编译-1

经过了充分的准备工作之后,我们要来着手工具链的编译。LFS不能直接使用宿主系统的编译器和库进行编译,而是用宿主系统的编译器和库再编译出来一份编译器和库,然后二次编译编译器和库,最后才能用最终的编译器来编译构建LFS系统。所以我们现在需要做的是来编译这些工具。

(题图来自: techradar.com)

这些工具的编译比较冗长,所以可能需要数篇的篇幅来记录这些过程。

首先需要创建一个目录来安置这些工具


  1. mkdir -v $LFS/tools

然后为了方便,我们在根目录做了个软连接 /tools -> $LFS/tools


  1. sudo ln -sv $LFS/tools /tools

1-createtoolsdirok1

这时候有个坑,LFS 7.7官方文档上写的命令是ln -sv $LFS/tools /,但是事实上在Debian 7.7版本实测,酱紫可能会有问题,就像这样

2-createtoolsdirfailed

接下来为了避免使用权限大的账号误操作造成宿主机损失,新建一个lfs账户,加入lfs组,并且将$LFS下的src和tools两个目录属主都改为lfs。


  1. sudo groupadd lfs
  2. sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs
  3. sudo passwd lfs
  4. sudo chown -v lfs $LFS/tools
  5. sudo chown -Rv lfs $LFS/src

3-createlfsaccount

这里还有一个坑,LFS 7.7官方文档上的原命令是chown -v lfs $LFS/src,可是我们已经下载完的文件都在那里面,会没权限操作的,所以需要加上R参数来递归修改文件属主。最后用su – lfs就可以切换到lfs账户来操作啦。

切换到lfs账户之后,我们需要建立这个账户的环境变量


  1. vi ~/.bashrc

我们来写一个环境变量文件


  1. HOME=$HOME
  2. TERM=$TERM
  3. PS1=’${debian_chroot:+($debian_chroot)}\[\033[01;31m\][\A]\[\033[01;33m\]\u\[\033[00m\]@\[\033[01;32m\]\h:\[\033[01;34m\]\w\[\033[00m\]$ ‘
  4. set +h
  5. umask 022
  6. LFS=/mnt/lfs
  7. LC_ALL=POSIX
  8. LFS_TGT=$(uname -m)-lfs-linux-gnu
  9. PATH=/tools/bin:/bin:/usr/bin
  10. export LFS LC_ALL LFS_TGT PATH

4-createlfsenv

然后加载这个环境变量文件,并且查看一下是不是真的将环境变量都设置上了


  1. source ~/.bashrc
  2. export

5-lfsenvverify

事实证明我们的操作是有效的呃……

此时是有一个编译选项的,我起的虚拟机是单核的就无所谓了。如果你用了多核机器来做LFS,那么可以通过-j2参数来加速make,或者设置这样一个环境变量


  1. export MAKEFLAGS=’-j 2′

现在为了让目录简单一点,我们需要把源码包从$LFS/src/lfs里面挪到$LFS/src里面


  1. mv $LFS/src/lfs/* $LFS/src/

接下来我们进行工具编译

首先调整当前路径到$LFS/src


  1. cd $LFS/src

解压binutils,开始进行binutils的第一遍编译


  1. tar jxvf binutils-2.25.tar.bz2

进入binutils源码目录


  1. cd binutils-2.25

我们为了保持源码目录的洁净和区分编译文件,会将每个软件新建一个构建目录来配置和编译,而非从源码目录直接编译,格式如{softname}-build

从$LFS/src/binutils-2.25平级建立binutils构建目录并进入该目录


  1. mkdir -v ../binutils-build
  2. cd ../binutils-build/

加入编译选项来配置binutils


  1. ../binutils-2.25/configure \
  2. –prefix=/tools \
  3. –with-sysroot=$LFS \
  4. –with-lib-path=/tools/lib \
  5. –target=$LFS_TGT \
  6. –disable-nls \
  7. –disable-werror

编译好的binutils不着急直接安装,因为根据官方文档的提示,我们的机器架构是x86_64,此时需要建立个库目录,然后做个软连接


  1. case $(uname -m) in
  2. x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
  3. esac

建立完成之后,就可以安装啦


  1. make install

回到$LFS/src目录,继续来解压并第一遍编译GCC,不过GCC稍微复杂一点,因为它需要三个包的支持,GMP, MPFR和MPC。


  1. tar jxvf gcc-4.9.2.tar.bz2
  2. cd gcc-4.9.2
  3. tar -xf ../mpfr-3.1.2.tar.xz
  4. mv -v mpfr-3.1.2 mpfr
  5. tar -xf ../gmp-6.0.0a.tar.xz
  6. mv -v gmp-6.0.0 gmp
  7. tar -xf ../mpc-1.0.2.tar.gz
  8. mv -v mpc-1.0.2 mpc
  9. for file in \
  10. $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
  11. do
  12. cp -uv $file{,.orig}
  13. sed -e ‘s@/lib\(64\)\?\(32\)\?/ld@/tools&@g’ \
  14. -e ‘s@/usr@/tools@g’ $file.orig > $file
  15. echo ‘
  16. #undef STANDARD_STARTFILE_PREFIX_1
  17. #undef STANDARD_STARTFILE_PREFIX_2
  18. #define STANDARD_STARTFILE_PREFIX_1 “/tools/lib/”
  19. #define STANDARD_STARTFILE_PREFIX_2 “”‘ >> $file
  20. touch $file.orig
  21. done
  22. sed -i ‘/k prot/agcc_cv_libc_provides_ssp=yes’ gcc/configure

准备完毕,下面依旧建立构建目录,并且开始配置和构建


  1. mkdir -v ../gcc-build
  2. cd ../gcc-build
  3. ../gcc-4.9.2/configure \
  4. –target=$LFS_TGT \
  5. –prefix=/tools \
  6. –with-sysroot=$LFS \
  7. –with-newlib \
  8. –without-headers \
  9. –with-local-prefix=/tools \
  10. –with-native-system-header-dir=/tools/include \
  11. –disable-nls \
  12. –disable-shared \
  13. –disable-multilib \
  14. –disable-decimal-float \
  15. –disable-threads \
  16. –disable-libatomic \
  17. –disable-libgomp \
  18. –disable-libitm \
  19. –disable-libquadmath \
  20. –disable-libsanitizer \
  21. –disable-libssp \
  22. –disable-libvtv \
  23. –disable-libcilkrts \
  24. –disable-libstdc++-v3 \
  25. –enable-languages=c,c++
  26. make
  27. make install

除了三个支持包和前置的一些设置之外,gcc编译就没啥新鲜的了,编译安装就是了。

接下来继续回到$LFS/src解压和编译安装Linux API Headers


  1. tar -xf linux-3.19.tar.xz
  2. cd linux-3.19
  3. make mrproper
  4. make INSTALL_HDR_PATH=dest headers_install
  5. cp -rv dest/include/* /tools/include

Linux API Headers安装完成

这里有意思的是mrproper,其实和make clean的功能差不多,但是比clean的范围要大。

原文发布时间:2015-04-05

本文来自云栖合作伙伴“linux中国”

时间: 2024-09-11 23:28:16

重走LFS之路:(四) 工具链编译-1的相关文章

重走LFS之路:(八) 基础系统编译-1

重走LFS之路:(八) 基础系统编译-1 (题图来自: techradar.com)   从现在开始,我们进入真正意义上的LFS系统的基础系统编译. 这个阶段比较漫长,中间还有可能出现各种各样的问题,我会尽量翔实地记录遇到的各种状况和解决方案,以供后来参考. Linux-3.19 API Headers cd /src/linux-3.19 执行编译清理 cd /src/linux-3.19 重新编译 make INSTALL_HDR_PATH=dest headers_install 删除非必

重走LFS之路:(二) 存储设备准备

重走LFS之路:(二) 存储设备准备 (题图来自: techradar.com) LFS的编译需要单独有一块存储,条件不好的就单独划个分区,条件好的就再挂块硬盘,实在不行就新建个目录来做这件事好了,只不过这样是没法引导起来,只能chroot之后当编译环境用. 我这就以VirtualBox新建一块SATA硬盘,然后接入虚拟机,分区,挂载为例来记录这个过程. 打开VirtualBox,左侧列表中选择我用来做LFS的虚拟机PureDebian-LFS. 单击设置,弹出的对话框中选择存储这一项,从右侧点

重走LFS之路:(三) 磁盘初始化与源码准备

重走LFS之路:(三) 磁盘初始化与源码准备 当硬件部分都准备就绪,就可以开始动手来准备软件了.不过在开始编译之前需要先做一件事,就像Windows中说的要格式化分区.虽然我真心不喜欢用Linux和Windows比,因为那样着实像是在英语和汉语之间来回翻译,想想就知道印欧语系和汉藏语系两门语言跨语系表述是多别扭的事. (题图来自: techradar.com) 在Linux中,我们把这个操作叫做建立文件系统.Linux使用的文件系统是ext系列和swap,其中swap只用作交换分区的格式,所谓交

重走LFS之路:(一) 环境准备

重走LFS之路:(一) 环境准备 自从大学二年级的寒假没日没夜地用了整整两个月的时间编译了LFS之后,就再也没做过.这两天在Linux中国的微信公众号上看到LFS都升级到7.7了,故而觉得是时候重新再编译一遍的时候了. 诚然LFS是Linux学习和深入理解的终南捷径,每个真心希望了解Linux的人都建议去做一遍LFS,因为每做一次就会获得新的知识,对Linux有更多更深入的理解. (题图来自: techradar.com) 貌似LFS官网(http://www.linuxfromscratch.

重走LFS之路:(七) 基础系统编译准备

重走LFS之路:(七) 基础系统编译准备 (题图来自: techradar.com) 准备虚拟内核文件系统 建立系统挂载目录 mkdir -pv $LFS/{dev,proc,sys,run} 创建初始设备节点 sudo mknod -m 600 $LFS/dev/console c 5 1 sudo mknod -m 666 $LFS/dev/null c 1 3 挂载并填充设备目录 sudo mount -v –bind /dev $LFS/dev 挂载虚拟内核文件系统 mount -vt

首富疯狂并购 阿里重走盛大之路:马云会成为下一个陈天桥吗

中介交易 SEO诊断 淘宝客 云主机 技术大厅 原文标题: 马云,还记得西子湖畔的陈天桥吗? 2003年底,第四届西湖论剑,这是陈天桥第一次应马云之约参加这样的论坛,也是唯一一次. 次年,盛大网络上市,陈天桥成为最年轻的首富,收购吉胜.边锋.起点,开始从网络游戏厂商的定位迈向"数字娱乐提供商",打造"网络迪士尼". 盛大文学.盛大在线.盛大游戏.酷6.华友世纪.盛世影业.盛世骄阳等一些列与此定位相关的产业链上下游公司或收购,或合资组建而成,而类似盒子计划.突袭新浪等

中国移动CEO李跃:重走移动互联路

中移动的移动互联战略不乏先见之明.创新突破,但成果为何不及预料?新任CEO李跃抑其弊端,战线回收,能带领中移动走出一条新路吗?2010年5月的CEO交接班正在全面改变中移动 李跃履新CEO后,内部变革次第展开.上台后,他第一次承认了运营商普遍抗拒的"管道"命运(但在前面多了两个字:智能):他通过将增值业务的分成模式改为固定承包付费模式,停下快速扩张.高速增长步伐,转而修炼内功:同时将分散于各地的增值业务适当集中. 过去10年间,中移动一直保持着有别于其他电信运营商的活力劲头,快马扬鞭,

蝠王自曝欲加盟快船沃弗尔或将重走诺瓦克之路

不怪老板太抠门,只怪姚明突然伤势加重打乱了火箭的一切计划.阿泰斯特如此,野兽本欲留在休城,但最终还是只接受一份中产投奔湖人:沃弗尔同样如此,他希望能继续留在休城,然而火箭却仅给他提出了一份2年350万的报价.这显然是他无法接受的. 沃弗尔成下一个诺瓦克? 为此,沃弗尔只有离队这一种选择.尤其是当火箭签下阿里扎后,沃弗尔更是"走定了".那么他的下家将是何处?坊间传言不少,从骑士到森林狼,都有可能成为09-10赛季沃弗尔的新东家. 据媒体透露,沃弗尔的心理价位大约为300-400万,因此对

乐视、小米重走戴尔路

最近互联网营销很火爆,小米.乐视成为其拥趸,大有将传统零售渠道抛在脑后的风范.不过,互联网营销的鼻祖天猫却反其道而行之,其2013年的一项主要战略就是O2O,利用便利店作为快递自提点,开设线下体验店.天猫称,O2O的好处是线上商品不满意可以到线下换货,消费者可以去门店触摸. 简单的思维是这样的,阿里巴巴不正是通过创新互联网销售模式获得了巨大的成功.传统制造商为何不可抛开传统广告,抛开线下渠道,成为制造业的新贵?然而,要知道天猫.淘宝是靠着销售成熟品牌的成熟商品起家的.线下的渠道完成了商品销售中的