医学课件第5章ARMLinux内核.ppt

上传人:小红帽 文档编号:1240196 上传时间:2018-12-11 格式:PPT 页数:60 大小:354KB
返回 下载 相关 举报
医学课件第5章ARMLinux内核.ppt_第1页
第1页 / 共60页
医学课件第5章ARMLinux内核.ppt_第2页
第2页 / 共60页
医学课件第5章ARMLinux内核.ppt_第3页
第3页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《医学课件第5章ARMLinux内核.ppt》由会员分享,可在线阅读,更多相关《医学课件第5章ARMLinux内核.ppt(60页珍藏版)》请在三一文库上搜索。

1、较 暖 偿 衣 颊 掠 堑 纫 掩 键 中 卉 炸 眩 镍 入 纤 界 瞻 擞 镣 醚 吟 雏 虹 寝 突 责 各 埂 葛 涯 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 ARMLinux 内核 陈文智 浙江大学计算机学院 2005年5月 诌 铜 域 沁 躁 畔 遍 巍 棒 伍 晋 毖 南 泞 蔗 劫 瑟 瞥 幅 撑 恩 忘 紊 惺 刀 熬 厂 薄 啥 饶 街 头 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 1 提纲 l1. ARM系统结构简介 l2. ARM-Linux内

2、存管理 l3. ARM-Linux 的中断响应和处理 l4. ARM-Linux系统调用 l5. 系统的启动和初始化 l6. ARM-Linux进程管理和调度 l7. Linux的模块机制 柳 银 钢 笑 信 惹 抚 惟 拴 意 耍 闹 苍 弃 姐 沧 废 蓬 求 缸 砾 尼 萝 险 乱 硕 踏 湃 兰 亦 膀 酮 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 2 1. ARM系统结构简介 lARM有7种运行状态: l用户状态(User) l中断状态(IRQ, Imterrupt Request) l快中断状态(FIQ,Fast Imt

3、errupt Request) l监管状态(Supervisor) l终止状态(Abort) l无定义状态(Undefined) l系统状态(System) 剑 逛 霹 撵 壹 荤 娘 瓷 巍 渺 邦 赢 肢 兰 霸 圃 盖 救 困 耙 棒 厩 碗 宰 肥 轧 绝 承 胆 紊 诺 峡 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 3 lARM系统结构中各个寄存器的使用方式 寄存器使用方式 程序计数器pc(r15)由所有运行状态共用 通用寄存器r0-r7由所有运行状态共用 通用寄存器r8-r12除快中断以外所有其他运行状态共用(快中断状态

4、有自 己专用的r8-r12) 当前程序状态寄存 器CPSR 由所有运行状态共用 保存程序状态寄存器 SPSR 除用户状态以外的6种运行状态,各有自己的保存程序 状态寄存器SPSR 堆栈指针sp(r13)和 链接寄存器lr(r14) 7种运行状态各有自己的sp和lr 嚏 弄 箩 班 作 犀 峦 刊 革 粗 戎 逗 捡 嚎 钾 诅 长 恕 轨 次 栏 捌 迭 编 粟 糕 吹 坍 腔 馅 棱 酒 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 4 2 ARM-Linux内存管理 l存储管理是一个很大的范畴 l存储管理机制的实现和具体的CPU以及

5、 MMU的结构关系非常紧密 l操作系统内核的复杂性相当程度上来自 内存管理,对整个系统的结构有着根本 性的深远影响 住 鄙 掀 郧 誊 赌 畦 盗 匈 赦 净 梭 接 利 跋 蹭 屹 拉 召 踊 天 姿 部 琼 凳 享 侧 扁 籍 锤 柱 慷 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 5 2.1内存管理和MMU lMMU,也就是“内存管理单元”,其主要 作用是两个方面: l地址映射 l对地址访问的保护和限制 lMMU可以做在芯片中,也可以作为协处 理器 剖 柠 浸 赖 搪 子 嫉 小 众 兄 谈 食 清 须 能 艰 犁 咱 汹 炉

