背景
在开发自己项目的时候,需要针对自己的板子进行相关的移植工作。在完成初步的U-boot移植后,发现U-boot无法ping通host主机。
移植方法是参考的正点原子教程。会不会是因为硬件不一致导致的?如前面文中提到的,板载使用的是KSZ9031,并不是官方开发板使用的型号。
移植过程
整个的移植过程,其实按照正点原子的来不会有一点问题!说一下在这过程中遇到的问题,方便后续查阅。
一开始我有个疑问:zynq的Linux开发可以借助petalinux工具,可以说这个工具配置配置就可以,为什么还要自己手动移植?到目前为止,我只能理解到,自己移植可以加深对整个Linux以及U-boot的工作细节的理解。
就比如在petalinux中的petalinux-build
一句话就可以完成编译,如果不使用petalinux工具呢?就要使用make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
这样的编译命令。看到这个命令,你就要理解何为架构?何为交叉编译工具链?诸如此类。
再来熟悉一下三剑客:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- atk_7020_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
如果你不想每次都要搞这么复杂,输入这么长命令,那就要了解下“shell
”,即脚本。把以上命令写到一个脚本里面,那么每次就只要执行一次脚本就可以顺序执行上述三条命令。
执行完上述脚本,就会自动编译完成U-boot。
接下来是运行测试环节了,正常运行应该是使用SD卡进行启动,但是这样太费事了,所以就有了JTAG启动U-boot的方式。
xsct uboot.tcl
使用上述命令进行烧录,uboot.tcl这个文件是需要自己实现的,如下
connect
source hw-description/ps7_init.tcl
targets -set -filter {
name =~"APU"}
loadhw hw-description/system.hdf
stop
ps7_init
targets -set -nocase -filter {
name =~ "ARM*#0"}
rst -processor
dow u-boot
con
这个文件主要实现的连接仿真器,PS端初始化,U-boot烧录。当然,后面移植了Linux内核的时候还可以修改成烧录Linux Kernel。执行烧录命令后,如果报错,大概率是仿真器没有连上,就要考虑驱动什么的是不是装好了。
连不上JTAG信息如下
如果没什么问题,U-boot就会通过JTAG烧录好,对应的终端会打印U-boot的运行信息。
U-Boot 2018.01 (May