
Linux 内核原理
文章平均质量分 79
clbiao
静以修身,俭以养德。淡泊明志,宁静致远。
展开
-
内核启动:阶段三
内核启动阶段三: 主要任务一览: (1)创建第一个内核线程kernel_init (2)初始化设备驱动 (3)挂接根文件系统 (4)执行应用程序 在init/main.c中定义了下面几个主要函数: /* * We need to finalize in a non-__init function or else race conditions * between the原创 2014-10-25 15:08:43 · 732 阅读 · 0 评论 -
u-boot-->kernel程序流程一览
uboot启动: cpu/arm920t/start.S开始 reset //set svc mode & turn off the watchdog & mask all interrupt ... cpu_init_crit //禁止Icache,汇编代码 lowlevel_init //初始化SDRAM stack_setup//设置svc模式栈 clock_init//初始原创 2014-10-25 15:26:45 · 684 阅读 · 0 评论 -
内核启动:阶段二
内核阶段二的任务主要落在start_kernel()函数,它是是内核通用的初始化函数,主要用来完成硬件平台相关的初始化工作,定义于init/main.c。 任务一览: (1)解析uboot传进来的参数 (2) asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_pa原创 2014-10-24 21:13:34 · 609 阅读 · 0 评论 -
内核启动:阶段一
执行完内核自解压程序之后继续下面的任务: 在arch\arm\kernel\head.S文件任务: 处理uboot传入的参数:(机器ID、启动参数) 阶段一: 1.判断是否支持这个cpu:读取cup ID 2.判断是否支持这个单板:启动内核时传入的机器ID 3.建立页表 4.使能MMU 阶段二: 5.跳到start_kernel()第一个c函数(传入:启动参数) (1)挂接原创 2014-10-24 08:08:00 · 712 阅读 · 0 评论 -
内核临时页表
建立临时页表:内核启动前期 主要完成的映射关系: 1.将虚拟地址空间按照“1:1”对等映射到内核映像的第一个1M处 作用:在启动MMU之前只能使用实地址模式运行 2.将整个内核地址空间直接映射区的代码那部分映射到SDRAM上 3.将内核地址空间的开始的1M映射到SDRAM开始的第一个1M空间,因为那里存放了内核启动参数 (看附图:内核临时页表.png) 第一段注释: 临时页表采原创 2014-11-24 17:55:30 · 1257 阅读 · 0 评论 -
详解Linux内核异常处理体系结构
本节内容:Linux内核异常处理的的初始化过程和异常发生时的处理流程。 【首先来区分一下两个概念:中断(Interrupt)和异常(Exception)。中断属于异常的一种,就拿2440开发板来说,他有60多种中断源,例如来自DMA控制器、UART、IIC和外部中断等。2440有一个专门的中断控制器来处理这些中断,中断控制器在接收到这些中断信号之后就需要ARM920T进入IRQ或FIQ模式进行处原创 2015-03-17 22:00:50 · 2941 阅读 · 0 评论 -
Linux内核中断处理体系分析
前一篇博文中:linux内核初始化阶段通过early_trap_init()函数完成了把异常向量拷贝到0xFFFF0000开始的地方,这些异常向量大部分指向通过vector_stub宏定义的那段代码,这段代码完成的主要工作是计算异常返回地址、保存现场、切换到svc模式、跳转执行汇编异常处理函数,汇编异常处理函数工作在svc模式,先接管上一异常模式保存的现场,然后调用C处理函数,C函数返回后执行一段原创 2015-03-19 00:18:48 · 2581 阅读 · 0 评论