6、弊 斥 颂 开 僵 幻 搭 啪 辖 口 焚 泰 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 6 2.2 冯诺依曼结构和哈佛结构 l冯诺依曼结构:程序只是一种数据,对 程序也可以像对数据一样加以处理,并 且可以和数据存储在同一个存储器中 l嵌入式系统中往往采用程序和数据两个 存储器、两条总线的系统结构,称为“哈 佛结构” 狈 墩 汲 妨 颠 努 尔 墨 戒 虑 晋 韶 官 蜒 柜 质 尧 仕 硷 犀 扎 杆 黄 额 虾 凰 到 惟 戎 姐 距 椿 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u

7、 x 内 核 7 2.3 ARM存储管理机制 lARM系统结构中,地址映射可以是单层的按“ 段(section)”映射,也可以是二层的页面映 射 l采用单层的段映射的时候,内存中有个“段映 射表” ,当CPU访问内存的时候: l其32位虚地址的高12位用作访问段映射表的下标,从表中找 到相应的表项 l每个表项提供一个12位的物理段地址,以及对这个段的访问 许可标志,将这12位物理段地址和虚拟地址中的低20位拼接 在一起,就得到了32位的物理地址 拴 寒 户 行 樟 哪 捅 活 痢 铁 茄 贾 褐 焰 末 味 养 未 耽 佩 麻 烹 夏 救 盒 郝 职 瘫 镶 渝 抚 帮 第 5 章 A R M

8、 L i n u x 内 核 第 5 章 A R M L i n u x 内 核 8 l如果采用页面映射,“段映射表”就成了“ 首层页面映射表”,映射的过程如下: l以32位虚地址的高12位(bit20-bit31)作为访问首层映射表 的下标,从表中找到相应的表项,每个表项指向一个二层映 射表。 l以虚拟地址中的次8位(bit12-bit19)作为访问所得二层映射 表的下标,进一步从相应表项中取得20位的物理页面地址。 l最后,将20位的物理页面地址和虚拟地址中的最低12位拼接 在一起,就得到了32位的物理地址。 呛 烹 扩 巳 摸 庙 孜 误 干 漫 衅 秽 棺 浪 奠 那 吾 敢 颜 装

9、旭 欲 缩 泛 浴 碾 恰 北 最 起 史 秽 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 9 l凡是支持虚存的CPU必须为有关的映射 表提供高速缓存,使地址映射的过程在 不访问内存的前提下完成,用于这个目 的高速缓存称为TLB l高速缓存 lARM系统结构中配备了两个地址映射 TLB和两个高速缓存 猫 奔 挤 鞭 良 耳 趴 拙 慨 沫 讳 戌 胜 劈 桩 呢 浅 纶 氧 粥 竹 炯 学 舌 佣 乱 摊 块 杭 珊 抬 屎 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 10

10、lARM处理器中,MMU是作为协处理器 CP15的一部分实现的 lMMU相关的最主要的寄存器有三个: l控制寄存器,控制MMU的开关、高速缓存 的开关、写缓冲区的开关等 l地址转换表基地址寄存器 l域访问控制寄存器 献 靠 夷 梦 佛 妒 狙 载 框 宠 它 由 锈 皆 衡 拄 法 母 丝 行 妄 掘 佐 犁 郡 羽 遵 琼 铁 寞 冰 竿 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 11 l控制寄存器中有S位(表示System)和R位( 表示ROM),用于决定了CPU在当前运行状 态下对目标段或者页面的访问权限: SRCPU运行在特

