一.BootLoader功能简单描述,屏蔽所有中断,初始化GPIO,初始化SDRAM,拷贝BootLoader到SDRAM中,加载内核映像文件,跳转到C程序,初始化串口,初始化以太网,等待外部输入,无外部输入,跳转到内核入口处。有外部输入,进入BootLoader模式,进行命令解释循环。a)部分头文件处理器PXA255的地址空间为线性地址空间,处理器各部分寄存器是模块化的,可定义各功能模块的基地址,通过基地址加偏移地址的方式访问各功能寄存器。config.hSRAM(FLASH)的基地址为:0x0000000SARM(FLASH)的地址大小为:0x02000000(32M)DRAM(SDRAM)的基地址为:0xA0000000DRAM(SDRAM)的地址大小为:0x020000000×2(64M)Start_xscale.h中断控制器的基地址:INTERRUPT_CONTROL_BASE―0x40D00000时钟管理控制器的基地址:CLOCK_MANAGER_BASE-0x41300000通用GPIO的基地址:GPIO_BASE-0x40E00000内存控制器的基地址:MEM_CTL_BASE-0x48000000b)内存分配脚本文件ld-xscale–ELF文件格式c)汇编语言初始化部分d)C语言代码部分二.内核代码部分a)汇编语言部分2.4.18-rmk7-pxa1-XSBase\arch\arm\kernel\head-armv.S文件根据2.4.18-rmk7-pxa1-XSBase\include\linux\autoconf.h文件的配置执行相关的操作,设置处理器的模式,查询处理器的类型,创建页表等操作后跳转到2.4.18-rmk7-pxa1-XSBase\init\main文件的start_kernel处b)内核入口部分C语言代码部分对系统作第二次初始化内核加锁输出Linux版本信息(printk(linux_banner))设置与体系结构相关的环境(setup_arch())提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options(使用arch/alpha/kernel/entry.S中的入口点设置系统自陷入口(trap_init())使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ())核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init())时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init())控制台初始化(console_init())模块初始化init_modules()剖析器数据结构初始化(prof_buffer和prof_len变量)核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay())内存初始化(设置内存上下界和页表项初始值,mem_init())创建和设置内部及通用cache(slab_cache,kmem_cache_sizes_init())创建页cache(内存页hash表初始化,pageable_cache_init())检查体系结构漏洞(对于alpha,此函数为空,check_bugs())SMP机器其余CPU(除当前引导CPU)初始化(对于没有配置SMP的内核,此函数为空,smp_init())启动init过程(创建第一个核心线程,调用init()函数,原执行序列调用cpu_idle()等待调度,rest_init())三.文件系统部分文件系统与内核相联系,在内核的配置中menuconfig中的GeneralSetup中的配置根据根文件系统下的linuxrc脚本文件可知,它启动了init,init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init程序需要读取/etc/inittab文件作为其行为指针,inittab按照initdefault启动runlevel3。进入rc3.d目录。在rc3.d目录下有一系列以S开始的文件,表示启动的意思,如果以K字母开头,表示Kill的意思。而这些以S开始的文件会链接到其他的脚本文件,会执行相关的链接的脚本文件。如:rc.sysinit,network,pcmcia等脚本文件。在init执行完成以后,会执行/bin/login文件,确认用户名以及密码以后,把控制权交给shell,进入shell命令,执行相关的配置文件.profile等,最后$出现在虚拟终端上,整个启动过程结束。