0


头歌操作系统实验参考答案(步骤)实验一

实验 1:ChCore操作系统-机器启动

第一关

1.创建一个终端,进入文件

2.输入make build

3.输入script /data/workspace/myshixun/history1.log

4.输入make qemu-gdb

5.开终端2,输入make build

6.输入where

7.按键盘ctrl+d退出

8.exit

9.终端1ctrl+a

10.输入x

11.exit

第2关:内核的引导与加载

实验步骤

把 _start 函数和 0x80000 关联的语句则在 CMakeLists.txt 中

编译时使用以下命令

-T 指定链接器脚本

-e 指定入口函数

set_property(

TARGET kernel.img

APPEND_STRING

PROPERTY

    LINK_FLAGS

    "-T ${CMAKE_CURRENT_BINARY_DIR}/${link_script} -e _start"

)

练习4

Sections:

Idx Name Size VMA LMA

0 init 0000b5b0 0000000000080000 0000000000080000

1 .text 000011dc ffffff000008c000 000000000008c000

2 .rodata 000000f8 ffffff0000090000 0000000000090000

3 .bss 00008000 ffffff0000090100 0000000000090100

4 .comment 00000032 0000000000000000 0000000000000000

.init段执行时,MMU还没有启动,没有虚拟地址,因此LMA和VMA相同。而其他段则是kernel代码,操作系统kernel一般运行在虚拟地址的高位,但一开始bootloader运行时处于实模式,无法访问0xffffff0000000000以上的内存区域,因此将代码装载入此时的LMA。当进入保护模式后,再将对应的内核代码映射到高地址段,即VMA,再运行。

第3关:内核态基础功能:内核态输入输出

对输入的数字进行进制转换

//进制转换
    s = print_buf + PRINT_BUF_LEN;
    *s = '\0';
    while(u>0)
    {
        s--;
        t=u%base;
        if(t<=9)
            *s=t+'0';
        else
        {
            if(letbase)
                *s = t-10+'a';
            else
                *s = t-10+'A';
        }
        u/=base;
    }

第4关:内核态基础功能:函数回溯

7

先看下 stack_test 的源码

Copy

// Test the stack backtrace function (lab 1 only)

__attribute__ ((optimize("O1")))

void stack_test(long x)

{

       kinfo("entering stack_test %d\n", x);

       if (x > 0)

              stack_test(x - 1);

       else

              stack_backtrace();

       kinfo("leaving stack_test %d\n", x);

}

8 }


本文转载自: https://blog.csdn.net/weixin_61712235/article/details/129104304
版权归原作者 白灵, 所有, 如有侵权,请联系我们删除。

“头歌操作系统实验参考答案(步骤)实验一”的评论:

还没有评论