本文是本人将Uboot 移植到树莓派上的过程, 其中由于树莓派的特殊性, 参考 https://www.embbnux.com/2014/04/21/raspberry_bootloader_startup/ , 因此并不能算真正意义上的移植, 但是对于Uboot的学习还是非常有帮助的.
目前仅仅是能从串口读取出u-boot 的打印,能进入命令行, 其中有一些问题还没有整明白,不过先记录下来,慢慢填坑。有疑问或者发现本文有错误,请发邮件至[email protected] , 欢迎交流!
注:
1) 树莓派版本 : raspberry pi3B
2) u-boot 版本(注:没有在该版本上做任何改动):
步骤如下:
1)树莓派连接串口(显示器也可以接HDMI),参考 http://www.cnblogs.com/syyxy/p/9030868.html
2)获取树莓派交叉编译工具链
git clone git://github.com/raspberrypi/tools.git raspberrypi_tools/
3)将工具链拷贝到自己服务器的常用路径, 我是将 raspeberrypi_src/tools/arm-bcm2708 拷贝到了 /usr/local/rpi/目录下:
4)获取U-boot 源代码(请注意我使用的版本)
git clone git://git.denx.de/u-boot.git u-boot/
5) cd 到u-boot/ 目录下,编译 rpi_2_defconfig 文件
注: 我们通过 查看根目录下的 config/ 目录,可以看到 和树莓派相关的config文件 有4 个:
可是明显可以根据命名规则, 看出 rpi_2_defconfig 是树莓派2代的 config, rpi_3_32b_defconfig 是树莓派3B的config, rpi_3_defconfig 是树莓派3代的config. rpi_defconfig 不确定。但是我这边只有make rpi_2_defconfig 才能起来,其他的要么编译报错,要么起不来(串口无任何输出,HDMI 显示彩虹屏)。这是一个坑, 原因待查。我百度的网上所有的资料都说 3 代需要 make rpi_3_defconfig,但是起不来。
6) 指定交叉编译工具链, 编译u-boot.bin
make CROSS_COMPILE=/usr/local/rpi/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-
最后将 u-boot 的根目录下的 u-boot.bin 拷贝到 树莓派SD卡的根目录,并且在SD卡的同一级目录下的config.txt中,指定kernel文件为u-boot.bin
7) 将SD 卡插回到板子上, 查看串口,或者HDMI ,我串口打印如下:
8) 至此, u-boot 学习, 万里长征的第一步完成了。在我移植的过程中, 由于树莓派的原生bootloader的DMI,串口没有任何显示和打印,因此如果遇到什么问题, 都只能靠猜测。 make rpi_2_defconfig 也是我试了好久(之前一直以为是rpi_3_defconfig,rpi_3_32b_defconfig,rpi_defconfig,压根都没有想过用rpi_2_defconfig), 实在是没办法了,蒙出来的。所以说我能移植出来原因很大程度上是运气好。希望这篇文章能够帮助到遇到问题的朋友。