LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1028|回复: 2

完成LFS 6.2.3的一点经验和教训

[复制链接]
发表于 2006-12-26 17:09:22 | 显示全部楼层 |阅读模式
经过2天2夜不懈的努力,经过2次失败后,终于在一个不眠之夜后。成功将lfs6.2.3
做好了.。(Vmvware 5.5.3 build 34685 下)

今天清晨做到7点,做完实在太累。蒙头就睡,刚醒过来。乘记忆犹新,赶紧写点回忆,权作印记

1 前两次失败的教训和经验

总共前后做了3次LFS,前两次是根据LFS6.11 Book 作的,每次均在chap06 再次重新编译glib2.3.4

出错,无法通过合理性验证,第一次的出错原因回忆如下

验证时无法顺利的编译dummy.c ,提示:ld-linux.so.2 needed by ld-linux.so.6 can't find. (可能有点出入,有点忘记了)

目前分析,可能是在调整gcc 的spec 时候出错或者是chap5调整工具链的时候出的问题。

LFSbook上第一次调整工具是在chap05,gcc2.3.4第二次编译前,目的是把gcc的库脱离宿主系统的影响,完成

自满足的工具链,书上推荐的是直接copy and paste 调整工具链的语句。由于是在VMvware5.0 下安装的,不知道

如何copy and paste,所以只能硬着头皮一字字的从书上和手册上打上去,一开始没有看到这篇  
[原创]如何提高LFS的成功率以及部分问题的解决方法中 http://blog.chinaunix.net/u/13265/showart.php?id=100756
提及的 ' { 注意这个是单引号,就是enter键旁边的那个}

和 ` "注意这个是Esc下面的那个和~一起的键"。注意看第一次的调整语句

SPECFILE=`gcc --print-file specs` &&
  sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
   $SPECFILE > tempspecfile &&
  mv -f tempspecfile $SPECFILE &&
  unset SPECFILE

SPECFILE=`gcc --print-file specs`使用的是"`",也就是键盘上"1"左边的那个键,千万别打错了!而sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' $SPECFILE > tempspecfile则是"'",是单引号。(引自上文)估计第一次的问题就是出在这里。
[原创]手把手教你如何建立自己的Linux系统(LFS速成手册)http://blog.chinaunix.net/u/13265/showart.php?id=78452
提到可以用$(gcc --print-file specs) 来替换上述的'gcc .... ' 这个方法可以使有些麻烦少一点

第一次编译失败后,到处google 相关的信息。不得头脑,没办法,只能重新来过于是再次开始LFS,这次把"速成手册"和"解决办法"和

官方手册仔细的看过后,再次开始,每打一个命令都仔细的校对,但是问题依然出现了。再次是在chap6 glibc2.3.4 编译后,调整工具链后

合理性验证。这次的出错信息是 libc.so.6 can not find ,依然无法编译dummy.c ,google 了一下,提示glibc 没有正确安装,晕哪,当时编译完glibc 还特地

check 过。怎么又有问题,回头,重新编译glibc. 这次留心了一下。居然发现./configure 的时候就有出错信息。 error: cannot compute sizeof (long double), 77 ,啊啊啊啊,怎么回事的说,于是再次google,没有头绪,没办法再次重装。。。(汗哪。。),事后分析,问题可能是因为binutil太旧了 了,编译的时候不太顺利导致的,因为第三次,一怒之下,按LFS6.2.3 的写,用了新的gcc ,binutil ,glibc 编译后问题就没有了,所以我觉得如果大家在做LFS编译glibc出问题的时候。不妨回头去看看bintutil 的编译,是不是当时就出了问题,因为LFS6.1.1 没有要求对binutil 做check,而有时候问题恰恰出在这里。6.2 的时候改进了binutil 的版本并强烈要求做check在继续。

2 编译LFS6.2.3 的一点体会

不敢说经验,只是觉得6.2.3 比6.1.1 进步了不少,有几个地方提一下,和6.1.1 不一样的地方,6.1.1 在编译的时候强调在binutil pass 1 && pass 2 的时候都不要删掉binutil 的编译目录,6.2.3 就不一样,是可以删掉的,刚开始没注意,后来发现6.2 改动了一下。原来6.1.1 在binutil 编译最后为调整ld做准备的时候,

make -C ld clean
make -C ld LIB_PATH=/tools/lib

6.2.3 则是,

make -C ld clean
make -C ld LIB_PATH=/tools/lib
cp -v ld/ld-new /tools/bin

可以编译后放心的删去binutils 和build 的目录,因为后面没有用到的地方。

还有就是gcc4.0.3 的调整spec 和调整工具链的方法都和gcc3.0.3 有不同。注意6.2 的调整spec 是

SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
gcc -dumpspecs > $SPECFILE &&
sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
mv -vf tempspecfile $SPECFILE &&
unset SPECFILE

可以看到它是重新生成了specs 后在进行调整,和gcc.3.0.3 的修改不同。个人感觉出错的问题小一点(纯粹推断)

最后一个个人碰到的问题是最后做完grub 重启的时候出错了。检查发现是etc/fstab 修改的问题,不知道大家有没有注意到

cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system  mount-point  type   options         dump  fsck
#                                                        order

/dev/sda2     /            xfs  defaults        1     1
/dev/sda1     swap         swap   pri=1           0     0
proc           /proc        proc   defaults        0     0
sysfs          /sys         sysfs  defaults        0     0
devpts         /dev/pts     devpts gid=4,mode=620  0     0
shm            /dev/shm     tmpfs  defaults        0     0
# End /etc/fstab
EOF
这个是youbest 给出的例子,注意这里的options 是 "defaults " 不是 "default"我一个想当然,结果导致启动的时候无法挂载分区出错

这里用的是scsi硬盘的,所以是/dev/sda1,sda2 如果你的是ide硬盘,注意调整为/dev/hda 之类的。




就是这么多了。下一步准备继续研究下后面几章关于设备加载,启动脚本的问题,最晚做到后来太累了。急冲冲的做,没有仔细

分析,另外嘛,move on to BLFS.呵呵

最后,助大家都做好自己的LFS.
发表于 2006-12-28 14:09:39 | 显示全部楼层
[原创]如何提高LFS的成功率以及部分问题的解决方法中 http://blog.chinaunix.net/u/13265/showart.php?id=100756
提及的 ' { 注意这个是单引号,就是enter键旁边的那个}

和 ` "注意这个是Esc下面的那个和~一起的键"。

这个是深有体会,呵呵

还有就是gcc4.0.3 的调整spec 和调整工具链的方法都和gcc3.0.3 有不同。注意6.2 的调整spec 是

SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
gcc -dumpspecs > $SPECFILE &&
sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
mv -vf tempspecfile $SPECFILE &&
unset SPECFILE

可以看到它是重新生成了specs 后在进行调整,和gcc.3.0.3 的修改不同。个人感觉出错的问题小一点(纯粹推断)

要修改gcc的specs最简单的方法就是手工来修改
使用 gcc -print-libgcc-file-name 命名察看目录,然后直接修改specs
回复 支持 反对

使用道具 举报

发表于 2006-12-28 14:09:55 | 显示全部楼层
多贴了一次,不知道怎么删除。sry~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表