`

[LFS] My Own Linux 第二天

阅读更多
总结第一天的工作,其实还是有些问题的,首先binutils是用原有的gcc-4.1.2编译的,而我们的目标是使用gcc-4.3.3的版本,因此后面还需要重新用gcc-4.3.3编译binutils,因此我想对此作出一些改进,完全删除并再次建立干净的tools目录,重新按第一天的方式设置工作环境, 这时sources目录有我们第一天得到的source包,按如下顺序解压。

此外由于binutils的bug,在link glibc的时候会出现collect2: ld returned 1的错误,重新下载binutils的新版本和patch.

cd $LFS/sources
wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2 
#解压gcc
tar xvf gcc-4.3.3.tar.bz2
# 将binutils解压GCC的源码目录中
tar xvf binutils-2.19.tar.bz2 --strip-components=1 -C gcc-4.3.3
#解压gmp
tar xvf gmp-4.2.4.tar.bz2
#将所有源码移到gcc-4.3.3的gmp目录下
mv gm-4.2.4 gcc-4.3.3/gmp
#解压mpfr
tar xvf mpfr-2.3.2.tar.bz2
#将所有源码移到gcc-4.3.3的mpfr目录下
mv mpfr-2.3.2 gcc-4.3.3/mpfr
mkdir gcc-build
cd gcc-build
#如此编译,可以和gcc一起做bootstrap, 我们只编译C语言来缩短时间
CFLAGS="-O2 -march=i686" CC="gcc -B/usr/bin" ../gcc-4.3.3/configure --prefix=/tools --disable-nls --disable-multilib --disable-werror --enable-languages=c -build=i686-pc-linux-pc
make bootstrap
make install
cp -v ld/ld-new /tools/bin  
rm -rf gcc-build
rm -rf gcc-4.3.3


编译完毕后可以使用"make check"运行测试套件。这个测试套件依赖于DejaGnu软件包,而DejaGnu又依赖于expect,expect依赖于tcl。

如果只想编译 ld 可以使用"make all-ld",如果只想编译 as 可以使用"make all-gas"。类似的还有 clean-ld clean-as distclean-ld distclean-as check-ld check-as 等。

这种方法比第一天的方法好得多,因为第一天的方法在后面的glibc编译时候会出现can not computer sizeof的错误,去掉 --with-binutils=/tools/bin才可通过,怀疑是ld未经过make bootstrap的缘故。


如果一切顺利的话,我们现在得到了最新版的GCC 4.3.3, 接下来,我们需要将linux的头文件倒入include目录中,以便后面的编译工作,这个应该很容易。

〔code]
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.7.tar.bz2
tar xvf /lfs-sources/linux-2.6.28.7.tar.bz2
cd linux-2.6.28.7
make mrproper
make headers_check
make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /tools/include
cd ..
rm -rf linux-2.6.28.7


然后开始glibc的编译工作.
你必须设定march这个参数才行,要不然会出现“undefined reference to `__sync_bool_compare_and_swap_4′.”这个错误
Core 2 Duo,
GCC 4.2,CFLAGS 添加 -march=nocona -mtune=generic。

