View
167
Download
13
Category
Preview:
DESCRIPTION
怎样从 0 开始写 bootloader ?. 李明 北京亚嵌教育研究中心 http://www.akaedu.org. 开场介绍. 本次课程讲什么? 从 0 开始写 bootloader 本次课程谁来讲? limingth@akaedu.org 本次课程适合的听众是哪些人? 有时间在接下来 1 个月内开始动手实践的人 已经购买或者准备购买开发板的人. 今日主题. 从 0 开始写 bootloader 0( 零基础 ) 指的是什么? 学习过 C 语言 了解 ARM 体系结构和汇编语言 没有在开发板上做过软件开发 Bootloader 是什么? - PowerPoint PPT Presentation
Citation preview
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 + 3.5"LCD 套餐 : 680RMB mini2440 单板 : 499RMB
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
哈哈 , 搞定了
Recommended