dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>操作系统>文章内容
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

  Kernel 启动命令设为:/dev/mtdblock3(在后面的说明中会看到mtdblock3是指的flash上的romfs分区。),用来指定根文件系统所在的位置,kernel会将块设备mtdblock3当作文件系统来处理。

  也就是说,内核会根据上面的kernel命令行,知道只读文件系统romfs将是根文件系统rootfs。

  start_kernel(void)中输出的上面的这句信息。

  这行命令是在linux内核启动过程中都会输出的一句。

Console: colour dummy device 80x30

  代码中console_init()的输出信息, 显示控制台属性:一般使用VGA text console,标准是80 X 25行列的文本控制台,这里是对属性进行了设置。

serial_xx: setup_console @ 115

  串口设置值为115200,此为波特率输出信息。对串口设置的信息做一个打印的动作,在调试时会非常有用。

Calibrating delay loop... 82.94 BogoMIPS

  Calibrate:校准, 进入时延校准循环。检查的MIPS(每秒百万条指令),Bogo是Bogus(伪)的意思。这里是对CPU进行一个实时测试,来得到一个大体的MIPS数值

  Bogomips,是由linus Torvalds写的, 是Linux操作系统中衡量计算机处理器运行速度的一种尺度。提供这种度量的程序被称为BogoMips,当启动计算机时,BogoMips能显示系统选项是否处于最佳性能。

  linux内核中有一个函数calibrate_delay(),它可以计算出cpu在一秒钟内执行了多少次一个极短的循环,计算出来的值经过处理后得到BogoMIPS值

  你可以将计算机的bogomips与计算机处理器的bogomips进行比较。Torvalds称这个程序为BogoMips来暗示两台计算机间的性能度量是错误的,因为并非所有起作用因素都能被显示出来或被认可。尽管计算机基准中经常用到MIPS,但环境的变化容易导致度量的错误。Bogomips能测出一秒钟内某程序运行了多少次。

  察看/proc/cpuinfo文件中的最后一行也能得到这个数值。

  上面这个输出,在所有的linux系统启动中都会打印出来。

  进入内存初始化

mem_init(void), [arch/i386/mm/init.c]
Memory: 80MB = 80MB total
Memory: 76592KB available (1724K code, 2565K data, 72K init)

  当前内存使用情况,将列出总的内存大小, 及分配给内核的内存大小:包括代码部分,数据部分,初始化部分,总共刚好4M。请留意此处的内核的内存大小的各个值。

  进入虚拟文件系统VFS初始化

vfs_caches_init()
Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
Inode cache hash table entries: 8192 (order: 4, 65536 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 32768 (order: 5, 131072 bytes)

  名词:

  ① Dentry:目录数据结构

  ② Inode:i节点

  ③ Mount cache:文件系统加载缓冲

  ④ buffer cache:内存缓冲区

  ⑤ Page Cache:页缓冲区

  Dentry目录数据结构(目录入口缓存),提供了一个将路径名转化为特定的dentry的一个快的查找机制,Dentry只存在于RAM中;
i节点(inode)数据结构存放磁盘上的一个文件或目录的信息,i节点存在于磁盘驱动器上;存在于RAM中的i节点就是VFS的i节点,dentry所包含的指针指向的就是它;

  buffer cache内存缓冲区,类似kupdated,用来在内存与磁盘间做缓冲处理;

  Page Cache 用来加快对磁盘上映像和数据的访问。

  在内存中建立各个缓冲hash表,为kernel对文件系统的访问做准备。

  VFS(virtual filesystem switch)虚拟文件切换目录树有用到类似这样的结构表。

  上面的输出信息,在一般的linux启动过程中都会看到。

  POSIX conformance testing by UNIFIX

  conformance:顺应, 一致。即POSIX适应性检测。UNIFIX是一家德国的技术公司,Linux 原本要基于 POSIX.1 的, 但是 POSIX 不是免费的, 而且 POSIX.1 证书相当昂贵. 这使得 Linux 基于 POSIX 开发相当困难. Unifix公司(Braunschweig, 德国) 开发了一个获得了 FIPS 151-2 证书的 Linux 系统. 这种技术用于 Unifix 的发行版 Unifix Linux 2.0 和 Lasermoon 的 Linux-FT。

  在2.6的内核中就将上面的这句输出给拿掉了。

上一篇:嵌入式linux启动信息注释之bootloader   下一篇:linux内核初始化及启动之用户模式开始
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·Linux常用基本命令及应用技巧
·进程和线程概念
·别浪费你的大内存 如何给Windows
·Vista系统下使用率最高的11条命
·写得蛮好的linux学习笔记
·学会在Linux下对硬盘分区
·找回Redhat的超级用户密码
·教你快速释放Windows系统资源的
·GDB教程
·Cron服务配置详解
·Linux与Unix二大操作系统编程的
·Linux 2.6 内核的嵌入式系统应用
  相关文章
·嵌入式linux启动信息注释之bootl
·linux内核初始化及启动之用户模
·ARM的嵌入式Linux移植体验之应用
·Windows CE跨进程内存注入之原理
·ARM的嵌入式Linux移植体验之设备
·Windows CE跨进程内存注入之实践
·ARM的嵌入式Linux移植体验之操作
·10年磨一剑 微软移动开发技术发
·ARM的嵌入式Linux移植体验之Boot
·WM5.0模拟器用AS来使用PC机的网
·ARM的嵌入式Linux移植体验之基本
·Windows CE下驱动程序开发基础
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763