uboot在运行过程中会初始化部分硬件,包括串口和网卡,串口作为uboot进行交互的控制台,通过PC的串口进行连接,串口的驱动是芯片厂商已经实现的,会有默认的串口,如果需要修改,查看芯片手册,找到要换的串口基地址,然后修改uboot的config文件中关于串口设置,同时修改完config文件之后修改uboot的设备树,要保持一致,config文件是uboot的设置,里面包括设备树文件的文件名等设置。
uboot的移植并不是说我们完完全全的从零开始将uboot移植到我们现在所使用的开发板或者开发平台上。这个对于我们来说基本是不可能的,这个工作一般是半导体厂商做的,半导体厂商负责将uboot移植到他们的芯片上,因此半导体厂商都会自己做一个开发板,这个开发板就叫做原厂开发板,比如大家学习STM32的时候听说过的discover开发板就是ST自己做的。半导体厂商会将uboot移植到他们自己的原厂开发板上,测试好以后就会将这个uboot发布出去,这就是大家常说的原厂BSP包。我们一般做产品的时候就会参考原厂的开发板做硬件,然后在原厂提供的BSP包上做修改,将uboot或者linux kernel移植到我们的硬件上。这个就是uboot移植的一般流程:
① 在uboot中找到参考的开发平台,一般是原厂的开发板。
② 参考原厂开发板移植uboot到我们所使用的开发板上。
uboot的移植都是需要参考dmeo板,而半导体厂商会在他们自己的开发板上移植好uboot、linux kernel和systemfs等,最终制作好BSP包提供给用户。我们可以在官方提供的BSP包的基础上添加我们的板子,也就是俗称的移植,我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到uboot下驱动的移植,一般uboot中需要解决串口、QSPI、EMMC或SD卡、网络和LCD驱动,因为uboot的主要目的就是启动Linux内核,所以不需要考虑太多的外设驱动,在uboot中添加自己的板子信息,根据自己板子的实际情况来修改uboot中的驱动。
kernel运行起来之后的终端采用tty驱动,底层也是通过串口,也可以通过网络,同时驱动程序中打印的内容也会通过串口打印到终端屏幕。kernel采用的串口终端通过uboot传递的参数进行设置,同时,设备树中也会有设置。这里设置console为ttyPS0,因为linux启动以后ZYNQ的串口0在linux下的设备文件就是/dev/ttyPS0,在Linux下,一切皆文件。