《linux 內核全然剖析》編譯linux 0.12 內核 Ubuntu 64bits 環境
我×。。
。
最終好了,大概3 4個小時吧。。。各種毛刺問題。終究還是闖過來了。。
。。
[email protected]:~/Downloads/linux-0.00-050613/linux-0.00$ make
ld -s -x -M head.o -o system > System.mapdd 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 環境