课程大纲
第一讲:ARM基础
要点:ARM简史,ARM的三大系列,ARM手册,ARM架构的演进过程,ARMv8,ARM的微架构,Cortex,A53,A72,RK3328,GDK8,通过LINUX内核虚文件认识ARMv8
第二讲:理解应用层寄存器和指令
要点:ARM指令集,通用寄存器,Banked寄存器,特殊寄存器,THUMB指令,常用指令,谓词执行,访问内存的指令,ARM反汇编,观看函数,在NanoDebugger(NDB)中理解ARM的应用层指令和寄存器
第三讲:函数调用和栈
要点:分支指令,调用子函数,LR寄存器,栈,栈指针寄存器,压栈指令,栈帧,栈上的数据组织,栈回溯,栈回溯的原理,栈溢出,栈保护,在NDB下认识栈上的数据
第四讲:特权级别和系统编程
要点:处理器状态,系统寄存器,特权级别,处理器扩展,访问系统寄存器,MRS和MSR指令,ATF(ARM Trusted Firmware)代码,分阶段初始化,U-Boot(两个阶段),内核命令行,系统启动过程
第五讲:硬件差异和设备树(DTS)
要点:五花八门的ARM硬件,问题,x86和PC的先进经验,设备树描述,DTS,DTB,编译方法,传递内核命令行,案例(因为命令行参数不当导致的内核Panic)
第六讲:虚拟内存
要点:地址翻译,页表,页表格式,MMU,页表翻译过程,页属性,访问权限,TLB,进程切换,缺页异常,观察页表,手工翻译内存地址
第七讲:异常和中断处理
要点:异常处理寄存器,异常处理过程,同步异常和异步异常,中断处理,GIC,GIC的结构,GIC的配置,GIC的初始化,Linux内核中的中断处理代码
第八讲:外存和设备管理
要点:MMC,eMMC,SD联盟和SDIO,DesignWare的SDIO控制器,DTS中的配置参数,SDIO驱动,连接闪存时的设备栈,连接无线(WiFi)时的软件栈,结合GDK8的深入分析