怎样从0开始写bootloader? 李明 北京亚嵌教育研究中心 http://www.akaedu.org
开场介绍 本次课程讲什么? 本次课程谁来讲? 本次课程适合的听众是哪些人? 从0开始写bootloader limingth@akaedu.org 本次课程适合的听众是哪些人? 有时间在接下来1个月内开始动手实践的人 已经购买或者准备购买开发板的人
今日主题 从0开始写bootloader 0(零基础)指的是什么? Bootloader是什么? 学习过C语言 了解ARM体系结构和汇编语言 没有在开发板上做过软件开发 Bootloader是什么? Boot: 能够初始化基本硬件(时钟,存储,串口) Loader: 能够加载,运行,固化外部程序(操作系统)
学习动机 为什么会有bootloader? 为什么我们要自己写Bootloader? 你怎样学游泳? u-boot/vivi/redboot/blob/… 你怎样学游泳?
本次课程收获 了解不同嵌入式软件运行的硬件基础和依赖 掌握一种嵌入式开发工具,开发流程和开发方法 软件运行的存储芯片 哪些程序运行依赖栈空间? 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
预备
预备工作之一 首先, 得有一个板子 推荐友善之臂 mini2440 http://www.arm9.net/mini2440.asp mini2440单板 : 499RMB mini2440 + 3.5"LCD 套餐 : 680RMB
预备工作之二 书籍 以上2本都有电子版提供, 可以课后向张婷老师要一下. 《ARM Architecture Reference Manual》 PDF,Part A 《ARM体系结构与编程》 清华大学出版社,杜春雷著 以上2本都有电子版提供, 可以课后向张婷老师要一下.
预备工作之三 构建基础知识体系 硬件知识 ARM寄存器 ARM芯片外设控制器 37个寄存器:R0-R12, R13(SP),R14(LR),R15(PC),CPSR(SPSR) ARM芯片外设控制器 WatchDog(看门狗), GPIO(通用IO), UART(串口), Nand Flash Controller, Clock & Power Management(时钟和电源管理),
预备工作之三 构建基础知识体系 软件知识 ARM开发调试工具 ARM命令行工具 ARM汇编指令 ADS1.2,AXD make,hypertrm(超级终端) ARM命令行工具 armcc,armasm,armlink,fromelf ARM汇编指令 mov,add,sub, b,bl, ldr,str
未完待续,敬请关注 谢谢!
动手实践 目标--实现一个bootloader 完成这个目标, 有哪些中间步骤? 支持外部程序的下载,运行, 固化和自加载 1-能够实现led灯的闪烁 (汇编级和C语言级) 2-能够实现串口的初始化和读写(C语言) 3-能够实现基于串口的下载和执行(C语言) 4-能够实现命令行解析方式的下载和执行 5-能够实现Flash的固化 6-能够实现固化后的自加载启动
中间里程碑之一 闪灯 汇编语言实现 LDR, STR 内存读写指令 B, Bl 跳转指令 armasm 汇编器, armlink 链接器 S3C2440 DataSheet 数据手册 SFR 特殊功能寄存器之 GPIO 控制器 硬件设计原理图 H-jtag flasher 烧写
中间里程碑之一 闪灯 C语言实现 SDRAM初始化 SRAM内部存储和地址 sp 堆栈指针和栈空间 armcc编译器 volatile 关键字 #define 宏用法 main函数 反汇编工具 fromelf SDRAM初始化
中间里程碑之二 串口 串口工作原理 帧格式 时钟频率设置 IO管脚的功能复用 控制寄存器,数据寄存器,状态寄存器 缓冲寄存器,移位寄存器 数据位,停止位,奇偶校验,流控,波特率 时钟频率设置 IO管脚的功能复用 控制寄存器,数据寄存器,状态寄存器
中间里程碑之三 下载和执行 接收二进制可执行代码 getchar 跳转命令的C语言实现 函数指针 Xmodem协议 协议帧格式 传输过程控制
中间里程碑之四 命令行解析 标准IO输入输出 字符串函数 常用命令 gets puts printf strcmp 函数(字符串比较) strstr 函数(字符串匹配) atoi 函数(字符串转整数) 常用命令 download go flashw
中间里程碑之五 Flash固化 flash 的内部存储结构 flash 与主芯片的连接关系 flash 的初始化配置 flash 的读写时序 怎样传地址, 怎样传数据 flash 的初始化配置 flash 的读写时序 Nor flash Nand flash
中间里程碑之六 自启动方式 加电后的启动流程 Flash的分区 等待1-3秒, 如无用户输入, 则进入自加载模式 加载不同应用(操作系统) 传递给内核相应参数
哈哈, 搞定了