Linux_源代码分析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux_源代码分析.pdf

Linux 内核 ( )源代码分析 苗彦超 摘要: 1 系统启动 1.1 汇编代码head.S 及以前 设置 CPU 状态初值,创建进程 0,建立进程堆栈: movq init_rsp(%rip), %rsp ,init_rsp 定义 .globl init_rsp init_rsp: .quad init_thread_union+THREAD_SIZE-8 即将虚地址 init_thread_union+THREAD_SIZE-8 作为当前进程 (进程0 )核心空间堆栈栈底, init_thread_union 定义于文件 arch/x86_64/kernel/init_task.c 中: union thread_union init_thread_union __attribute__((__section__(.data.init_task))) = {INIT_THREAD_INFO(init_task)}; INIT_THREAD_INFO 定义于文件 include/asm-x86_64/thread_info.h 中,初始化init_thread_union.task = init_task,init_task 同样定义于文件init_task.c 中,初始化为: struct task_struct init_task = INIT_TASK(init_task); INIT_TASK 宏在 include/linux/init_task.h 中定义。 全部利用编译时静态设置的初值,将进程 0 的控制结构设置完成,使进程 0 可以按普通核心进程访问。 init_task.mm = NULL; init_task.active_mm = INIT_MM(init_mm), init_m = “swapper” INIT_MM 将 init_mm.pgd 初始化为 swapper_pg_dir,即 init_level4_pgt,定义与head.S 中。进程0 的名 称为 swapper 。 利用下述汇编代码跳转到 C 函数执行: movl %esi, %edi // 传递函数参数 movq initial_code(%rip),%rax jmp *%rax initial_code: .quad x86_64_start_kernel 开始执行文件 arch/x86_64/kernel/head64.c 中的C 函数x86_64_start_kernel(char * real_mode_data) , 1.2 函数x86_64_start_kernel(char * real_mode_data) 1 设置全部中断向量初始入口为early_idt_handler,加载中断描述符 idt_descr 2 clear_bss() :BSS 段清 0 3 pda_init(0) :设置处理器0 相关信息 (processor datastructure area ?),重置 CR3 为 init_level4_pgt 4 copy_bootdata :复制 BIOS 启动参数到操作系统变量 x86_boot_params 中,再复制启动命令行参 数由 x86_boot_params 到 saved_command_line 中,用printk 显示 saved_command_line,从此不再 与实模式数据打交道 5 cpu_set :设置CPU 0 开始工作标志 6 处理 “earlyprintk= ”、“numa ”、“disableapic ”等命令行参数 7 setup_boot_cpu_data():设置CPU 信息结构 boot_cpu_data ,使用 cpuid 指令

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档