BootLoader

转载 2007年09月24日 15:53:00
嵌入式Linux启动分为两个部分,系统引导与Linux启动。系统引导将完成Linux装入内存前,初始化CPU和相关IO设备,并将Linux调入内存的工作。系统引导主要由BootLoader实现。在BootLoaderLinux内核调入内存之后,将权力交给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的位置:在DRAMSRAM的最大值、DRAM装入位置、栈的基址。
        (5)
设定kernel的位置:在DRAMSRAM的基址、KERNEL的最大值、KERNEL中块的数量。
        (6)
设定文件系统的位置:根目录在DRAMSRAM的基址、文件系统的最大值、文件系统中块的数量。
        (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)
BootloaderFlash拷贝到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

Bootloader的开发1

上一篇文章介绍了控制对象的一些基础知识。目前市场上提供汽车电子解决方案的公司有飞思卡尔、ST、英飞凌、瑞萨等。软件工程师的第一个任务是配合硬件工程师进行mcu的选型。我们主要是评估MCU的资源是否够用...
  • jianfengxia
  • jianfengxia
  • 2015年04月17日 21:36
  • 2228

bootloader 解析

bootloader   转载▼ http://blog.sina.com.cn/s/blog_5d0e8d0d01014u8q.html  Bootloader的启动 Li...
  • csu_yang
  • csu_yang
  • 2016年09月29日 23:04
  • 2164

BootLoader简介与基本命令

一. BootLoader简介在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1、 引导加载程序。包括固化在固件(firmw...
  • dugangxj
  • dugangxj
  • 2007年02月12日 12:43
  • 1342

Bootloader for STM32F10X

A Bootloader for STM32F10X, 实现UART升级程序.
  • mxgg123
  • mxgg123
  • 2014年11月27日 09:56
  • 1691

Windows及Linux的bootloader学习笔记

1.磁盘的主引导扇区=磁盘的主引导记录(MBR 446)+磁盘分区表(DPT 64) +结束符(55AA) 2.bootload可以安装在磁盘的主引导记录(MBR)或是分区的引导记录(PBR,也...
  • flexitime
  • flexitime
  • 2013年10月04日 09:29
  • 3150

bootloader 启动过程详细说明

今天早上看了一上午的bootloader简单源码,终于捋顺了bootloader的执行过程,之前只是知道bootloader代码会先被irom中的代码拷贝到iram中一部分,然后执行这部分代码,会把整...
  • u012497906
  • u012497906
  • 2015年01月06日 11:14
  • 4020

android技术篇(一)解锁bootloader

解锁
  • qq_22830795
  • qq_22830795
  • 2017年05月14日 20:12
  • 2434

bootloader修复

bootloader通常是装在MBR中,而MBR的bootloader损坏怎么办呢 恢复被windows破坏的grub.   如果你用grub来引导linux和windows, 当window...
  • yinzhipeng123
  • yinzhipeng123
  • 2016年10月21日 11:39
  • 189

KEIL----单片机实现自定义bootloader,用于程序更新

关于8051的bootloader实现方式  一,             基本硬件需求要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新...
  • shaozhanyu
  • shaozhanyu
  • 2013年10月23日 16:45
  • 1628

分析对比主流Bootloader的性能

 引言:Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。对于嵌入式...
  • yaoweibin
  • yaoweibin
  • 2007年06月19日 19:36
  • 2133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BootLoader
举报原因:
原因补充:

(最多只允许输入30个字)