单片机
返回首页

Linux嵌入式 -- Bootloader , Uboo

2024-10-14 来源:cnblogs

1. Bootloader作用

PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。

简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如,S3C2410在复位后从地址0x00000000起开始执行。而嵌入式系统则将固态存储设备(比如:FLASH)安排在这个地址上,而bootloader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行BootLoader程序。




2. Bootloader 移植

每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader 还依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,外设芯片的类型等。这也就是说,对于两块不同的开发板而言,即使它们是基于同一种CPU而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的BootLoader程序也能在另一块板子上运行,还是需要作修改。


3. 移植流程

BootLoader 的启动过程可分为单阶段(Single-Stage)和多阶段(Multi-Stage)两种。

BootLoader 大多采用两阶段,即启动过程可以分为 stage1和 stage2:stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2。

Stage1:(汇编编写)

     ·硬件设备初始化(主要是CPU内部器件)
     ·为加载 BootLoader 的 stage2 准备 RAM 空间
     ·拷贝 BootLoader 的 stage2 到 RAM 空间中
     ·设置好堆栈(why??)  
     ·跳转到 stage2 的 C 入口点

Stage2:(C编写)

    ·初始化本阶段要使用到的硬件设备(主要是外设)
    ·将内核映像和根文件系统映像从 flash 上读到RAM 中
    ·调用内核




4. Uboot介绍

下载地址: ftp://ftp.denx.de/pub/u-boot/

文件目录介绍



5. Uboot编译

    1. make mini6410_nand_config-ram256

    2. make CROSS_COMPILE=arm-linux-

详解:

mini6410_nand_config-ram256 :  unconfig
@$(MKCONFIG) mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256

实际运行的是 ./mkconfig mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256 (8个参数)

查看mkconfig源码(实际为shell脚本), 配置成功后 在 ../include/  下生成config.mk 和 config.h 为编译时使用。


编译注意两步 :

a. 连接地址 ../board/samsung/mini6410/u-boot.lds(链接文件)   +   config.mk 里面的偏移地址(根据flash大小定地址)TEXT_BASE = 0xc7e00000

b. ../cpu/s3c64xx/start.S



命令实现: ../common/main.c   目录../common/ 有各种命令实现源码。。。


u-boot终极目的就是启动内核 。。。。分两步

a. 从flash读出内核UImage, 分区名不重要, 关键是代码中写死的 分区起始地址。。。

b. 启动内核, do_bootm_linux

do_bootm_linux又分两步,设置启动参数,告诉内核一些参数(有一个起始地址,按固定格式写入),跳到内核入口地址再启动内核,内核启动后要读取设置的参数可以从起始地址读取。。。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

    相关电子头条文章