一、启动相关
1.bss段存放 初值是0和未初始化的全局变量,从bss_start到bss_end,从bss_start到_start是bootloader的大小,其中不包含,bss段。
2.通过反汇编文件,查看bss起始地址结束地址等,可确定程序大小,0x33F80000到0x34000000只有512KB。
3.相对跳转操作 ldr pc,函数名,使程序从片内SRAM直接跳转到SDRAM,当然要在重定向bootloader之后。
二、NAND FLASH 相关1.NAND FLASH 启动时,CPU会复制 NAND FLASH 最开始 4KB 到 Stepping Stone 即CPU SRAM,复制过程由硬件完成。
2.NAND FLASH 由CPU的 NAND FLASH 控制器控制,连接引脚固定,NAND FLASH 没有地址线,写命令、地址、数据,由CPU的 NAND FLASH 控制器控制,直接修改关于 NAND FLASH 的各寄存器值,而不是直接控制 NAND FLASH 的各引脚,具体修改值由 NAND FLASH 本身 Command Sets决定!
3.编写驱动函数时,按照 NAND FLASH 手册流程图编写 ,如读流程 Read Flow Chart
4.对8位 NAND FLASH 操作,采用字节char访问,来给CPU地址寄存器NFADDR赋值,以免出错。
5.ECC 为弥补 NAND FLASH 缺陷,读每页可能有1位发生错误,写过程:写入Page,生成ECC码,写ECC到OOB区域 ;读过程:读取Page,读取OOB中ECC,与读过程中生成的ECC比较,若不相等,则根据某种算法找到错误并修改,ECC可软件生成,也可硬件生成
6.NAND FLASH 启动时,0地址是片内0地址,所以无法去访问 NOR FLASH,所以 NOR FLASH 0KB。
7.为了兼容不同的CPU、NAND FALSH,u-boot肯定是很复杂,执行判断我们用的芯片种类等操作,其中的一系列代码最终调用 NAND FLASH 的读写等等函数,移植需要做的是:(1)修改u-boot中相关寄存器设置(2)分析u-boot中函数调用关系,各函数的实现过程(3)修改代码,替换成自己的读写等函数。