linux LFS 編譯成功記錄

regonly1發表於2008-06-28


安裝成功時間:
2008-6-27 23:50

心得體會
此次安裝比上次熟練多了,而且也仔細多了,所以問題也少了;
但是有一點就是在最後編譯核心的時候心太急了,急於將系統搞好,然後就可以正式玩了。
在menuconfig步驟忽略了一個重要的內容,就是沒有將虛擬機器的buslogic編譯進去,導致
最後啟動的時候出現kernel panic的錯誤。
只要重新返回到宿主系統,重新編譯核心,將buslogic部分也編譯進去。
在重新編譯核心的時候也遇到了不少的問題,先總結如下:


由於第一次編譯核心沒有將buslogic編譯進核心,導致lfs
在啟動的時候不能啟動,錯誤資訊如下:
VFS:Cannot open root device “sda1″ or unknow-block(0,0)
Please append a correct “root=” boot option
kernel panic-not syncing: VFS:Unable to mount root fs on unknow-block(0,0)

於是再次進入liveCD,想重新編譯核心,將buslogic編譯進去
在make mrproper
make menuconfig後
再make時出現如下錯誤:
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `set -e; echo ' CHK include/linux/version.h';
mkdir -p include/linux/; if [ `echo -n "2.6.16.27 .file null .ident GCC:(GNU)4.0.3 .
section .note.GNU-stack,,@progbitsy" | wc -c ` -gt 64 ]; then echo '"2.6.16.27 .
file null .ident GCC:(GNU)4.0.3 .section .note.GNU-stack,,@progbitsy" exceeds
64 characters' >&2; exit 1; fi; (echo \#define UTS_RELEASE \"2.6.16.27 .file null .
ident GCC:(GNU)4.0.3 .section .note.GNU-stack,,@progbitsy\"; echo \#define
LINUX_VERSION_CODE `expr 2 \\* 65536 + 6 \\* 256 + 16`; echo '#define
KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; ) <
/sources/linux-2.6.16.27/Makefile > include/linux/version.h.tmp;
if [ -r include/linux/version.h ] && cmp -s include/linux/version.h
include/linux/version.h.tmp; then rm -f include/linux/version.h.tmp;
else echo ' UPD include/linux/version.h'; mv -f include/linux/version.h.tmp include/linux/version.h; fi'
make: *** [include/linux/version.h] Error 2

這個錯誤在我上次編譯核心的時候就出現了,是在搞不懂為什麼會出現這樣的問題
google了下,說是其實version.h是在make menuconfig後生成的,但是我也執行了
menuconfig了啊,怎麼就不能生成呢?
google找了好半天,所有中文網站都是隻有提問題的,而沒有解決問題的。
最後還是找英文網站,最後總算讓我找到一線曙光,有人對於這個錯誤有如下解釋:

You are hit be an outstanding issue with -rc1 + rc2.
When you build as root you will alter /dev/null and in your case it
became a regular file.

Recreate /dev/null and build as normal user for now.
You can apply patch below to fix it - will be in next -rc.

大意是當第一次build核心的時候,會將/dev/null檔案修改為普通的問題(原來是裝置檔案)
用ls -lrt /dev/null檢視一下,可以看到正常的/dev/null的檔案型別:
crw-rw-rw- 1 root root 1, 3 2008-06-28 01:00 /dev/null
在核心編譯後,會變成:
-rw-rw-rw- 1 root root 1, 3 2008-06-28 01:00 /dev/null
注意上述兩行的第一個字元,由原來的c字元變成-字元,也就是有裝置檔案變成了普通檔案
只要重新建一下這個節點即可:
mknod -m 666 /dev/null c 1 3
然後再:
make
make modules_install
cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.11.12
cp -v System.map /boot/System.map-2.6.11.12
cp -v .config /boot/config-2.6.11.12


需要載入臨時檔案系統到/dev目錄下,並建立目標系統所必須的裝置檔案
程式碼:
mount -nvt tmpfs none /dev
mknod -m 622 /dev/console c 5 1
mknod -m 666 /dev/null c 1 3
mknod -m 666 /dev/zero c 1 5
mknod -m 666 /dev/ptmx c 5 2
mknod -m 666 /dev/tty c 5 0
mknod -m 444 /dev/random c 1 8
mknod -m 444 /dev/urandom c 1 9
chown -v root:tty /dev/{console,ptmx,tty}

最後有一點不完美的地方就是直接用該虛擬機器起不來,我新建了個虛擬機器,新建虛擬機器的硬碟型別
我選為buslogic了。然後透過掛載原虛擬機器的虛擬磁碟來實現磁碟型別的轉換,啟動,OK,進入登入介面。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-366171/,如需轉載,請註明出處,否則將追究法律責任。

相關文章