第二部分 : linux内核初始化以及启动
第一节:start_kernel
Linux的源代码可以从www.kernel.org得到,或者你可以查看linux代码交叉引用网站:http://lxr.linux.no/ 进行在线的代码查看,这是一个很好的工具网站。
在start_kernel中将调用到大量的init函数,来完成内核的各种初始化。如:
page_address_init();
sched_init();
page_alloc_init();
init_IRQ();
softirq_init();
console_init();
calibrate_delay();
vfs_caches_init(num_physpages);
rest_init(); |
具体内容可以参考[http://lxr.linux.no/source/init/main.c]
Linux version 2.4.22-uc0 (root@local)
(gcc version 2.95.3 20010315 (release)) #33 .?1.. 20 12:09:106 |
上面的代码输出信息,是跟踪linux代码分析后得到的,进入init目录下的main.c的start_kernel启动函数.嵌入式linux使用的是linux内核版本为2.4.22,linux source code代码中start_kernel中输出的linux_banner信息。这个信息是每个linux kernel都会打印一下的信息,如果你没有把这句去掉的话:
Found bootloader memory map at 0x10000fc0. |
bootloader经过内存映射后的地址为:0x10000fc0, 按上面的地址换算方法,1后面有7个0,那么虚拟地址256M左右处。
Processor: ARM pt110 revision 0 |
pT110是ARM微处理器arm核的一种,另一种为pT100。此处为显示ARM的类型。
On node 0 totalpages: 20480
zone(0): 20480 pages.
zone(0): Set minimum memory threshold to 12288KB
Warning: wrong zone alignment (0x90080000, 0x0000000c, 0x00001000)
zone(1): 0 pages.
zone(2): 0 pages. |
预留内存大小,在节点0上总共20页, zone(0) 设置最小内存为12MB, zone(1)和zone(2)为0页。警告:对齐不正确。
Kernel command line: root=/dev/mtdblock3 |