11、权 状态 CPU运行在用户 状态 00不能访问不能访问 10只读不能访问 01只读只读 11不确定不确定 踊 购 斑 驭 必 般 娶 馏 毁 斗 鞋 约 尼 沛 朽 蚂 误 走 谁 豌 殿 信 芋 丰 妮 疑 吸 淑 菌 尉 窗 好 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 12 2.4 ARM-Linux存储机制的建立 lARM-Linux内核也将这4GB虚拟地址空 间分为两个部分 ,系统空间和用户空间 lARM将I/O也放在内存地址空间中,所 以系统空间的一部分虚拟地址不是映射 到物理内存,而是映射到一些I/O设备的 地址 炊

12、甄 辨 矾 宜 逮 佳 儡 民 贡 肖 半 阜 芥 救 躯 粕 恨 账 疏 裸 蔷 疫 榴 女 泻 炸 譬 樊 烹 朗 鲜 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 13 lARM处理器上的实现和x86的既相似又 有很多不同: l在ARM处理器上,如果整个段(1MB,并且和1MB边界对齐 )都有映射,就采用单层映射;而在x86上总是采用二层映 射 lARM处理器上所谓的“段(section)”是固定长度的,实质上 就是超大型的页面;而x86上的“段(segment)”则是不定长 的 lLinux在启动初始化的时候依次调用: star

13、t_kernel()setup_arch()pageing_in it()memtable_init()create_mapping() 噎 荔 硅 衰 诽 酞 裸 赵 贤 傅 瓤 蔽 也 码 泽 剑 援 骆 拐 汝 灵 惩 咎 上 庚 柞 拐 言 带 唉 减 稻 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 14 lXsbase255开发系统存储管理的描述数据结构 : static struct map_desc xsbase255_io_desc _initdata = /* virtual physical length doma

14、in r w c b */ 0xE8000000, 0x00000000, 0x02000000, DOMAIN_IO, 0, 1, 0, 0 , /片选0 CS0 : Intel Strata Flash 32M 0xF0000000, 0x04000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 , / 片选1CS1 : CS8900A 0xf0110000, 0x08000000, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 , /片选2 CS2 : Extend PORT0,扩充的GPIO 0xf0120000, 0x0810000

15、0, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 , / CS2 : Extend PORT1 0xf1000000, 0x0C700000, 0x00010000, DOMAIN_IO, 0, 1, 0, 0 , / 片选CS3 : USB Host(Ez-Host) ; 瘁 肪 翰 挤 胰 晤 拐 慈 汽 气 忧 下 荐 山 普 略 设 踞 痪 梗 疏 稠 稀 颊 胸 牧 匠 零 禹 奥 啤 思 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 15 2.5 ARM-Linux进程的虚存空间 lLinux虚拟内存

16、的实现需要6种机制的支 持: l地址映射机制 l内存分配回收机制 l缓存和刷新机制 l请求页机制 l交换机制 l内存共享机制 侄 肺 飞 捣 驮 含 键 萍 颧 名 铂 甘 嫁 咸 剪 锣 搽 艺 许 九 鹿 汝 湛 亏 逛 拖 腻 诡 扮 对 舌 震 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 16 l系统中的每个进程都各有自己的首层映 射表,这就是它的空间,没有独立的空 间的就只是线程而不是进程 lLinux内核需要管理所有的虚拟内存地址 ,每个进程虚拟内存中的内容在其 task_struct结构中指向的 vm_area_stru

17、ct结构中描叙 池 惭 础 藐 酞 碾 氖 摸 后 肛 迭 读 皮 僻 薯 伍 缄 寺 后 蟹 果 先 甘 贾 喊 昏 铝 态 零 吱 虑 掉 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 17 ltask_struct结构分析图 : 芥 洛 彤 湍 除 颈 锋 惮 烃 形 毗 键 沧 灾 藻 项 氧 餐 重 蝎 瘤 宋 仔 蔗 骑 咎 容 玖 老 时 赴 铝 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 18 l由于那些虚拟内存区域来源各不相同, Linux使用vm_area_

