内核源代码分析(3)

    技术2022-05-11  111

    head.s分析 //head.s采用的是AT&T的汇编格式 //使用GNU的gas和gld编译连接 //位置:物理地址0 //功能:1、加载各个数据段寄存器,设置256项中断描述符表idt,并使各个表项都指向错误的哑中断。 2、设置全局中断向量表gdt 3、比较物理地址0和1MB的内容比较判断是否开启了A20的地址线,没开启就进入死循环。 4、检查是否有协处理器,设置控制寄存器CR0。 5、开始设置内存的页处理机制,页目录表(4K)放在物理地址0开始的地方,4个页表放在后面的16k地址,共可以寻址16m空间。 6、利用返回指令将预先设置的init/main.c的入口地址弹出。 下面是详细的分析过程 /*  *  linux/boot/head.s  *  *  (C) 1991  Linus Torvalds  */ /*  *  head.s contains the 32-bit startup code.  *  * NOTE!!! Startup happens at absolute address 0x00000000, which is also where  * the page directory will exist. The startup code will be overwritten by  * the page directory.  */ .text .globl _idt,_gdt,_pg_dir,_tmp_floppy_area _pg_dir:        //页目录表的地址0x0000 startup_32:     movl $0x10,
    转载请注明原文地址: https://ibbs.8miu.com/read-2831.html

    最新回复(0)