1、cfdisk /dev/hda将出现分区界面这里可以按照你自己的需要的分区,这里我按照设置一个根分区和一个交换分区为例,交换分区占用512M,其余的全部分给根分区。磁盘分区作用/dev/hda1 swap/dev/hda2作为目标系统根目录保存退出后进行磁盘分区的格式化mkswap /dev/hda1mkfs.xfs /dev/hda2相关知识点:磁盘格式化一定要在磁盘分区未进行加载前进行。mkswap是用于将磁盘分区格式化为交换分区的命令。这里我将/dev/hda2格式化了为Xfs格式,如果你喜欢其它格式的文件系统,你可以使用相应的命令来格式化。如果你的内存不太大,想在编译期间就使用上交换分
2、区的话,可使用下面的命令激活交换分区swapon /dev/hda1swapon用于激活交换分区swapoff用于将激活的交换分区停用可以通过free命令来查看当前的内存使用情况创建LFS的“创作基地”export LFS=/mnt/lfsmkdir -pv $LFSexport LFS=/mnt/lfs这条命令的作用是为了后面引用“创作基地”的绝对路径方便而设置LFS这样的环境变量。加载/dev/hda2到“创作基地”mount /dev/hda2 $LFS创建必要的目录并设置属性创建源代码编译用目录mkdir -v $LFS/sourceschmod -v a+wt $LFS/source
3、schmod a+wt是将目录或文件的属性设置为1777,这样任何人都可以对其进行读写。创建工具链目录mkdir -v $LFS/toolsln -sv $LFS/tools /注意:ln -sv $LFS/tools执行后应该会输出/tools - /mnt/lfs/tools表示正确。上面这两句就建立了神奇的工具链目录(是工具链目录不是工具链),这样的创建方式是为了在创建工具链和使用工具链创建目标系统的时候对于工具链的位置都是/tools,这样可保证工具链的正常使用创建lfs用户groupadd lfsuseradd -s /bin/bash -g lfs -m -k /dev/null
4、lfs设置lfs密码,设置为空就行了,也就是输入密码的时候直接回车就成。passwd lfs将tools和sources目录的用户改为lfs,以便后面使用lfs来操作这两个目录chown -v lfs $LFS/toolschown -v lfs $LFS/sources登陆到lfs用户su - lfs这时候你会发现命令行提示符已经由#改为了$其实如果不使用lfs用root也是能完成工具链的,不过需要对root的环境变量进行修改,还要防止因为输入错误而导致覆盖主系统下的文件,所以LFS手册中制作工具链部分就是为了解决这种意外的发生而用lfs用户来建立工具链建立lfs用户的环境cat /.bas
5、h_profile /.bashrc exec env -i HOME=$HOME TERM=$TERM PS1= /bin/bashEOFset +humask 022LFS=/mnt/lfsLC_ALL=POSIXPATH=/tools/bin:/usr/binexport LFS LC_ALL PATHsource /.bash_profile8.检查一下export命令查看输出,应该是declare -x HOME=/home/lfsdeclare -x LC_ALL=POSIXdeclare -x LFS=/mnt/lfsdeclare -x OLDPWDdeclare -x PAT
6、H=/tools/bin:/usr/bindeclare -x PS1=u:w$ declare -x PWD=declare -x SHLVL=1declare -x TERM=linux9.进入编译目录cd $LFS/sources基本上就恢复工作状态了。开始工具链的制作进入LFS包编译目录cd $LFS/sourcesBinutils-2.17 - Pass 1tar xvf /lfs-sources/binutils-2.17.tar.bz2cd binutils-2.17大家可以注意到后面所有的解包命令均使用tar xvf来完成,而不管文件的压缩方式是bz2还是gz,这是因为较新的t
7、ar程序都具有自动识别后缀名并自动调用相应的解压缩工具的能力,所以可以不需要指定压缩方式,但对于早期的tar命令则可能不具备这个功能因此需要你根据包的压缩方式来指定,如bz2使用j,gz使用z,对应上面的binutils则是tar xvjf /lfs-sources/binutils-2.17.tar.bz2因LFS的LiveCD中提供的tar版本比较新,后面制作的tar版本也比较新,因此支持自动识别的能力,同时为了使文章的解压命令看起来比较统一方便维护(同样对于想制作成脚本的朋友也会比较方便)因此后面统一使用tar xvf来解压。接着我们需要建立一个目录,因为binutils建议使用一个空目
8、录来编译,所以mkdir -v ./binutils-buildcd ./binutils-buildCC=gcc -B/usr/bin/ ./binutils-2.17/configure -prefix=/tools -disable-nls -disable-werrormakemake installmake -C ld cleanmake -C ld LIB_PATH=/tools/libcp -v ld/ld-new /tools/bincd .rm -rf binutils-buildrm -rf binutils-2.17GCC-4.1.2 - Pass 1tar xvf /l
9、fs-sources/gcc-4.1.2.tar.bz2mkdir -v gcc-buildcd gcc-buildCC= ./gcc-4.1.2/configure -prefix=/tools -with-local-prefix=/tools -disable-nls -enable-shared -enable-languages=cmake bootstrapmake installln -vs gcc /tools/bin/cccd .rm -rf gcc-buildrm -rf gcc-4.1.2这里不要图省事而不删gcc-4.1.2,因为这样可能会给后面的编译产生一些意外的错误
10、。Linux-2.6.22.5 API Headerstar xvf /lfs-sources/linux-2.6.22.5.tar.bz2cd linux-2.6.22.5make mrpropermake headers_checkmake INSTALL_HDR_PATH=dest headers_installcp -rv dest/include/* /tools/includecd .rm -rf linux-2.6.22.5Glibc-2.5.1tar xvf /lfs-sources/glibc-2.5.1.tar.bz2cd glibc-2.5.1mkdir -v ./gli
11、bc-buildcd ./glibc-build./glibc-2.5.1/configure -prefix=/tools -disable-profile -enable-add-ons -enable-kernel=2.6.0 -with-binutils=/tools/bin -without-gd -with-headers=/tools/include -without-selinuxmakemkdir -v /tools/etctouch /tools/etc/ld.so.confmake installcd .rm -rf glibc-buildrm -rf glibc-2.5
12、.1这里的参数-enable-kernel=2.6.0,只是为了说明kernel的大版本,所以不需要根据实际的kernel版本来改,即使是用linux-2.6.15也一样只写2.6.0就可以了。调整工具链mv -v /tools/bin/ld,ld-oldmv -v /tools/$(gcc -dumpmachine)/bin/ld,ld-oldmv -v /tools/bin/ld-new,ldln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ldgcc -dumpspecs | sed s/lib/ld-linux.so.2/tools
13、&g dirname $(gcc -print-libgcc-file-name)/specsGCC_INCLUDEDIR=dirname $(gcc -print-libgcc-file-name)/include &find $GCC_INCLUDEDIR/* -maxdepth 0 -xtype d -exec rm -rvf ; &rm -vf grep -l DO NOT EDIT THIS FILE $GCC_INCLUDEDIR/* &unset GCC_INCLUDEDIR工具链的调整方法有好几种,而且不同版本GCC的specs可能会有不同,但实际上都是把specs文件中的/l
14、ib/ld-linux.so.2替换成了/tools/lib/ld-linux.so.2,所以即使有些文章在调整工具链上的命令和LFS手册上的不一样也不用太奇怪,当然也可以直接用gcc -dumpspecs导出后手工直接编辑specs文件。测试工具链的调整echo main() dummy.ccc dummy.creadelf -l a.out | grep tools如果输出大致如下Requesting program interpreter: /tools/lib/ld-linux.so.2则表示调整成功,因为所有的库已经连接到了/tools/lib下。rm -rf a.out dummy
15、.c测试工具安装说明:这部分将安装3个用于第六章各种源码包编译后的测试的工具,所以如果你不打算做make check之类的事情,那么这3个包可以不装。Tcl-8.4.15 Expect-5.43.0 DejaGNU-1.4.4tar xvf /lfs-sources/tcl8.4.15-src.tar.gzcd tcl8.4.15/unix./configure -prefix=/toolsmakemake installmake install-private-headersln -sv tclsh8.4 /tools/bin/tclshcd $LFS/sourcestar xvf /lfs
16、-sources/expect-5.43.0.tar.gzcd expect-5.43patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patchcp configure,.baksed s:/usr/local/bin: configure.bak configure./configure -prefix=/tools -with-tcl=/tools/lib -with-tclinclude=/tools/include -with-x=nomakemake SCRIPTS= installcd $LFS/sourcestar xvf /lf
17、s-sources/dejagnu-1.4.4.tar.gzcd dejagnu-1.4.4./configure -prefix=/toolsmake installcd .rm -rf tcl8.4.15rm -rf expect-5.43rm -rf dejagnu-1.4.4GCC-4.1.2 - Pass 2tar xvf /lfs-sources/gcc-4.1.2.tar.bz2cd gcc-4.1.2cp -v gcc/Makefile.in,.origsed s./fixinc.sh-c true gcc/Makefile.in.orig gcc/Makefile.incp
18、-v gcc/Makefile.in,.tmpsed s/XCFLAGS =$/& -fomit-frame-pointer/ gcc/Makefile.in.tmp gcc/Makefile.inpatch -Np1 -i /lfs-sources/gcc-4.1.2-specs-1.patchmkdir -v ./gcc-buildcd ./gcc-build./gcc-4.1.2/configure -prefix=/tools -with-local-prefix=/tools -enable-clocale=gnu -enable-shared -enable-threads=pos
19、ix -enable-_cxa_atexit -enable-languages=c,c+ -disable-libstdcxx-pchmakemake installcd .rm -rf gcc-buildrm -rf gcc-4.1.2再次测试工具链的调整,以确保刚刚编译的gcc正确工作Binutils-2.17 - Pass 2tar xvf /lfs-sources/binutils-2.17.tar.bz2mkdir -v binutils-buildcd binutils-build./binutils-2.17/configure -prefix=/tools -disable-
20、nls -with-lib-path=/tools/libmakemake installmake -C ld cleanmake -C ld LIB_PATH=/usr/lib:/libcp -v ld/ld-new /tools/bincd .rm -rf binutils-buildrm -rf binutils-2.17Ncurses-5.6tar xvf /lfs-sources/ncurses-5.6.tar.gzcd ncurses-5.6./configure -prefix=/tools -with-shared -without-debug -without-ada -en
21、able-overwritemakemake installcd .rm -rf ncurses-5.6Bash-3.2tar xvf /lfs-sources/bash-3.2.tar.gzcd bash-3.2patch -Np1 -i /lfs-sources/bash-3.2-fixes-5.patch./configure -prefix=/tools -without-bash-mallocmakemake installln -vs bash /tools/bin/shcd .rm -rf bash-3.2Bzip2-1.0.4tar xvf /lfs-sources/bzip2
22、-1.0.4.tar.gzcd bzip2-1.0.4makemake PREFIX=/tools installcd .rm -rf bzip2-1.0.4Coreutils-6.9tar xvf /lfs-sources/coreutils-6.9.tar.bz2cd coreutils-6.9./configure -prefix=/toolsmakemake installcp -v src/su /tools/bin/su-toolscd .rm -rf coreutils-6.9Diffutils-2.8.1tar xvf /lfs-sources/diffutils-2.8.1.
23、tar.gzcd diffutils-2.8.1./configure -prefix=/toolsmakemake installcd .rm -rf diffutils-2.8.1Findutils-4.2.31tar xvf /lfs-sources/findutils-4.2.31.tar.gzcd findutils-4.2.31./configure -prefix=/toolsmakemake installcd .rm -rf findutils-4.2.31Gawk-3.1.5tar xvf /lfs-sources/gawk-3.1.5.tar.bz2cd gawk-3.1
24、.5./configure -prefix=/toolscat config.h #define HAVE_LANGINFO_CODESET 1#define HAVE_LC_MESSAGES 1EOFmakemake installcd .rm -rf gawk-3.1.5Gettext-0.16.1tar xvf /lfs-sources/gettext-0.16.1.tar.gzcd gettext-0.16.1cd gettext-tools./configure -prefix=/tools -disable-sharedmake -C gnulib-libmake -C src msgfmtcp -v src/msgfmt /tools/bincd $
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1