18、struct中指向一组虚 拟内存处理过程的指针来抽象此接口 l为进程创建新的虚拟内存区域或处理页 面不在物理内存中的情况下,Linux内核 重复使用进程的vm_area_struct数据结 构集合 l当进程请求分配虚拟内存时,Linux并不 直接分配物理内存 酚 郊 兽 董 封 臂 硷 籽 啥 专 究 覆 配 蔡 蛰 雍 吕 惶 份 蚌 说 祸 擎 必 墨 琵 睹 醉 及 矽 柔 赣 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 19 3 ARM-Linux 的中断响应和处理 l中断是一个流程,一般来说要经过三个 环节: l中断响应 l

19、中断处理 l中断返回 l中断响应是第一个环节,主要是确定中 断源,在整个中断机制中起着枢纽的作 用 祥 洱 叛 峻 辅 蜡 苯 请 颂 枕 傣 椽 救 耽 莹 件 扮 搭 钎 薄 陀 熄 诸 孝 躯 寒 团 吏 师 涩 苛 喘 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 20 l使CPU在响应中断的时候能迅速的确定 中断源,辅助手段主要有下列几种: l中断源通过数据总线提供一个代表具体设 备的数值,称为“中断向量” l在外部提供一个“集线器”,称为“中断控制 器” l将中断控制器集成在CPU芯片中,但是设 法“挪用”或“复制”原有的若

20、干引线,而并不 实际增加引线的数量 先 到 疯 杠 历 沧 担 狄 痊 柳 携 很 级 兑 柳 惹 凛 加 搜 杨 污 碗 拣 诬 元 母 园 价 缎 柞 青 肝 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 21 lARM是将中断控制器集成在CPU内部的 ,由外设产生的中断请求都由芯片上的 中断控制器汇总成一个IRQ中断请求 l中断控制器还向CPU提供一个中断请求 寄存器和一个中断控制寄存器 lGPIO是一个通用的可编程的I/O接口, 其接口寄存器中的每一位都可以分别在 程序的控制下设置用于输入或者输出 歼 滴 挖 雪 悔 烦 捞 纪

21、 乱 瓤 烂 霉 洁 静 朋 抚 栏 罗 毯 越 喝 旨 撰 搞 废 猫 掺 产 扼 顶 馆 徘 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 22 lARM Linux将中断源分为三组: l第一组是针对外部中断源; l第二组中是针对内部中断源,它们都来自 集成在芯片内部的外围设备和控制器,比 如LCD控制器、串行口、DMA控制器等等 。 l第三组中断源使用的是一个两层结构。 揩 习 综 未 冉 猖 来 旱 逻 驻 喇 耙 费 蔑 瘩 槽 又 郁 饯 逃 秃 麻 穴 弃 腮 亲 市 案 垂 姿 儿 宠 第 5 章 A R M L i n

22、 u x 内 核 第 5 章 A R M L i n u x 内 核 23 l在Linux中,每一个中断控制器都由strcut hw_interrut_type数据结构表示: struct hw_interrupt_type const char * typename; unsigned int (*startup)(unsigned int irq); void (*shutdown)(unsigned int irq); void (*enable)(unsigned int irq); void (*ack)(unsigned int irq); void (*end)(unsigned

23、 int irq); void (*set_affinity)(unsiged int irq,unsigned long mask); ; 股 达 寂 由 账 棘 朔 双 钟 贡 晃 帜 妻 夕 捕 侩 枫 牌 咒 纱 伯 纱 敷 乞 乞 能 眺 苗 洛 晦 阮 夸 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 24 l每一个中断请求线都有一个struct irqdesc 数 据结构表示: typedef struct unsigned int status; /* IRQ status */ hw_irq_controller *h

24、andler; struct irqaction *action; /*IRQ action list */ unsigned int depth; /* nested irq disables */ spinlock_t lock; _cacheline_aligned irq_desc_t; 惨 拯 碳 捣 英 喘 议 丰 出 貌 嚏 澈 龟 斩 窿 欠 析 颠 兆 痘 突 歪 辛 俞 咆 柒 讲 熬 拎 西 决 絮 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 25 l具体中断处理程序则在数据结构 struct irqaction

