1. 程式人生 > >《linux 內核全然剖析》編譯linux 0.12 內核 Ubuntu 64bits 環境

《linux 內核全然剖析》編譯linux 0.12 內核 Ubuntu 64bits 環境

not with 希望 head ima load zip ont 內核

我×。。

最終好了,大概3 4個小時吧。。。各種毛刺問題。終究還是闖過來了。。

。。

[email protected]:~/Downloads/linux-0.00-050613/linux-0.00$ make

ld -s -x -M head.o -o system > System.map
dd bs=32 if=boot of=Image skip=1
16+0 records in
16+0 records out
512 bytes (512 B) copied, 0.000605945 s, 845 kB/s
dd bs=512 if=system of=Image skip=2 seek=1
14+1 records in
14+1 records out
7632 bytes (7.6 kB) copied, 0.000221138 s, 34.5 MB/s

sync


去這裏下載 linux -0.00-041217.zip或者050613的zip都行

http://oldlinux.org/Linux.old/bochs/


不算最痛苦的。遇到非常多問題。還好有前人幫忙,希望我的blog也能幫到別人。

編譯過程中遇到的非常多問題。以下的up都有遇到,並給出的具體解答。。。。好人啊。。

。致敬

http://chfj007.blog.163.com/blog/static/173145044201132523034138/


head.s:148: Error: invalid instruction suffix for `pop‘ head.s:149: Error: operand type mismatch

會出現上面這樣的非常多suffix前綴不對的指令錯誤提示。解決這個問題的辦法非常easy。也就是32位匯編在64位的機子上跑要解決的問題

在相相應的匯編代碼的開頭加個

.code32

OK



相同。會遇到

head.s:105: Warning: using `%ebx‘ instead of `%bx‘ due to `l‘ suffix

這個把對應的bx寄存器改成ebx就OK

head.s:248: Error: `%al‘ not allowed with `movl‘
head.s:257: Error: `%al‘ not allowed with `movl‘
這個把movl改成movb。這裏應該是一個錯誤。而不是一個平臺差異照成的

由於我認為al是8bit的movl是16bit的。即使在32位平臺上也是不正確的


Over。 還是非常舒坦的。。。平安無事的編譯成功了






技術分享

時間就這樣慢慢的流淌,當我們還是流動的長河,當我們變成靜靜的湖泊


《linux 內核全然剖析》編譯linux 0.12 內核 Ubuntu 64bits 環境