head.s

原创 2012年03月26日 03:07:34
  • stack_start,定义在kernel/sched.c中。使用lss指令加载,所以stack_start为一个结构体,低字节为long*,高位为short。实际48位长地址为0x10:user_stack。user_stack为sched.c中定义的数组。
  • 设置idt,256个描述符都指向ignore_int中断例程,显示一句消息,中断门描述符,包含48位长指针
  • 设置gdt,与setup中的基本一样,段长变为16M。
    • 代码段描述符。特权值0,存在,可读非一致性代码段,段长度(段限长+1)16M,颗粒度G=1(4kb),D=1(32位地址,32位或8位数据)
    • 数据段描述符。特权值0,存在,非下扩段,可读可写,未访问,B=1使用32位esp,G=1(4kb),段长度(16M)
    重新加载gdt后,应该将各个寄存器重新赋值,以刷新影子寄存器的内容。0.12中没有使用jmp指令刷新CS段寄存器,谨记,修改gdt表后要重新加载相关寄存器
  • 测试A20地址线是否打开。比较0x000000与0x100000的内容,若果相等,[0x000000]的内容增加1,再循环比较。若果无法寻址则陷入死循环。
  • 设置页目录表及对应的页表,设置cr0让cpu进入分页机制。页目录表位于0x00000000;紧接着是4个页表,分别存在于0x00001000,0x00002000,0x00003000,0x00004000。页目录,页表的属性一样:可供任意特权级访问(U/S=1),可读,可写或可执行(R/W=1),存在(P=1)。在为页表建立映射时,使用了一个技巧,从16M-4k开始建立,这样可以根据每次减去1024,判断目的地址是否大于等于0,大于等于0则继续。充分利用标志寄存器的值,注意0标志的作用,而不需像递增时那样再与16M比较。根据已有的条件作判断,不要再做无用功。
  • 进入main()函数。通过push传递main的参数,包括main的地址。在after_page_tabes后,ret进入main。在main地址之前压了,envp,arvp指针和argc的值,还有一个当main()以外返回时的返回地址,让其死循环。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux 0.12之head.s跳转到main.c的说明

因为只有引导代码中使用了as86的编译器,linux0.12其他汇编都是基于GNU as汇编的,这是背景。 head.s是在gnu as下编译的,使用的是AT&T汇编模式。主要完成一些GDT的初始化...

linux-boot-arch_x86_kernel_head_32.S

/* * * Copyright (C) 1991, 1992 Linus Torvalds * * Enhanced CPU detection and feature setting...

一站式linux0.11内核head.s代码段图表详解

一站式详解linux0.11内核head.s代码,适合初学linux0.11内核的人群观看,全文描述以第一人称,更能让你系统学习linux内核的编制过程。

head.S of arch

arch目录下2410中的head.S.     首先include了三个头文件:config.h,linkage.h,machine.h.      其中config.h内容是调用autoco...

ARM架构内核启动分析-head.S(1.1、vmlinux.lds 链接脚本分析)

ARM架构内核启动分析 一、start kernel之前 首先需要明确的是,内核镜像在被解压之后执行,是执行哪段代码,这是个重要的问题,平时在编译生成应用程序或内核模块时,我们无需考虑链接的具体细节,...

kernel 启动过程之一, uimge, zimage,arch/arm/boot/compressed/head.S

分类: kernel 2009-06-11 17:24 3155人阅读 评论(3) 收藏 举报 这几天因为工作原因,升级 2.6.22.7 的kernel 到 Mavell 的...

kernel 启动过程之一, uimge, zimage,arch/arm/boot/compressed/head.S

这几天因为工作原因,升级 2.6.22.7 的kernel 到 Mavell 的arm 板子上去,遇到一些头疼的问题, 不得不分析启动代码, 郁闷阿。 zImage是ARM Linux常用的一种压...

linux0.11-head.s

2014-12-18:18:30-21:00 # 这段程序实际上是出于内存的绝对地址0开始处。首先是加载各个数据段寄存器。 # 重新设置全局描述符表gdt --> 检测a20地址线是否真的...

linux/arch/arm/kernel/head.S

/* * linux/arch/arm/kernel/head.S * * Copyright (C) 1994-2002 Russell King * Copyright (c) 2003 A...

S动态添加与删除select中的Option对象 2009年09月23日 15:26 <html> <head> <meta http-equiv="Content-Type" content="t

S动态添加与删除select中的Option对象 2009年09月23日 15:26 JS动态添加删除option //动态删除select中的所有options: fun...
  • A_post
  • A_post
  • 2011-11-06 16:59
  • 1395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)