• LFS7.4编译笔记(1)


    由于第一次编译,花了不少时间,也不知道能不能成功,所以就没有记笔记,现在重新编译一次,这次不装U盘而是装到我的移动硬盘上面。步骤差不多,因为我感觉硬盘的速度会比U盘快。

    至于LFS的优点,我就不多说了,相信你只要听过LFS这个词,就一定会知道它的优点的。这里我用的是最新版的LFS7.4,因为最新版的都会修复一些错误,或者编译方法会更合理一些。

    下面就是我的安装之路:

    1.首先就是分区,建立文件系统,挂载文件系统

    我的分区如下:

    /dev/sdb是我的移动硬盘,大概有80G大小吧。上图中的/dev/sdb1是作为/boot分区的,有100M左右,/dev/sdb2是作为/分区的,有10G左右,余下的是我真正存储档案的硬盘。至于怎么分区,查一下fdisk命令的用法,其实很简单的。不过记得要把/dev/sdb1标记为可引导的,也就是我们的/boot分区。

    分区完了之后,建立文件系统,也就是格式化为ext4文件系统。

    mkfs -v -t ext4 /dev/sdb1
    mkfs -v -t ext4 /dev/sdb2

    这里我没有分swap分区,因为我的宿主系统已经有swap分区了,编译时就可以使用。至于新系统,可以编译结束后在新系统中再分swap也一样。

    接着就是挂载这些文件系统了。

    export LFS=/mnt/lfs 
    mkdir
    -pv $LFS mount -v -t ext4 /dev/sdb2 $LFS mkdir -pv $LFS/boot mount -v -t ext4 /dev/sdb1 $LFS/boot

    2.准备软件包和一些补丁。

    mkdir -v $LFS/sources
    chmod -v a+wt $LFS/sources
    wget -i wget-list -P $LFS/sources
    
    pushd $LFS/sources
    md5sum -c md5sums
    popd

    3. 最后的准备:

    mkdir -v $LFS/tools
    ln -sv $LFS/tools /tools    #文档中用的是 ln -sv $LFS/tools /  (此为简写形式)

    添加用户:

    groupadd lfs
    useradd -s /bin/bash -g lfs -m -k /dev/null lfs
    passwd lfs
    chown -v lfs $LFS/sources
    chown -v lfs $LFS/tools
    su - lfs

    设置用户lfs的环境变量:

    cat > ~/.bash_profile <<EOF
    exec env -i HOME=$HOME TERM=$TERM /bin/bash
    EOF
    
    cat > ~/.bashrc <<EOF
    set +h
    umask 022
    LFS=/mnt/lfs
    LC_ALL=POSIX
    LFS_TGT=$(uname -m)-lfs-linux-gnu
    PATH=/tools/bin:/bin:/usr/bin
    PS1="$? u@h w$ " export LFS LC_ALL LFS_TGT PATH PS1 EOF

    加载刚设置的环境:

    source ~/.bash_profile

    到此,我们的环境已经设置好了。export一下应该会是这样的:

    尤其注意LFS、LFS_TGT、PATH这几个变量的值。其中,变量PS1我们使用了一个小技巧,在最前面是$?,这样我们执行一个命令的时候,可以看看前面的值是不是0,如果是0就表示上一步的命令正确执行了,否则的话,就表示上一步出错了。

    如果这些变量正确的话,就继续。

    4. 开始编译临时的系统

    编译之前首先确定LFS变量的值是/mnt/lfs,另外要满足host system的要求

    之后,进入$LFS/sources目录开始编译。

    cd $LFS/sources

    Binutils-2.23.2 - Pass 1

    tar xvf binutils-2.23.2.tar.bz2
    cd binutils-2.23.2
    sed -i -e 's/@colophon/@@colophon/' 
           -e 's/doc@cygnus.com/doc@@cygnus.com/' bfd/doc/bfd.texinfo
    mkdir -v ../binutils-build
    cd ../binutils-build
    ../binutils-2.23.2/configure 
        --prefix=/tools 
        --with-sysroot=$LFS 
        --target=$LFS_TGT 
        --with-lib-path=/tools/lib 
        --disable-nls 
        --disable-werror
    make
    make install
    cd ..
    rm -rf binutils-build bintuils-2.23.2

    GCC-4.8.1 - Pass 1

     1 tar xvf gcc-4.8.1.tar.bz2
     2 cd gcc-4.8.1
     3 tar -Jxf ../mpfr-3.1.2.tar.xz
     4 mv -v mpfr-3.1.2 mpfr
     5 tar -Jxf ../gmp-5.1.2.tar.xz
     6 mv -v gmp-5.1.2 gmp
     7 tar -zxf ../mpc-1.0.1.tar.gz
     8 mv -v mpc-1.0.1 mpc
     9 
    10 for file in 
    11     $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
    12 do
    13     cp -uv $file{,.orig}
    14     sed -e 's@/lib(64)?(32)?/ld@/tools&@g' 
    15           -e 's@/usr@/tools@g' $file.orig > $file
    16     echo '
    17 #undef STANDARD_STARTFILE_PREFIX_1
    18 #undef STANDARD_STARTFILE_PREFIX_2
    19 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
    20 #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
    21     touch $file.orig
    22 done
    23 
    24 sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure
    25 mkdir -v ../gcc-build
    26 cd ../gcc-build
    27 ../gcc-4.8.1/configure 
    28     --prefix=/tools 
    29     --with-sysroot=$LFS 
    30     --target=$LFS_TGT 
    31     --with-newlib 
    32     --without-headers 
    33     --with-local-prefix=/tools 
    34     --with-native-system-header-dir=/tools/include 
    35     --disable-nls 
    36     --disable-shared 
    37     --disable-multilib 
    38     --disable-decimal-float 
    39     --disable-threads 
    40     --disable-libatomic 
    41     --disable-libgomp 
    42     --disable-libitm 
    43     --disable-libmudflap 
    44     --disable-libquadmath 
    45     --disable-libsanitizer 
    46     --disable-libssp 
    47     --disable-libstdc++-v3 
    48     --enable-languages=c,c++ 
    49     --with-mpfr-include=$(pwd)/../gcc-4.8.1/mpfr/src 
    50     --with-mpfr-lib=$(pwd)/mpfr/src/.libs
    51 make
    52 make install
    53 ln -sv libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`
    54 
    55 cd ..
    56 rm -rf gcc-build gcc-4.8.1

    Linux-3.10.10 API Headers

    1 tar xvf linux-3.10.10.tar.xz
    2 cd linux-3.10.10
    3 make mrproper
    4 make headers_check
    5 make INSTALL_HDR_PATH=dest headers_install
    6 cp -rv dest/include/* /tools/include
    7 cd ..
    8 rm -rf linux-3.10.10

    Glibc-2.18

     1 tar xvf glibc-2.18.tar.xz
     2 cd glibc-2.18
     3 if [ ! -r /usr/include/rpc/types.h ]; then
     4     su -c 'mkdir -p /usr/include/rpc'
     5     su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
     6 fi
     7 sed -i -e 's/static __m128i/inline &/' sysdeps/x86_64/multiarch/strstr.c
     8 mkdir -v ../glibc-build
     9 cd ../glibc-build
    10 ../glibc-2.18/configure 
    11     --prefix=/tools 
    12     --host=$LFS_TGT 
    13     --build=$(../glibc-2.18/scripts/config.guess) 
    14     --disable-profile 
    15     --enable-kernel=2.6.32 
    16     --with-headers=/tools/include 
    17     libc_cv_forced_unwind=yes 
    18     libc_cv_ctors_header=yes 
    19     libc_cv_c_cleanup=yes
    20 make
    21 make install
    22 cd ..
    23 rm -rf glibc-2.18 glibc-build

    到这里需要测试一下:

    echo 'main(){}' > dummy.c
    $LFS_TGT-gcc dummy.c
    readelf -l a.out | grep interpreter

    如果输出是

    [Requesting program interpreter: /tools/lib/ld-linux.so.2]
    就可以继续了。否则一定要查看是哪里出了问题并在继续之前纠正。

    rm -v dummy.c a.out

    Libstdc++-4.8.1

     1 tar xvf gcc-4.8.1.tar.bz2
     2 cd gcc-4.8.1
     3 mkdir -pv ../gcc-build
     4 cd ../gcc-build
     5 ../gcc-4.8.1/libstdc++-v3/configure 
     6     --prefix=/tools 
     7     --host=$LFS_TGT 
     8     --disable-multilib 
     9     --disable-shared 
    10     --disable-nls 
    11     --disable-libstdcxx-threads 
    12     --disable-libstdcxx-pch 
    13     --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/4.8.1
    14 make
    15 make install
    16 cd ..
    17 rm -rf gcc-4.8.1 gcc-build

    Binutils-2.23.2 - Pass 2

     1 tar xvf binutils-2.23.2.tar.bz2
     2 cd binutils-2.23.2
     3 sed -i -e 's/@colophon/@@colophon/' 
     4         -e 's/doc@cygnus.com/doc@@cygnus.com/' bfd/doc/bfd.texinfo
     5 mkdir -v ../binutils-build
     6 cd ../binutils-build
     7 CC=$LFS_TGT-gcc 
     8 AR=$LFS_TGT-ar 
     9 RANLIB=$LFS_TGT-ranlib 
    10 ../binutils-2.23.2/configure 
    11     --prefix=/tools 
    12     --disable-nls 
    13     --with-lib-path=/tools/lib 
    14     --with-sysroot
    15 make
    16 make install
    17 make -C ld clean
    18 make -C ld LIB_PATH=/usr/lib:/lib
    19 cp -v ld/ld-new /tools/bin
    20 cd ..
    21 rm -rf binutils-2.23.2 binutils-build

    GCC-4.8.1 - Pass 2

     1 tar xvf gcc-4.8.1.tar.bz2
     2 cd gcc-4.8.1
     3 cat gcc/limitx.h gcc/glimits.h gcc/limity.h > 
     4     `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
     5 cp -v gcc/Makefile.in{,.tmp}
     6 sed 's/^T_CFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp > gcc/Makefile.in
     7 for file in 
     8     $(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
     9 do
    10     cp -uv $file{,.orig}
    11     sed -e 's@/lib(64)?(32)?/ld@/tools&@g' 
    12             -e 's@/usr@/tools@g' $file.orig > $file
    13     echo '
    14 #undef STANDARD_STARTFILE_PREFIX_1
    15 #undef STANDARD_STARTFILE_PREFIX_2
    16 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
    17 #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file
    18     touch $file.orig
    19 done
    20 
    21 tar -Jxf ../mpfr-3.1.2.tar.xz
    22 mv -v mpfr-3.1.2 mpfr
    23 tar -Jxf ../gmp-5.1.2.tar.xz
    24 mv -v gmp-5.1.2 gmp
    25 tar -zxf ../mpc-1.0.1.tar.gz
    26 mv -v mpc-1.0.1 mpc
    27 mkdir -v ../gcc-build
    28 cd ../gcc-build
    29 
    30 CC=$LFS_TGT-gcc 
    31 CXX=$LFS_TGT-g++ 
    32 AR=$LFS_TGT-ar 
    33 RANLIB=$LFS_TGT-ranlib 
    34 ../gcc-4.8.1/configure 
    35     --prefix=/tools 
    36     --with-local-prefix=/tools
    37     --with-native-system-header-dir=/tools/include 
    38     --enable-clocale-gnu 
    39     --enable-shared 
    40     --enable-threads=posix 
    41     --enable-__cxa_atexit 
    42     --enable-languages=c,c++ 
    43     --disable-libstdcxx-pch 
    44     --disable-multilib 
    45     --disable-bootstrap 
    46     --disable-libgomp 
    47     --with-mpfr-include=$(pwd)/../gcc-4.8.1/mpfr/src 
    48     --with-mpfr-lib=$(pwd)/mpfr/src/.libs
    49 make
    50 make install
    51 ln -sv gcc /tools/bin/cc
    52 cd ..
    53 rm -rf gcc-4.8.1 gcc-build

    到此,还得进一步验证:

    echo 'main(){}' > dummy.c
    cc dummy.c
    readelf -l a.out | grep interpreter

    [Requesting program interpreter: /tools/lib/ld-linux.so.2]
    表示正确。可以继续

    rm -v dummy.c a.out

    Tcl-8.6.0

     1 tar xvf tcl8.6.0-src.tar.gz
     2 cd tcl8.6.0-src
     3 sed -i s/500/5000/ generic/regc_nfa.c
     4 cd unix
     5 ./configure --prefix=/tools
     6 make
     7 TZ=UTC make test
     8 make install
     9 chmod -v u+w /tools/lib/libtcl8.6.so
    10 make install-private-headers
    11 ln -sv tclsh8.6 /tools/bin/tclsh
    12 cd ../..13 rm -rf tcl8.6.0-src

    Expect-5.45

     1 tar xvf expect5.45.tar.gz
     2 cd expect5.45
     3 cp -v configure{,.orig}
     4 sed 's:/usr/local/bin:/bin:' configure.orig > configure
     5 ./configure 
     6     --prefix=/tools 
     7     --with-tcl=/tools/lib 
     8     --with-tclinclude=/tools/include
     9 make
    10 make test
    11 make SCRIPTS="" install
    12 cd ..
    13 rm -rf expect5.45

    DejaGNU-1.5.1

    tar xvf dejagnu-1.5.1.tar.gz
    cd dejagnu-1.5.1
    ./configure --prefix=/tools
    make install
    make check
    cd ..
    rm -rf dejagnu-1.5.1

    Check-0.9.10

    tar xvf check-0.9.10.tar.gz
    cd check-0.9.10
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf check-0.9.10

    Ncurses-5.9

    tar xvf ncurses-5.9.tar.gz
    cd ncurses-5.9
    ./configure 
        --prefix=/tools 
        --with-shared 
        --without-debug 
        --without-ada 
        --enable-overwrite
    make
    make install
    cd ..
    rm -rf ncurses-5.9

    Bash-4.2

    tar xvf bash-4.2.tar.gz
    cd bash-4.2
    patch -Np1 -i ../bash-4.2-fixes-12.patch
    ./configure --prefix=/tools --without-bash-malloc
    make
    make tests
    make install
    ln -sv bash /tools/bin/sh
    cd ..
    rm -rf bash-4.2

    Bzip2-1.0.6

    tar xvf bzip2-1.0.6.tar.gz
    cd bzip2-1.0.6
    make
    make PREFIX=/tools install
    cd ..
    rm -rf bzip2-1.0.6

    Coreutils-8.21

    tar xvf coreutils-8.21.tar.xz
    cd coreutils-8.21
    ./configure --prefix=/tools --enable-install-program=hostname
    make
    make RUN_EXPENSIVE_TESTS=yes check
    make install
    cd ..
    rm -rf coreutils-8.21

    Diffutils-3.3

    tar xvf diffutils-3.3.tar.xz
    cd diffutils-3.3
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf diffutils-3.3

    File-5.14

    tar xvf file-5.14.tar.gz
    cd file-5.14
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf file-5.14

    Findutils-4.4.2

    tar xvf findutils-4.4.2.tar.gz
    cd findutils-4.4.2
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf findutils-4.4.2

    Gawk-4.1.0

    tar xvf gawk-4.1.0.tar.xz
    cd gawk-4.1.0
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf gawk-4.1.0

    Gettext-0.18.3

    tar xvf gettext-0.18.3.tar.gz
    cd gettext-0.18.3
    cd gettext-tools
    EMACS="no"  ./configure --prefix=/tools --disable-shared
    make -C gnulib-lib
    make -C src msgfmt
    cp -v src/msgfmt /tools/bin
    cd ../..
    rm -rf gettext-0,18.3

    Grep-2.14

    tar xvf grep-2.14.tar.xz
    cd grep-2.14
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf grep-2.14

    Gzip-1.6

    tar xvf gzip-1.6.tar.xz
    cd gzip-1.6
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf gzip-1.6

    M4-1.4.16

    tar xvf m4-1.4.16.tar.bz2
    cd m4-1.4.16
    sed -i -e '/gets is a/d' lib/stdio.in.h
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf m4-1.4.16

    Make-3.82

    tar xvf make-3.82.tar.bz2
    cd make-3.82
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf make-3.82

    Patch-2.7.1

    tar xvf patch-2.7.1.tar.xz
    cd patch-2.7.1
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf patch-2.7.1

    Perl-5.18.1

     1 tar xvf perl-5.18.1.tar.bz2
     2 cd perl-5.18.1
     3 patch -Np1 -i ../perl-5.18.1-libc-1.patch
     4 sh Configure -des -Dprefix=/tools
     5 make
     6 cp -v perl cpan/podlators/pod2man /tools/bin
     7 mkdir -pv /tools/lib/perl5/5.18.1
     8 cp -Rv lib/* /tools/lib/perl5/5.18.1
     9 cd ..
    10 rm -rf perl-5.18.1

    Sed-4.2.2

    tar xvf sed-4.2.2.tar.bz2
    cd sed-4.2.2
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf sed-4.2.2

    Tar-1.26

    tar xvf tar-1.26.tar.bz2
    cd tar-1.26
    sed -i -e '/gets is a/d' gnu/stdio.in.h
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf tar-1.26

    Texinfo-5.1

    tar xvf texinfo-5.1.tar.xz
    cd texinfo-5.1
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf texinfo-5.1

    Xz-5.0.5

    tar xvf xz-5.0.5.tar.xz
    cd xz-5.0.5
    ./configure --prefix=/tools
    make
    make check
    make install
    cd ..
    rm -rf xz-5.0.5

    移除调试符号:

    strip --strip-debug /tools/lib/*
    strip --strip-unneeded /tools/{,s}bin/*
    rm -rf /tools/{,share}/{info,man,doc}

    余下部分必须是root用户操作,不再需要lfs用户了。

    su -
    chown -R root:root $LFS/tools

    到此,我们的临时系统已经搭建完成,工具链也可以在此备份以便将来使用。

  • 相关阅读:
    点云处理算法核心-八叉树
    点云平台之cloudCompare开发三
    点云法向量估计方法
    PCL源码编译
    PCL裁剪之多边形裁剪
    点云平台PCLvisualization多边形裁剪方法初探
    点云合并pcl重载“+”
    点云平台之CloudCompare开发二
    点云平台之QtitanRibbon
    神舟电脑 战神ZX6-CT5A2 键盘失灵
  • 原文地址:https://www.cnblogs.com/champ/p/3484047.html
Copyright © 2020-2023  润新知