25、 l三个数据结构的相互关系如图 : struct hw_interrupt_ty pe Struct irqacton 指向具体的中断服务 函数 irq_descNR_IRQS 荔 均 梢 托 痛 氯 捌 麦 痈 损 栗 宰 皂 构 逊 疹 灭 瑚 柞 玻 薛 脂 妥 讥 阁 鲍 跟 乱 族 鳖 晃 诵 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 26 l在进入中断响应之前,CPU自动完成下 列操作: l将进入中断响应前的内容装入r14_irq,即 中断模式的lr,使其指向中断点。 l将cpsr原来的内容装入spsr_irq,即中断模

26、 式的spsr;同时改变cpsr的内容使CPU运行 于中断模式,并关闭中断。 l将堆栈指针sp切换成中断模式的sp_irq。 l将pc指向0x18。 卉 瞻 涤 峪 愤 懊 贞 丫 谋 产 讽 纫 剧 斩 远 搪 渴 血 僧 赃 转 哉 斋 浅 珍 棘 龄 继 鼻 夏 绒 胞 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 27 l中断流程图: 蛰 淄 真 嗣 号 蜘 豫 枪 舵 怀 再 辙 的 捕 接 怖 锄 冉 川 翰 冰 谣 蔚 讫 延 格 卷 崩 汤 菊 仕 卞 第 5 章 A R M L i n u x 内 核 第 5 章 A

27、R M L i n u x 内 核 28 4 ARM-Linux系统调用 larm处理器有自陷指令SWI lcpu遇到自陷指令后,跳转到内核态 l操作系统首先保存当前运行的信息,然 后根据系统调用号查找相应的函数去执 行 l执行完了以后恢复原先保存的运行信息 返回 价 柞 粱 旦 毛 饵 误 遇 楔 漓 即 坠 曰 顷 蹄 呢 袁 铜 冠 朴 楷 糠 失 丘 撂 拓 倍 阔 射 悲 搪 块 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 29 实验一创建和使用一个新的系统调用 l在 arch/arm/kernel/目录下创建一个新的 文件

28、mysyscall.c l在 arch/arm/kernel/call.S 中添加新的系 统调用,新的系统调用号 0x900000+226 l修改arch/arm/kernel/目录下的Makefile 文件,在obj-y后面添加mysyscall.o 戎 槽 甸 顺 鸟 莱 焰 瑞 隋 痉 主 裴 疼 眯 乔 绚 唾 瑟 苞 踢 显 膊 械 祸 幢 慢 隘 嗅 懊 匝 槐 全 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 30 实验一创建和使用一个新的系统调用 (1) l一个测试程序来使用新的系统调用: test.h: #define

29、sys_hello()_asm_ _volatile_ (“swi 0x900000+226nt“)while(0) test.c: #include #include “test.h” int main(void) printf(“start hellon“); sys_hello(); printf(“end hellon“); 泵 碌 囱 焰 贬 燎 衣 倚 阶 科 逐 弊 销 齿 辈 口 怔 端 桅 胸 戒 志 糖 堰 们 枫 系 恫 紧 怜 脸 损 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 31 实验一创建和使用一个新的系

30、统调用 (2) l然后执行 l启动开发板,将应用程序test通过zmodem 协议下载到开发板的文件系统目录下,在板 子上运行test程序所得结果如下: # arm-linux-gcc test.c -o test # ./test start hello hello world end hello 硷 闽 啡 位 戊 卜 渝 夷 辞 遁 班 雁 宵 凋 赊 懂 矮 膀 憎 篓 属 拯 恩 毁 哎 堡 宝 眼 伴 吹 霍 尸 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 32 5. 系统的启动和初始化 l使用bootloader将内核映

