- 1、本文档共80页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux内核 大纲 Linux内核简介 Linux内核体系结构 Linux内核目录结构 ARM-Linux内核启动分析 ARM-Linux系统调用 Linux内核配置 Linux 内核简介 在计算机技术的发展史上,Unix的出现是一个重要的里程碑。 免费 源代码 Unix的两大主流 BSD版本的Unix System V版本的Unix POSIX标准 Linux 内核简介 Linux 内核简介 Linux版本的规定(x.yy.zz) x介于0到9之间 x标志着内核在设计上或实现上的重大改变 yy介于0到99之间 yy偶数表示相对稳定,已经发行的版本 yy奇数表示开发中的版本 zz介于0到99之间 zz内核增加内容不是很多,改动不大 Linux 内核简介 Linux 内核简介 Linux开发过程 基于天才的思想开发而成 基于Unix等各种操作系统的优点 公开的开发过程是其最强大的生命力 Linux 内核简介 主要发行商: Linux 内核体系结构 Linux 内核体系结构概述 内核系统结构图 Linux 内核体系结构概述 Linux 内核源代码目录概述 第一级文件结构(1) 第一级文件结构(2) Arch平台相关代码文件 fs 文件系统(1) fs 文件系统(2) Drivers 设备驱动程序(1) Drivers 设备驱动程序(2) Include 头文件(.h) ARM-Linux内核启动代码分析 Arm-linux 的启动和初始化 内核的初始化是一个非常漫长的过程,整个过程可以分为三个阶段: 第一个阶段主要是找到Linux内核的入口地址开启Cache和MMU,解压缩内核; 第二个阶段跳入C语言函数,调用大量的初始化函数,完成内核的各种初始化; 第三个阶段是创建启动第一个内核线程init(),完成各种外部设备的初始化;挂载根文件系统。 Arm-linux 的启动和初始化——第一阶段 第一个阶段主要是找到Linux内核的入口地址开启Cache和MMU,解压缩内核; Linux/arch/arm/kernel/head.S /arch/arm/boot/compressed/misc.c decompress_kernel() Arm-linux 的启动和初始化——第二阶段 第二个阶段跳入C语言函数,调用大量的初始化函数,完成内核的各种初始化; Linux/init/main.c 输出Linux版本信息(printk(linux_banner)) 设置体系结构相关的环境(setup_arch()) 页表结构初始化(paging_init(),在setup_arch())中完成) Arm-linux 的启动和初始化 解析内核命令行参数(parse_options()) 设置系统自陷入口(trap_init()) 初始化系统IRQ(init_IRQ()) 内核进程调度器机制初始化(sched_init()) 时间、定时器初始化(包括读取CMOS时钟,评测主频和初始化定时器中断等,time_init()) 软中断初始化(softirq_init()) 控制台初始化(为输出信息而先于PCI初始化,console_init()) Arm-linux 的启动和初始化 可安装模块机制初始化(init_modules()) 释放命令行和参数块等占用的物理内存,收集和计算出一些统计信息(mem_init()) 内核cache初始化(kmem_cache_init()) 延时校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay()) 根据物理内存大小,计算可创建线程(包含进程)数量(fork_init()) 启动init过程,创建第一个内核线程,调用init()函数。 至此, start_kernel()结束,基本的内核环境已经建立起来 Arm-linux 的启动和初始化——第三个阶段 Init()的执行-- 总线初始化(比如pci_init()) 网络初始化(sock_init()) 创建事件管理内核线程,重命名为keventd(start_context_thread()). 启动任何使用_initcall表示的函数,方便内核开发者添加启动函数(do_initcall()) 设备初始化,包括并口、字符设备、块设备等。 文件系统初始化(filesystem_setup()) 安装root文件系统(mount_root()) ARM-Linux系统调用 系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核。 系统调用时应用程序从用户空间进入内核空间的唯一途径。 在x86处理器上,Linux系
文档评论(0)