📘 MTK8678 · Bootloader 实战

30章 从零到移植
01 Bootloader 基础概念
  • 什么是Bootloader
  • 嵌入式系统中的作用
  • MTK平台架构概览
02 MTK8678 平台概述
  • 芯片特性介绍
  • 硬件架构框图
  • 关键外设接口 (UART, SPI, NAND, eMMC)
03 开发环境搭建
  • Ubuntu系统安装
  • 交叉编译工具链 (GCC for ARM)
  • 源码管理工具 Repo
04 源码获取与目录结构
  • 从MTK官方获取源码
  • LK (Little Kernel) 目录解析
  • 关键文件说明 (bootable/bootloader/lk)
05 编译系统详解
  • Makefile体系分析
  • BoardConfig.mk配置
  • 编译命令与镜像 (lk.bin, preloader.bin)
06 链接脚本与内存布局
  • 链接脚本 (.ld) 解析
  • 代码段/数据段/BSS段布局
  • SRAM与DRAM地址映射
07 启动流程第一阶段 (Preloader)
  • ROM Code启动
  • Preloader加载与执行
  • 硬件初始化 (时钟, PLL, DDR)
08 启动流程第二阶段 (LK)
  • Preloader跳转到LK
  • LK入口函数 (kmain)
  • 架构初始化 (MMU, Cache, 中断)
09 设备树 (Device Tree) 基础
  • 设备树概念
  • dts/dtsi文件语法
  • MTK平台设备树定制
10 时钟与定时器驱动
  • 时钟树配置
  • GPT定时器驱动移植
  • 延时函数 (udelay, mdelay)
11 GPIO驱动移植
  • GPIO控制器寄存器
  • Pinmux配置
  • gpio_set_value / gpio_get_value
12 UART驱动移植
  • UART控制器初始化
  • 波特率设置
  • 串口收发 & 调试串口
13 SPI驱动移植
  • SPI控制器特性
  • SPI时序配置
  • Flash读写 (SFDP命令)
14 NAND Flash驱动移植
  • NAND控制器初始化
  • ECC校验配置
  • 坏块管理 & 读写擦除
15 eMMC驱动移植
  • eMMC协议基础
  • MMC控制器初始化
  • 分区管理 & 读写操作
16 显示驱动 (LCM) 移植
  • MIPI DSI接口配置
  • LCD初始化序列
  • framebuffer驱动实现
17 触摸屏驱动移植
  • I2C接口配置
  • 触摸屏初始化
  • 坐标上报与校准
18 按键驱动移植
  • 矩阵键盘 / ADC按键
  • 按键消抖处理
  • 长按/短按逻辑
19 电池与充电管理
  • PMIC初始化
  • 电池电压检测
  • 充电状态机 & 低电量关机
20 安全启动 (Secure Boot)
  • MTK安全启动架构
  • 签名工具 & 公钥烧录
  • 校验流程
21 Fastboot协议实现
  • Fastboot命令解析
  • 下载与烧录功能
  • 分区表管理
22 OTA升级支持
  • AB分区策略
  • 升级包格式解析
  • 校验与回滚机制
23 日志系统与调试技巧
  • UART日志输出
  • 内存dump分析
  • JTAG调试方法
24 内存测试与优化
  • DDR压力测试
  • 内存带宽测试
  • Cache一致性优化
25 性能优化
  • 启动时间优化 (Boot Time)
  • 代码尺寸优化 (Size)
  • 功耗优化
26 多板级支持 (BSP)
  • 单板配置分离
  • BoardConfig差异化
  • 多项目维护策略
27 常见问题与调试
  • 启动卡死分析
  • 驱动加载失败
  • 内存访问异常 & 时序排查
28 实战项目一:从零移植
  • 新硬件平台步骤详解
  • 环境适配 & 最小系统
  • 点亮LED与串口输出
29 实战项目二:自定义命令
  • 添加内存测试命令
  • 版本显示命令
  • 功能扩展框架
30 课程总结与进阶方向
  • Bootloader开发职业路径
  • 开源项目推荐 (U-Boot, Barebox)
  • 后续学习建议