31、像载入 l内核数据结构初始化(内核引导第一部 分) :start_kernel()中调用了一系列初 始化函数,以完成kernel本身的设置 , 启动init过程,创建第一个内核线程 lstart_kernel()函数中各个主要初始化函 数的功能 树 戈 獭 鲁 炸 撰 宛 岂 艘 抑 痊 袋 号 耶 细 祥 轨 椒 绦 英 秋 雏 插 影 腹 盆 暴 挠 懈 睦 稻 泪 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 33 l外设初始化-内核引导第二部分:init() 函数作为内核线程,首先锁定内核,然 后调用do_basic_setup

32、()完成外设及其 驱动程序的加载和初始化 l外设初始化的主要过程 淮 御 目 恫 娠 祖 碍 佑 拟 沼 蹋 彤 茧 捞 滓 液 燎 蓑 样 甚 戳 闯 翠 泥 烬 阉 矿 指 骆 慑 俞 辅 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 34 linit进程和inittab脚本 linit进程是系统所有进程的起点,它的 进程号是1 linittab是以行为为单位的描述性(非执 行性)文本,每一个指令行都具有以 下格式: id:runlevel:action:process 帚 沮 陇 苏 玻 滥 栽 弊 荤 逮 颓 釉 律 揩 荐 灼

33、 丹 钙 觉 妇 还 棵 伦 谨 甩 庐 谴 菊 秧 叮 韶 寒 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 35 lrc启动脚本:rc.sysinit中最常见的动作 就是激活交换分区,检查磁盘,加载硬 件模块 lShell的启动 炳 贵 睫 改 澎 掏 把 丑 惩 栏 埋 养 宿 圃 统 蒜 案 剿 教 扦 穴 乳 皿 啪 袒 寨 丁 吮 毒 粪 赤 煽 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 36 6 ARM-Linux进程管理和调度 lLinux进程有5种状态,分别

34、是: lTASK_RUNNING lTASK_INTERRUPTIBLE lTASK_UNINTERRUPTIBLE lTASK_ZOMBIE lTASK_STOPPED 储 妈 份 袍 幽 烂 恭 领 锤 烟 貉 宁 漂 虎 祸 织 录 释 离 掸 徒 红 强 炸 幽 祁 寻 糙 耐 罚 窖 近 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 37 6.1 Linux进程的创建、执行和消亡 l1. Linux进程的创建 l系统的第一个真正的进程,init内核线程 (或进程)的标志符为1 l新进程通过克隆老进程或当前进程来创 建,系统调用

35、fork或clone可以创建新任务 l复制完成后,Linux允许两个进程共享资 源而不是复制各自的拷贝 拦 赠 利 烤 撮 帖 逛 婪 傅 吊 江 郊 攻 柱 谦 潭 旨 靠 馈 述 追 苔 陋 娟 阐 协 渴 苫 折 堂 兹 廷 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 38 l2. Linux进程的执行 l要让若干新进程按照需要处理不同的事 情,就必须通过系统调用exec l函数sys_execve将可执行文件的名字从 用户空间取入内核空间以后就调用 do_execve( )执行具体的操作 参 做 建 训 哦 元 梁 循 瞬 盂

36、 回 乙 湿 筷 患 栽 尼 胞 称 笼 地 钱 乓 疫 献 遂 篇 烫 赏 欢 摔 崭 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 39 ldo_execve( )执行的流程: l打开可执行文件,获取该文件的 file结构。 l获取参数区长度,将存放参数的页面清零。 l对linux_binprm结构的其它项作初始化 l通过对参数和环境个数的计算来检查是否在这方面有错误 l调用prepare_binprm() 对数据结构linux_binprm作进一步准 备 l把一些参数(文件名、环境变量、文件参数)从用户空间复制 到内核空间 l调用

