Linux内核移植及启动流程概述
内核作为Linux操作系统的核心,管理着系统线程、进程、资源和资源分配[62]。本系统采用Linux2.6.21版内核,并对其进行重新裁剪,增加或消除对某些特定设备或子系统。
引导阶段由汇编语言编写,首先检查内核是否支持当前架构的处理器,设置页表、使能MMU,然后复制数据段、清除BSS段等,最后才调用start_kernel函数。
第二阶段才是真正的内核初始化阶段,主要由C语言编写。它也包括两个过程:(1)start_kernel()函数,调用一系列初始化函数,完成kernel本身的设置。(2)作为核心线程的init()函数,完成外设及其驱动程序的加载和初始化。
Linux内核启动过程
如图所示,当Linux启动初始化完成后,则返回init()函数。init进程读取/etc/inittab文件,并启动运行rc脚本。至此,完成了设置Linux系统环境。
Linux-2.6.21内核对AT91RM9200体系的开发板有很好的支持,使得移植工作量并不是很多。根据Linux内核启动过程,本文的移植工作包括:修改Linux内核使得它支持本文设计的AT91RM9200硬件平台,并修改相关驱动使得它支持JFFS2和YAFFS2文件系统等,同时修改NOR Flash和NAND Flash设备分区,使得内核能够挂载到NOR Flash上,并且能够对NAND进行读写。