欢迎来到天天文库
浏览记录
ID:13020312
大小:828.77 KB
页数:129页
时间:2018-07-20
《linux内核分析(转自某位大哥网上的笔记)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、启动当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x7C00,并开始执行此处的代码.这就是对内核初始化过程的一个最简单的描述。最初,Linux核心的最开始部分是用8086汇编语言编写的。当开始运行时,核心将自己装入到绝对地址0x90000,再将其后的2k字节装入到地址0x90200处,最后将核心的其余部分装入到0x10000。当系统装入时,会显示L
2、oading...信息。装入完成后,控制转向另一个实模式下的汇编语言代码boot/Setup.S。Setup部分首先设置一些系统的硬件设备,然后将核心从0x10000处移至0x1000处。这时系统转入保护模式,开始执行位于0x1000处的代码。接下来是内核的解压缩。0x1000处的代码来自于文件Boot/head.S,它用来初始化寄存器和调用decompress_kernel()程序。decompress_kernel()程序由Boot/inflate.c,Boot/unzip.c和Boot/misc.c组成。解压缩后的数据被装入到了0x1
3、00000处,这也是Linux不能在内存小于2M的环境下运行的主要原因。解压后的代码在0x1010000处开始执行,紧接着所有的32位的设置都将完成:IDT、GDT和LDT将被装入,处理器初始化完毕,设置好内存页面,最终调用start_kernel过程。这大概是整个内核中最为复杂的部分。[系统开始运行]Linuxkernel最早的C代码从汇编标记startup_32开始执行
4、startup_32:
5、start_kernel
6、lock_kernel
7、trap_init
8、init_IRQ
9、sched_init
10、softirq_init
11、time
12、_init
13、console_init
14、#ifdefCONFIG_MODULES
15、init_modules
16、#endif
17、kmem_cache_init
18、sti
19、calibrate_delay
20、mem_init
21、kmem_cache_sizes_init
22、pgtable_cache_init
23、fork_init
24、proc_caches_init
25、vfs_caches_init
26、buffer_init
27、page_cache_init
28、signals_init
29、#ifdefCONFIG_PROC_FS
30、proc_root_init
31、#endif
32、
33、#ifdefined(CONFIG_SYSVIPC)
34、ipc_init
35、#endif
36、check_bugs
37、smp_init
38、rest_init
39、kernel_thread
40、unlock_kernel
41、cpu_idle·startup_32[arch/i386/kernel/head.S]·start_kernel[init/main.c]·lock_kernel[include/asm/smplock.h]·trap_init[arch/i386/kernel/traps.c]·init_IRQ[arch/i386/kernel/i825
42、9.c]·sched_init[kernel/sched.c]·softirq_init[kernel/softirq.c]·time_init[arch/i386/kernel/time.c]·console_init[drivers/char/tty_io.c]·init_modules[kernel/module.c]·kmem_cache_init[mm/slab.c]·sti[include/asm/system.h]·calibrate_delay[init/main.c]·mem_init[arch/i386/mm/init.
43、c]·kmem_cache_sizes_init[mm/slab.c]·pgtable_cache_init[arch/i386/mm/init.c]·fork_init[kernel/fork.c]·proc_caches_init·vfs_caches_init[fs/dcache.c]·buffer_init[fs/buffer.c]·page_cache_init[mm/filemap.c]·signals_init[kernel/signal.c]·proc_root_init[fs/proc/root.c]·ipc_init[i
44、pc/util.c]·check_bugs[include/asm/bugs.h]·smp_init[init/main.c]·rest_init·kernel_thread[a
此文档下载收益归作者所有