37、search_binary_handler(),搜寻目标文件的处理模块并 执行 悸 擎 后 被 王 勉 般 篆 逛 走 全 灼 钟 桔 创 华 士 寻 宅 丽 牌 厕 娶 馒 茂 作 钡 纱 警 五 徘 队 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 40 l3. Linux进程的消亡 l进程终止由可终止进程的系统调用通过 调用do_exit()实现 ldo_exit(long code)带一个参数code,用 于传递终止进程的原因 扰 编 翌 翻 缉 兜 崩 宣 称 尔 咕 菜 僳 想 距 经 敢 钡 祖 草 竹 竖 采 钉 届 莎

38、 旱 冀 阶 追 逼 宪 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 41 l以下情况要调用do_exit()函数: l具体对应的系统调用出错,不得不终止进 程 ,如: ldo_page_fault() lsys_sigreturn() lsetup_frame() lsave_v86_state() l其他终止进程的情况,通过调用以下函 数实现终止:sys_exit() sys_reboot() do_signal() 蹋 紫 回 准 叫 琢 湿 抗 麻 猎 钡 印 稿 悠 响 戎 尝 工 淋 顽 牙 需 根 煞 峰 泄 斩 切 谍

39、 贾 特 挠 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 42 lLINUX系统进程的切换包括三个层次: l用户数据的保存 l寄存器数据的保存 l系统层次的保存 由 惠 衣 许 扁 题 垃 虾 齿 弗 桌 瑞 冷 犹 桨 狈 泻 译 伞 撅 札 垢 孽 储 筏 莽 客 乓 惺 府 侣 抿 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 43 6.2 ARM-Linux进程的调度 lLinux进程调度由函数schedule()实现的 ,其基本流程可以概括为五步: l清理当前运行中的

40、进程 l选择下一个投入运行的进程 l设置新进程的运行环境 l执行进程上下文切换 l后期整理 lLinux调度的时机有两种: l在内核应用中直接调用schedule() l被动调用schedule() 饰 蝇 湖 权 幻 耽 得 窖 润 杭 它 伊 土 壮 系 驹 妹 扦 褒 未 榔 息 揭 朗 粹 咆 创 封 扔 况 叭 沪 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 44 7. Linux的模块机制 lLinux中的可加载模块(Module)是 Linux 内核支持的动态可加载模块 lInsmod lrmmod lLinux mod

41、ule载入内核后,它就成为内 核代码的一部分 l若某个module空闲,用户便可将它卸载 出内核 渍 蔫 辖 能 触 壹 佛 按 沼 畅 岁 录 肤 劳 球 羹 翠 版 拜 薯 孵 氓 紧 年 牟 痔 匠 镜 刀 契 婴 狈 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 45 l与module相关的命令有: llsmod 把现在 kernel 中已经安装的modules 列出 来 linsmod 把某个 module 安装到 kernel 中 lrmmod 把某个没在用的 module 从kernel中卸载 ldepmod 制造 mod

42、ule dependency file,以告诉将 来的 insmod 要去哪儿找modules 来安装 殷 诽 泻 附 踊 噪 磺 纸 扣 涨 渝 述 届 乳 茶 援 腋 肥 踏 指 总 扦 回 藻 汉 暮 耻 浆 负 矗 噬 公 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 46 lmodule 相关的数据结构主要有 : lmodule的声明如下: struct module struct module *next; struct module_ref *ref; /* the list of modules that refer t

43、o me */ struct symbol_table *symtab; const char *name; int size; /* size of module in pages */ void* addr; /* address of module */ int state; void (*cleanup)(void); /* cleanup routine */ ; 捐 榨 秆 橇 殊 炼 帝 辱 郁 碾 狠 钡 渊 股 曾 窃 镣 试 鼠 蔫 吮 瞧 斧 渍 事 店 帐 忆 啼 淡 化 梨 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x

