日期:2014-05-16  浏览次数:20941 次

《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境

我×。。。终于好了,大概3 4个小时吧。。。各种毛刺问题。终究还是闯过来了。。。。

ubuntu2@ubuntu:~/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前缀不正确的指令错误提示。解决问题的办法很简单,也就是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。  还是很舒坦的。。。平安无事的编译成功了






时间就这样慢慢的流淌,当我们还是流动的长河,当我们变成静静的湖泊