虽然嵌入式开发流程都大致一样,但是不同公司、不同的芯片开发流程总是还有差异的。
之前一直在做ARM的嵌入式开发,一开始上手powerpc总是有些担心,但是上手之后,发现其实和ARM差不多,只不过资料是真的少,可交流的人也不多。
通过大概2个月的摸索,从刚开始的烧录程序都不会,到现在总算把linux跑起来,遇到不少坑,总结一下。
裸机开发环境搭建
- 到nxp官网找资料熟悉一下开发环境和大概的开发流程
- 搭建裸机开发环境,安装codewarrior,调试好usb tap或者eth tap
硬件验证
-
验证芯片是否可以正常工作,创建SRAM程序,debug看是否可以单步运行
-
验证DDR参数,使用QCVS工具,验证生成DDR的最佳参数
-
验证程序在DDR上的运行,创建RAM程序,根据上一步生成的DDR参数,修改RAM的tcl脚本,debug看是否可以单步
-
验证串口,上一步的RAM程序已经可以从串口输出信息了,但是可能不正确,如果不正确,修改codewarrior的serial库,重新编译链接
SDK环境搭建
- 从nxp官网找到sdk手册,先大概浏览一遍
- 根据手册,下载SDK虚拟机,然后把Yocto的流程走一遍
u-boot移植
- 阅读u-boot源码和RM手册,了解芯片启动流程
- u-boot中config文件宏含义
- 在u-boot源码中找一块p1020的板子,最好与我们的板子相近的,根据这个板子,创建我们自己的单板
- 修改自己创建的单板的启动参数,主要是ddr和时钟参数,编译nor启动的bin
- 阅读p1020RM手册,研究芯片启动流程,确认芯片启动的必要条件都已达到,确认上电读取第一条指令的eLBC的地址,这个地址就是nor的烧写地址
- 根据这个nor的烧写地址,修改我们的tcl文件,然后使用codewarrior烧写u-boot
- 串口连接串口,上电看u-boot是否启动成功
- 串口打印信息可能比较乱,分析,查看RM
- 打印正常后,u-boot没有完全起来,发现是SPD的问题
- 移植RTL8211网卡
- 移植适配的大小的nor
- 移植nand
- 移植RTC
- 移植sgmii网口,用于与FPGA通信,FPGA部分修改了硬件
- 移植LM75A
- 了解local bus总线
- 调试FPGA selectMap启动
- 移植SD卡驱动
- 调试PCIE与FPGA通信
- 调试u-boot从sd卡启动
- 调试u-boot的nor启动参数,RAM文件系统
- 调试u-boot的nor启动参数,jffs2文件系统
- u-boot更新镜像
- u-boot添加新命令的方法
- u-boot调试经验总结
Linux kernel移植
- 先编译下make uImage和make p1020rdb-pd_32b.dtb,出现一些错误,解决掉
- make menuconfig裁剪掉一些我们不需要的spi、usb、sound
- 尝试启动,mtd错误,修改dts中nor分区
- 添加sys gpio接口
- rtc移植
- RAM文件系统和jffs2文件系统
- LM75A移植
- NAND移植
文件系统的制作
- RAM文件系统的制作
- jffs2文件系统的制作
应用软件移植
- vtysh的移植