在bootmain.c里面可以看到
#define ELFHDR ((struct elfhdr *)0x10000)
这里用的是结构体指针强转的方式定义了一个0x10000的地址作为elf文件在内存中的入口地址
而观察tools/kernel.ld文件,开头有这么几句话:
ENTRY(kern_init)
SECTIONS {
/* Load the kernel at this address: "." means the current address */
. = 0x100000;
这里的意思不是说默认了kern_init从内存的0x100000开始嘛?与bootmain复制的0x10000不一致
请问我这里理解哪里有问题
我观察了试验一的答案程序,仍然是复制到0x10000这个地址去,如果改成0x100000反而会出现死机报错的现象,因为初次接触makefile或许还有我没注意的地方,麻烦高手解答一下为什么复制到0x10000地址
此外还有一个问题:
readseg函数中有这么一句:
va -= offset % SECTSIZE;
这句程序为什么要用减法来对齐sector地址,这样的话如果offset不是整512字节调用的话就会执行减法,除非指定的va能相对配合,且需要的字节不在硬盘sector头部,虽然整段程序实际上保证了没用到这个计算,读取的都是整段的sector,那么这句话很奇怪的写在这里,还占用了引导扇区的宝贵字节,到底是为了什么呢?