歡迎您光臨本站 註冊首頁

完成LFS 6.2.3的一點經驗和教訓

←手機掃碼閱讀     火星人 @ 2014-03-23 , reply:0

經過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的成功率以及部分問題的解決方法中提及的 ' { 注意這個是單引號,就是enter鍵旁邊的那個} 和 ` "注意這個是Esc下面的那個和~一起的鍵"。注意看第一次的調整語句
QUOTE:
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則是"'",是單引號。(引自上文)估計第一次的問題就是出在這裡。
提到可以用$(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做準備的時候,
QUOTE:
make -C ld clean
make -C ld LIB_PATH=/tools/lib

6.2.3 則是,
QUOTE:
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 是
QUOTE:
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 修改的問題,不知道大家有沒有注意到
QUOTE:
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.

[火星人 ] 完成LFS 6.2.3的一點經驗和教訓已經有651次圍觀

http://coctec.com/docs/linux/show-post-130432.html