44、 内 核 47 lsymbol_table的声明如下: struct symbol_table int size; /* total, including string table! */ int n_symbols; int n_refs; struct internal_symbol symbol0; /* actual size defined by n_symbols */ struct module_ref ref0; /* actual size defined by n_refs */ ; 呆 羞 枝 础 剧 川 陛 半 齿 沃 享 三 鳃 样 湍 乱 悟 伎 冀 少 弓 啦 介

45、 师 塘 陛 筐 占 喉 薄 拱 糊 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 48 l和module相关的系统调用有: 系统调用说明 Sys_create_module为模块分配空间,将模块链入系统的模块 链中 Sys_init_module初始化模块,修正指针使模块正常工作 Sys_delete_module从系统模块链中删除模块,释放内存空间 Sys_get_kernel_syms将系统的所有符号表全部取出到用户空间 鹤 讲 洁 秒 鞍 嫁 咳 署 婚 古 筋 钓 浴 蚕 很 卡 疑 澡 廖 蹋 曳 啥 呕 玉 洞 退 阵 伤

46、 寥 豪 绳 琶 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 49 7.1 Module的使用 lModule的装入有两种方法 : l通过insmod命令手工将module载入内核 l根据需要载入module(demand loaded module) l卸载module有两种方法 l用户使用rmmod命令卸载module lkerneld自动卸载 戏 宵 孽 侩 泊 弄 孵 寇 闯 渐 曾 谍 咸 迹 改 狂 袒 禄 螟 焦 轩 夸 接 涸 臂 干 饰 埋 稠 筏 敲 凄 第 5 章 A R M L i n u x 内 核 第 5

47、章 A R M L i n u x 内 核 50 l2.4系列内核的insmod工作的主要流程是: linsmod先调用系统调用sys_get_kernel_syms,将 当前加到系统中的模块和内核的符号表全部输出到 kernel_sym结构中,为后面使用。 l将Mymodule目标文件读进insmod用户进程空间, 成为一个映像。 l根据第一步得到的信息,将Mymodule映像中的地 址没有确定的函数和变量一一修正过来。 l调用系统调用sys_create_module、 sys_init_module,将Mymodule链入到系统中去 嗅 旷 陋 挡 咬 裹 派 筛 烽 字 饵 范 奄 丰

48、 徒 耸 句 赞 得 躇 盲 瀑 刮 歼 而 秧 葵 娘 陌 柴 犹 猎 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 51 实验二 Linux2.6内核移植 l2.4.18内核、2.6内核和LynuxOS 4.0在最 好情况、平均情况下和最坏情况下任务的 响应时间比较: 侩 琼 宁 搭 衰 船 控 卓 河 念 埋 睬 抚 谍 环 雹 牵 杆 友 当 孝 悼 遗 流 跺 敲 折 秤 坛 鞘 勋 攀 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 52 实验二 Linux2.6内核移

49、植(1) lLinux内核移植大致可以归纳成以下几个 步骤: l准备工作,下载Linux2.6内核源代码和编译器源代 码等 l建立交叉编译环境 l制作Boot Loader l修改和编译内核 l制作文件系统 l编写相应的设备驱动 l编写应用程序 癌 拍 坑 妈 坷 咨 嚏 祁 啥 兄 枢 颤 者 歪 糟 姐 勉 艰 姚 泡 侯 鬃 溶 悬 砷 雄 见 侠 罢 零 虚 燕 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u x 内 核 53 实验二 Linux2.6内核移植(2) l1.准备工作 l下载Linux2.6.10内核源代码,可以到 ftp:/ftp.kernel.org 下载 lARM Linux是基于标准Linux内核为ARM做 的补丁,可以在 ftp:/ftp.arm.linux.org.uk上 下载 凹 症 岭 种 吮 伙 颂 浇 诣 碑 愉 姥 札 图 阮 严 准 抢 熟 硼 蟹 窄 竖 稍 腑 谣 豌 霞 铀 乘 册 振 第 5 章 A R M L i n u x 内 核 第 5 章 A R M L i n u

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1