前言

EBAZ4205矿板开发过程中遇到的第一问题就是如何启动uboot和linux。其实仅仅是启动uboot和linux并不难,即使是直接使用Xilinx的Petalinux直接编译出来的uboot和kernel放入SD卡就可以成功启动。但是,网口是用不了的,因为Petalinux默认的配置文件是ZC702的,ZC702的网口是直接从PS的专用MIO连接外部PHY;而矿板的网口是通过EMIO从PL引脚连接的以太网PHY。这里经过了很多的尝试之后,终于通过修改设备树解决了uboot和linux启动后网络不可用的问题。 首先回顾一下如何启动uboot和kernel,这里有两套开发工具可以选择: (1)使用Xilinx Petalinux; (2)下载Xilinx在Github上的uboot和Linux Kernel源代码,通过源码配置和编译出镜像;

使用Petalinux制作uboot和kernel 在开始编译之前需要安装好Petalinux,我使用的版本是2017.4。另外需要一张4G或者8G的SD卡。petalinux提供了非常方便的镜像制作方式,只要通过几个简单的命令就可以完成。但是注意,默认的配置文件是ZC702,编译出来的设备树是和EBAZ4205不相符的,会导致网口不可用。所以,我们需要在这个基础上修改或者在配置的时候,直接指定使用外部设备树。

1. 制作设备树

获得适用于EBAZ5205的设备树,可以在petalinux编译出来的设备树上修改,也可以通过XSDK获得。 在SDK中制作设备树,可以参考这个:使用Xilinx XSDK制作设备树

然后需要在这个设备树的基础上进行修改。将生成的system.dtb反编译为system.dts,找到ethernet@e000b000的地方,替换为如下部分。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
ethernet@e000b000 {
compatible = “xlnx,ps7-ethernet-1.00.a”;
reg = <0xe000b000 0x1000>;
status = “okay”;
interrupts = <0x0 0x16 0x4>;
clocks = <0x1 0xd 0x1 0x1e>;
clock-names = “ref_clk”, “aper_clk”;
local-mac-address = [00 0a 35 00 00 00];
xlnx,has-mdio = <0x1>;
#address-cells = <0x1>;
#size-cells = <0x0>;
phy-mode = “gmii”;
xlnx,ptp-enet-clock = <0x69f6bcb>;
};

然后重新生成设备树文件,设备树编译指令为:

1
2
dtc –I dtb –O dts –o system.dts system.dtb
dtc –I dts –O dtb –o system.dtb system.dts

2.配置指定使用外部设备树 然后在Petalinux配置时,petalinux-config 指定外部设备树。

3. 编译

然后直接编译 petalinux-build。会在工程目录下生成BOOT.bin、image.ub和rootfs.tar.gz。

4. SD卡启动

从SD卡启动需要将SD卡进行分区,SD分区在Linux上可以直接使用系统自带的磁盘管理工具。比如,Centos上的Disk工具。先把SD的主分区划分出一个100MB的分区,初始化为FAT32文件系统,并命名为BOOT。剩下的全部空间初始化为ext4文件系统,命名为RootFS。 将BOOT.bin和image.ub文件拷贝到BOOT分区,将rootfs.tar.gz解压到RootFS分区。然后将SD卡插入单板,上电即可启动了。测试网口,可以用了。

使用源码方式制作uboot和kernel

如果安装了SDK其实就已经有了ARM的交叉编译工具链了。不需要再额外安装交叉编译工具链。

1. 下载uboot和kernel源码

首先在github上下载Xilinx官方的uboot和kernel源码,源码下载地址: https://github.com/Xilinx/u-boot-xlnx https://github.com/Xilinx/linux-xlnx/

2. 源码编译

然后进行源码目录进行编译:

1
2
3
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make EXT_DTB=…/…/sdk/device_tree_bsp_0/Xilinx_sdk.dtb

3. 生成启动镜像

然后make menuconfig,指定使用外部设备树,编译出来的uboot.elf文件和fsbl、bit文件一起打包成BOOT.bin,放入SD卡的FAT分区,即可启动uboot,修改环境变量ipaddr,gateway,尝试ping矿板连接的主机IP地址,可以ping通。