1 / 20

怎样从 0 开始写 bootloader ?

怎样从 0 开始写 bootloader ?. 李明 北京亚嵌教育研究中心 http://www.akaedu.org. 开场介绍. 本次课程讲什么? 从 0 开始写 bootloader 本次课程谁来讲? limingth@akaedu.org 本次课程适合的听众是哪些人? 有时间在接下来 1 个月内开始动手实践的人 已经购买或者准备购买开发板的人. 今日主题. 从 0 开始写 bootloader 0( 零基础 ) 指的是什么? 学习过 C 语言 了解 ARM 体系结构和汇编语言 没有在开发板上做过软件开发 Bootloader 是什么?

lowri
Download Presentation

怎样从 0 开始写 bootloader ?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 怎样从0开始写bootloader? 李明 北京亚嵌教育研究中心 http://www.akaedu.org

  2. 开场介绍 • 本次课程讲什么? • 从0开始写bootloader • 本次课程谁来讲? • limingth@akaedu.org • 本次课程适合的听众是哪些人? • 有时间在接下来1个月内开始动手实践的人 • 已经购买或者准备购买开发板的人

  3. 今日主题 • 从0开始写bootloader • 0(零基础)指的是什么? • 学习过C语言 • 了解ARM体系结构和汇编语言 • 没有在开发板上做过软件开发 • Bootloader是什么? • Boot: 能够初始化基本硬件(时钟,存储,串口) • Loader: 能够加载,运行,固化外部程序(操作系统)

  4. 学习动机 • 为什么会有bootloader? • 为什么我们要自己写Bootloader? • 移植一个别人写的bootloader可以吗? • u-boot/vivi/redboot/blob/… • 你怎样学游泳?

  5. 本次课程收获 • 了解不同嵌入式软件运行的硬件基础和依赖 • 软件运行的存储芯片 • 哪些程序运行依赖栈空间? • Bootloader能调用库函数吗? • main函数的功过是非 • 用全局变量好,还是局部变量好? • 掌握一种嵌入式开发工具,开发流程和开发方法 • ARM ADS1.2 IDE (JTAG调试, Flash烧写,AXD下载) • 命令行工具(armcc, armasm, armlink, fromelf, make) • 步步为营,左右互搏,屡试不爽 • 通过写bootloader,深刻领会ARM嵌入式开发核心概念之“寄存器” • sp(栈指针),lr(链接返回地址),pc,CPSR • GPIO寄存器,UART寄存器,NandFlash寄存器 • ARM Architecture Referrence Manual plus DataSheet

  6. 预备

  7. 预备工作之一 • 首先, 得有一个板子 • 推荐友善之臂 mini2440 • http://www.arm9.net/mini2440.asp mini2440单板 : 499RMB mini2440 + 3.5"LCD 套餐 : 680RMB

  8. 预备工作之二 • 书籍 • 《ARM Architecture Reference Manual》 • PDF,Part A • 《ARM体系结构与编程》 • 清华大学出版社,杜春雷著 以上2本都有电子版提供, 可以课后向张婷老师要一下.

  9. 预备工作之三 • 构建基础知识体系 • 硬件知识 • ARM寄存器 • 37个寄存器:R0-R12, R13(SP),R14(LR),R15(PC),CPSR(SPSR) • ARM芯片外设控制器 • WatchDog(看门狗), • GPIO(通用IO), • UART(串口), • Nand Flash Controller, • Clock & Power Management(时钟和电源管理),

  10. 预备工作之三 • 构建基础知识体系 • 软件知识 • ARM开发调试工具 • ADS1.2,AXD • make,hypertrm(超级终端) • ARM命令行工具 • armcc,armasm,armlink,fromelf • ARM汇编指令 • mov,add,sub, • b,bl, • ldr,str

  11. 未完待续,敬请关注谢谢!

  12. 动手实践 • 目标--实现一个bootloader • 支持外部程序的下载,运行, 固化和自加载 • 完成这个目标, 有哪些中间步骤? • 1-能够实现led灯的闪烁 (汇编级和C语言级) • 2-能够实现串口的初始化和读写(C语言) • 3-能够实现基于串口的下载和执行(C语言) • 4-能够实现命令行解析方式的下载和执行 • 5-能够实现Flash的固化 • 6-能够实现固化后的自加载启动

  13. 中间里程碑之一 • 闪灯 • 汇编语言实现 • LDR, STR 内存读写指令 • B, Bl 跳转指令 • armasm 汇编器, armlink 链接器 • S3C2440 DataSheet 数据手册 • SFR 特殊功能寄存器之 GPIO 控制器 • 硬件设计原理图 • H-jtag flasher 烧写

  14. 中间里程碑之一 • 闪灯 • C语言实现 • SRAM内部存储和地址 • sp 堆栈指针和栈空间 • armcc编译器 • volatile 关键字 • #define 宏用法 • main函数 • 反汇编工具 fromelf • SDRAM初始化

  15. 中间里程碑之二 • 串口 • 串口工作原理 • 缓冲寄存器,移位寄存器 • 帧格式 • 数据位,停止位,奇偶校验,流控,波特率 • 时钟频率设置 • IO管脚的功能复用 • 控制寄存器,数据寄存器,状态寄存器

  16. 中间里程碑之三 • 下载和执行 • 接收二进制可执行代码 • getchar • 跳转命令的C语言实现 • 函数指针 • Xmodem协议 • 协议帧格式 • 传输过程控制

  17. 中间里程碑之四 • 命令行解析 • 标准IO输入输出 • gets • puts • printf • 字符串函数 • strcmp 函数(字符串比较) • strstr 函数(字符串匹配) • atoi 函数(字符串转整数) • 常用命令 • download • go • flashw

  18. 中间里程碑之五 • Flash固化 • flash 的内部存储结构 • flash 与主芯片的连接关系 • 怎样传地址, 怎样传数据 • flash 的初始化配置 • flash 的读写时序 • Nor flash • Nand flash

  19. 中间里程碑之六 • 自启动方式 • 加电后的启动流程 • 等待1-3秒, 如无用户输入, 则进入自加载模式 • Flash的分区 • 加载不同应用(操作系统) • 传递给内核相应参数

  20. 哈哈, 搞定了

More Related