《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前缀不对的指令错误提示。解决这个问题的办法非常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。  还是非常舒坦的。。。平安无事的编译成功了






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


原文地址:https://www.cnblogs.com/gccbuaa/p/7008129.html