bootloader引导与makefile

本文介绍了Bootloader在嵌入式系统中的作用,包括引导装载器的功能、工作模式、烧写方法和启动流程。内容涵盖CPU体系结构的代码、汇编和C语言实现的Stage1,以及Bootloader的代码搬移过程。此外,还讨论了工程搭建中的Makefile和链接脚本,阐述了如何配置程序在不同存储器模式下的运行地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Bootloader引导
    • 嵌入式系统知识
      • 几种常见的嵌入式系统
        • VxWorks
        • Windows
        • 嵌入式Linux
        • uC/OS-II
        • 其他(ecos)
      • 体系结构与内存映射
        • 硬件平台(CPU、SDRAM等)→bootloader(引导装载器)→Linux内核→根文件系统→用户应用程序
      • bootloader是一段可执行程序,完成的主要功能是将可执行文件(一般是操作系统)搬移到内存中,然后将控制权交给这段可执行文件(操作系统)
      • bootloader的工作模式
        • 下载模式
        • 启动加载模式
      • bootloader的烧写
        • bootloader可以配置系统
        • bootloader可以实现自烧写,但系统中没有bootloader时——JTAG烧写
      • bootloader启动流程
        • 1、依赖于CPU体系结构的代码,主要用汇编来实现
        • 2、通常用C语言来实现,这样可以实现复杂的功能,而且具有更好的可读性和可移植性
    • bootloader Stage1代码浅析
      • 第一阶段的代码位于CPU/arm920t/start.S中依次完成以下功能
        • 1、系统上电,进入svc模式
        • 2、关闭看门狗,禁止所有中断
        • 进行初级硬件初始化
        • 将自身代码拷贝到SDRAM中
        • 设置堆栈
        • 清空bss段
        • 跳转到C语言实现的stage2中
      • 单一数据加载/存储指令
        • 加载指令:LDR 目标寄存器,源地址
        • 存储指令:STR 源寄存器,目标地址
      • bic
        • BIC指令
          • BIC{条件}{S}目的寄存器,操作数1,操作数2
          • BIC指令是位清除指令,用于清除操作数1的某些位,并把结果放到目的寄存器中
      • orr
        • ORR指令
          • ORR{条件}{S}目的寄存器,操作数1,操作数2
          • ORR指令是逻辑或指令,用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。该指令常用于设置操作数1的某些位
  • Bootloader的作用和步骤
    • boot的目的
      • 跳到C语言中
        • 关闭看门狗,中断,MMU,CACHE
        • 配置系统工作时钟
        • 配置SDRAM的控制器(行地址数、列地址数、多少块,周期性的充电)
        • 让sp指向可读可写的设备区间中,满足递减栈的规则SDRAM
          • 用哪些模式,就要初始化哪些模式下的sp
          • 每个模式值不能覆盖其他模式
        • 代码搬移
          • 执行速度问题,把程序从存储器(nor-flash)搬移到快速的内存
          • 只把存储器的一部分代码执行出来,把存储器在其他位置上的代码搬到内存,对应存储器的控制器的初始化
      • bl main
    • loader的目的
      • 执行应用逻辑,点灯、uart,load linux kernel
  • 工程搭建Makefile
    • 通用的Makefile,支持SD卡启动和在uboot下直接运行在ram
      • 程序运行时的地址不同
        • DDR2:0x20000000
        • SD:0x0
      • SD 16KB,需要加一个头信息,校验
        • RAM:不需要加头信息
    • 变量集合
      • TARGET:DEP
      • COMMAND
  • 工程搭建链接脚本
    • 概念
      • 告诉链接器如何工作的一个文本文件
        • 1.o2.o3.o→build
    • 要素
      • 哪一个.o放到代码段的起始位置
      • 所有的.o放到哪个基
        • Id-Ttext=xxx
      • 代码段、数据段等等是不是连续
    • 基本语法
      • SECTIONS
        • .text 代码段
        • .rodata 只读数据段
        • .data 数据段
        • .bss 未初始化数据段
  • C代码点灯
    • 找到模块对应的引脚说明将时钟打开
    • 设置引脚功能
    • 对寄存器进行编程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值