如果是GCC 4.1,Core Solo/Duo使用-march=prescott;
Core 2 Duo/Solo则使用-march=nocona。
i686等类似设置,例如CFLAGS=”-O2 -march=i686″
-----------------
看到在build ncsd目录时也有错误
如果还有undefined reference to `__stack_chk_guard’ 这个错误的话,你需要手工编辑Makefile,找到这一行:
LDLIBS-nscd = $(selinux-LIBS)
添加 -lssp 即
LDLIBS-nscd = $(selinux-LIBS) -lssp

wget http://sources.redhat.com/pub/glibc/snapshots/glibc-2.9-20090308.tar.bz2
tar xvf glibc-2.9-20090308.tar.bz2
cd glibc-2.9-20090308
mkdir -v ../glibc-build
cd ../glibc-build
CFLAGS="-O2 -march=i686" CC="gcc -B/tools/bin" ../glibc-2.9-20090308/configure --prefix=/tools \
--disable-profile --enable-add-ons=nptl \
--enable-kernel=2.6.28 --with-binutils=/tools/bin \
--without-gd --with-headers=/tools/include \
--without-selinux --build=i686-pc-linux-gnu --disable-multilib
make
mkdir -v /tools/etc
touch /tools/etc/ld.so.conf
make install
cd ..
rm -rf glibc-build
rm -rf glibc-glibc-2.9-20090308



有一些麻烦问题需要处理,要不然,这个新的gcc环境还是对你
现在运行的系统有关系,因为gcc的fixincludes脚本在创建gcc的过程中,由于某些原因把你系
统里的头文件复制给这个新的gcc环境中去了。这就是好心办坏事,不过不用担心,是有办法挽
救的。执行下面的命令会将fixincludes产生的影响处理掉,当然,如果fixincludes没有帮倒
忙,下面的命令也不会作坏事,破坏这个新生的gcc环境:
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    LFS_Linux.rar_LFS_LFS LINUX_LFS Linux downlaod_LFS lin_lfs linu

    标题中的“LFS_Linux.rar_LFS_LFS LINUX_LFS Linux downlaod_LFS lin_lfs linu”暗示了这是一个关于LFS项目,特别是与下载和构建Linux相关的资源包。这可能是包含LFS指南、源代码和其他相关工具的压缩文件。 描述中...

    linux LFS 学习

    ### Linux From Scratch (LFS) 学习指南 #### 引言 对于初学者而言,探索Linux世界的途径众多,但若寻求深入理解Linux系统内部运作的精髓,**Linux From Scratch (LFS)**无疑是一条充满挑战与收获的道路。LFS项目...

    git-lfs-linux-arm64-v2.12.0.tar.gz

    1. **安装**:在Linux ARM64系统上,用户可以解压`git-lfs-linux-arm64-v2.12.0.tar.gz`,然后执行`install.sh`脚本来安装Git LFS。 2. **配置**:在Git仓库中,需要配置LFS来跟踪大文件。这通常涉及在`....

    LFS中文手册

    LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式。它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( raw code) 作成符合自己口味的菜肴──个性化...

    手把手教你如何建立自己的Linux系统 第二版(LFS速成手册).pdf

    《手把手教你如何建立自己的Linux系统 第二版(LFS速成手册)》是一本针对Linux From Scratch(LFS)项目的学习指南,旨在帮助读者深入理解Linux操作系统的工作原理,并通过亲手构建系统来提升技术水平。LFS项目允许...

    Linux-lfs.rar_LFS_linux

    Linux LFS,全称为Linux From Scratch,是一种独特的学习和构建自己Linux系统的方法。这个项目提供了一套详细的步骤,让有经验的Linux用户能够从源代码开始编译和安装最基本的Linux系统组件,从而创建一个符合个人...

    LFS速成手册(第二版)

    ### LFS速成手册(第二版)知识点概览 #### 1. LFS项目简介 - **LFS**(Linux From Scratch)是一个教育项目,旨在教授用户如何从零开始构建一个完整的Linux操作系统。通过手动编译和配置所有的软件包,用户能够...

    LFS中文版(Linux From Scratch)

    《Linux From Scratch》(LFS)是一本详细指导读者如何从源代码构建Linux系统的书籍。书中提供了完整的步骤和说明,让读者可以一步一步地创建属于自己的定制版Linux系统。本书不仅适合那些希望了解Linux操作系统内部...

    linux LFS搭建详细文档

    【Linux LFS搭建详解】 Linux From Scratch(LFS)是一个指南,它教你如何从源代码构建自己的Linux系统。这个过程不仅有助于理解Linux操作系统的工作原理,还可以根据个人需求定制系统。以下是对LFS搭建过程的详细...

    Linux 入门 LFS制作

    ### Linux入门:LFS制作详解 #### 知识点一:Linux From Scratch (LFS) 概念 - **定义**:Linux From Scratch (LFS) 是一个项目,旨在教授用户如何从零开始构建自己的 Linux 系统。通过手动安装和配置每一个组件,...

    LFS详细搭建指南——适合初学者使用_打造自己搭建指南Linux_linux下搭建lfs_lfs搭建_

    Linux From Scratch(LFS)是一本开源的在线书籍,它为想要深入了解Linux内核和操作系统构建过程的用户提供了一套详细的步骤。LFS项目允许用户按照手册的指导,从源代码开始构建自己的Linux发行版,从而学习Linux...

    中文版Linux From Scratch (LFS)指导手册7.7(systemd)

    在LFS的构建过程中,所有编译步骤均分为“第一遍”和“第二遍”。第一遍的目的是建立一个基础的工具链,以便在第二遍中能够使用这个工具链来编译最终的系统软件。 LFS系统的基本配置包括网络配置、设备和模块控制、...

    Git LFS是用于使用Git管理大型文件的命令行扩展和规范 这是3.3.0的Linux ARM 64位安装包

    Git本身设计时主要关注文本文件的版本控制,对于较大的二进制文件,如图片、视频或大型软件编译文件,管理起来可能会变得效率低下,因为这些文件的每一次修改都会导致整个文件被重新存储。Git LFS通过提供一种标准的...

    git-lfs-linux-amd64-v2.12.0.tar.gz

    Git LFS允许开发人员将大型文件(如图像、视频或二进制文件)从Git仓库的主要存储中分离出来,以提高效率和减少存储需求。它通过将大文件替换为指向存储在远程服务器上的文件的小文本指针来实现这一目标。 标题中的...

    LFS 6.4中文文档(LINUX FOR SCRATCH)

    《LFS 6.4中文文档(LINUX FOR SCRATCH)》是一份详尽的指南,旨在教导读者如何从源代码构建自己的Linux操作系统。LFS,全称Linux From Scratch,是一个项目,它提供了详细的步骤,让熟悉Linux内核和基本操作系统...

    git-lfs-linux-arm64-v2.13.2.tar.gz

    Git LFS 2.13.2 版本是针对Linux 64位系统的,这意味着它可以在运行64位Linux操作系统的机器上安装和使用。这个版本可能包含了性能优化、新功能以及对之前版本的错误修复。 在压缩包`git-lfs-linux-arm64-v2.13.2....

    LFS构建Linux操作系统原理分析

    ### LFS构建Linux操作系统原理分析 #### 一、LFS的概念与特点 LFS(Linux From Scratch)是一种从源代码构建Linux系统的方法。不同于传统的Linux发行版安装方式,LFS提供了一个详细的指南,指导用户从零开始搭建一...

    LFS半自动脚本

    Linux From Scratch(LFS)是一个在线项目,旨在指导用户如何从源代码构建自己的GNU/Linux操作系统。这个项目提供了详细的步骤,让爱好者和开发者了解Linux内核和系统工具的构建过程,以此提升对系统的理解和控制。...

    LFS速成手册(第二版).doc

    总的来说,LFS速成手册(第二版)是一个详尽的指南,帮助用户从零开始构建自己的Linux系统,通过实践提高Linux理解和操作技能,同时提供了一种学习和理解操作系统内核构造的途径。通过遵循手册中的步骤,用户不仅...

Global site tag (gtag.js) - Google Analytics