learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    关于lab1 bootmain ELFHDR的一些疑问 以及readseg函数的一个问题
    匿名2023/07/31 19:52:24提问
      lab1student
    440

    在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,那么这句话很奇怪的写在这里,还占用了引导扇区的宝贵字节,到底是为了什么呢?

    回答(0)
    即可发布评论
      推荐问答
        Simple Empty
        暂无数据