Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3004029
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2010-03-31 15:43:45

嵌入式Linux启动分为两个部分,系统引导与Linux启动。系统引导将完成Linux装入内存前,初始化CPU和相关IO设备,并将Linux调入内存的工作。系统引导主要由BootLoader实现。在BootLoader将Linux内核调入内存之后,将权力交给LinuxKernel,进入Linux的启动部分。以下详细分析启动的过程与使用的文件。
一、系统引导与BootLoader
        BootLoader因嵌入式系统的不同与PC机有很大不同,这里将以Hyper250(Inter Xscale GDPXA250)的启动为例来分析。由于没有BIOS驱动主板,EnbeddedOS必须由bootloader驱动所有的硬件,并完成硬件的初始化工作。
        所有的初始化文件在hyper250/Bootloader目录下。
       
        首先分析开机运行的分件:
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/start_xscale.S
        文件包含两个库文件:
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/config.h
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/start_xscale.h
        文件config.h主要完成系统各硬件的宏定义与设定,xscale.h主要完成对系统芯片的及系统操作的设定。
        以下分析config.h文件:
        (1)存储总线设备的宏定义:定义Flash的大小、字长等信息,定义SRAM的基址、大小和块大小。
        (2)动态内存设定:定义DRAM的大小、基址。
        (3)软件包信息:包名称、版本号。
        (4)设定BOOT LOADER的位置:在DRAM和SRAM的最大值、DRAM装入位置、栈的基址。
        (5)设定kernel的位置:在DRAM和SRAM的基址、KERNEL的最大值、KERNEL中块的数量。
        (6)设定文件系统的位置:根目录在DRAM和SRAM的基址、文件系统的最大值、文件系统中块的数量。
        (7)设定LOADER程序:LOADER程序的静态内存基址、LOADER程序的最大值、块的数量。
        (8)网络设定
       
        以下分析start_xcalse.h文件:
        (1)定义内存基址(A0000000)
        (2)定义中断基址(40D00000)和中断保护栈的偏移量
        (3)定义时钟管理基址(41300000)和寄存器偏移及其初始值
        (4)定义GPIO接口寄存器基址(40E00000)及各寄存器的偏移
        (5)定义GPIO接口各寄存器的初始值
        (6)定义内存控制寄存器基址(48000000)和各寄存器的偏移
        (7)定义内存控制寄存器的初始值
        (8)定义电源管理寄存器的参数
        (9)定义FFUART寄存器的基址(40100000)和各寄存器的偏移
        (10)定义FFUART各寄存器的初始值
       
        以下分析start_xcalse.S文件:
        (1)设定中断基址(40D00000),完成中断保护栈的初始化
        (2)初始化GPIO接口
        (3)初始化内存SDRAM
        (4)将Bootloader从Flash拷贝到SDRAM中
        (5)装入Linux内核镜像,将内核从Flash(000C 0000)装入SDRAM(A0008000)中.
        (6)设定保护栈
        (7)调用main.c的主函数c_main()       
       
        以上start_xcalse.S通过APCS的编程标准书写的汇编文件初始化了系统相关的硬件,并且完成了BootLoader的装入内存和Linux内核的装入,最后将权力转交给main.c。
        以下将分析main.c文件:
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/main.c
        以及两个库文件
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/main.h
                hyper250/Bootloader/X-Hyper250R1.1-Boot/src/include/scc.h
 
阅读(1290) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~