1. 概述
1.1 缘由
最近在待业,由于之前的工作是在一个初创的芯片原厂做底层驱动开发,所以最近想着能不能以一个芯片原厂的角度移植最新的u-boot到jz2440开发板呢?于是便有了这篇文章。
整篇文章遵循着以问题为导向的讲解方式,重实践,基本没有原理性的知识,并且从零开始进行移植。我相信,如果你能认真的跟着文章实际操作一把,以后不管遇到什么类型的芯片、什么类型的开发板,同样都能完成从零移植u-boot的工作。
1.2 实现的功能
移植的u-boot 2020.07目前实现的功能如下:
- 如标题所述,全部驱动使用设备树与dm设备模型
- 实现的驱动:
- 串口驱动
- sdcard驱动
- usb udc驱动
- nand flash驱动
- gpio子系统驱动
- pinctrl子系统驱动
- clock子系统驱动
- 硬件无关的命令可以按需添加
- 硬件相关的命令:
-
一些基本的必须的命令,如nand,mmc等
-
ums命令(通过usb总线,支持在pc端查看sdcard中的文件系统,暂时由于sdcard驱动问题导致当分区文件内容比较大时会不稳定)
-
dfu命令(通过usb总线,支持在pc端下载文件到nand flash)
- 其他:
- 支持从nand flash启动u-boot以及内核
- 支持从sdcard启动u-boot以及内核,内核映像文件以及dtb文件放在sdcard的第一个vfat格式分区中,根文件系统放在第二个ext4格式分区中
1.3 后续文章写作思路
我打算把移植工作分为一系列的文章来进行讲解:
- 本篇文章,讲解到以最小的改动实现最初始的打印u-boot启动信息功能为止;
- 以驱动为分类标准,之后的每一个驱动单独用一篇文章来讲解。
另外,之后如果有时间会有相同思路的移植最新linux内核的系列文章,敬请期待!
2. spl闪亮登场
2.1 引入
在讨论u-boot之前,我们需要认识另一位兄弟——spl,这里我暂且称为spl,首先它并不是u-boot中的spl(second program loader,第二程序加载器,相对于soc中固化的bootcode代码而言),但是作用是相同的,那具体是什么呢?
我这里所谓的spl,主要是参考韦东山老师的自己写bootloader的课程中的内容,一个独立于u-boot的工程。
如果将u-boot直接放在nand flash的0地址处,我们知道如果设置开发板为nand flash启动,s3c2440上电后会自动从nand flash复制4KB代码到内部ram,然后运行。这样,u-boot的重定位代码可能会在4KB之后,那之后的u-boot的代码就不会被重定位到sdram,这样显然是不行的。
所以,spl便是我的一个解决方法:
- 首先初始化时钟、sdram以及外部存储设备;
- 然后将u-boot从外部存储设备(sdcard或者nand flash)直接复制到sdram中;
- 最后调整pc指针到u-boot所在的sdram地址处直接运行u-boot。
2.2 工程构成
整个spl工程构成如下图所示,
可以看到,基本和韦东山老师自己写bootloader的课程中的内容一致,唯一不同的一点是,之前由于学习sdcard裸机驱动,我在网上找了一个s3c2440的sdcard裸机驱动代码,现在正好,如果将u-boot.bin放到sdcard中相比于nandflash,对于调试来说那将是非常的方便,只要有一个读卡器,复制一个几百k的u-boot.bin不需要一秒就可以完成。
2.3 整体思路
整个spl的思路如下:
-
首先初始化栈、时钟、sdram、nand flash,
.text .global _start /*****************************************************************************/ @程序入口 _start: @ 0x00: 复位异常的向量地址 b Reset @ 0x04: 未定义指令中止模式的向量地址 HandleUndef: b HandleUndef @ 0x08: 管理模式的向量地址(在用户模式下,可通过SWI指令进入该模式) HandleSvc: b HandleSvc @ 0x0c: 指令预取中止异常的向量地址 HandlePrefetchAbort: b HandlePrefetchAbort @ 0x10: 数据访问中止异常的向量地址 HandleDataAbort: b HandleDataAbort @ 0x14: 保留 HandleNotUsed: b HandleNotUsed @ 0x18: 中断模式的向量地址 HandleIRQ: b HandleIRQ @ 0x1c: 快中断模式的向量地址 HandleFIQ: b HandleFIQ /****************************

本文详细介绍从零开始移植U-Boot到JZ2440开发板的过程,涵盖驱动开发、设备树配置及SPL使用,实现串口、SD卡等驱动功能。
最低0.47元/天 解锁文章
3771

被折叠的 条评论
为什么被折叠?



