linux 启动 过程 学习 (x86_64)
来源:互联网 发布:什么软件可以刷机 编辑:程序博客网 时间:2024/05/29 05:02
1. arch/x86/boot/header.S , kernel setup 从 _start开始。 设置 stack, bss, 最后跳转到 arch/x86/boot/main.c。
2. 在main函数中,把kernel setup header 拷贝到 struct setup_header, 之后初console_init, init_heap, validate_cpu, detect_memory(e820), keyboard_init, set_video, 最后go_to_protected_mode。
3. go_to_protected_mode 中打开A20, setup_idt, setup_gdt, 最终跳转到 arch/x86/boot/compressed/head_64.S 中的startup_32函数。
4. startup_32中检查是否需要重新加载segments, 之后计算编译地址和实际加载地址的偏移, 然后设置内核栈,检测是否支持long mode,再次计算偏移来确定解压缩的地址。如果支持long mode的话,设置64 bit的GDT,进入PAE模式。再设置最初的4G页表,最后打开分页并进入long mode。跳转到startup_64.
5. startup_64中,确定最终解压缩地址,然后拷贝压缩内核到该地址,清空BSS,跳转到decompress_kernel地址处,开始解压内核。
6. 3.12内核以后, 在解压内核之前会确定是否要随机话内核加载地址,如果是的话,计算一个可用的随机地址,之后把内核解压到该地址,然后跳转到解压后的内核处执行 arch/x86/kernel/head_64.S.
- linux 启动 过程 学习 (x86_64)
- Linux启动过程学习
- Linux学习-Linux启动过程
- ARM Linux启动过程学习
- Linux内核启动过程学习
- Linux学习手册-启动过程
- linux学习1:Linux的启动过程
- Linux学习笔记(一)启动过程
- linux SMP 启动过程学习笔记
- Linux启动过程综述(学习)
- linux SMP 启动过程学习笔记
- [转]linux内核启动过程学习总结
- linux内核启动过程学习总结
- 学习嵌入式Linux-JZ2440-启动过程分析
- linux内核启动过程学习总结
- Linux学习第三周 Linux内核启动过程
- linux启动过程
- Linux启动过程综述
- android.view.view
- node.js 理解阻塞与非阻塞
- 【Tech-IM】IM类型app开发浅谈(一)---聊天中的消息处理
- Caffe 深度学习 安装 填坑
- Js 对 Json 操作
- linux 启动 过程 学习 (x86_64)
- 【Java并发编程实战】—–“J.U.C”:CyclicBarrier
- 解决同一页面jQuery多个版本或和其他js库冲突方法
- 利用ajax异步post方式校验验证码
- ajax格式
- [原]形态学变换
- iOS---UICollectionView简单使用
- MYSQL常用语句
- 自定义cell