ZYNQ7020使用传统方式移植Linux系统
前言最近在使用ZYNQ7020开发板,写个文章记录下,分享下过程也以便日后查看。在开发过程中需要使用到Linux系统,由于网速原因下载petalinux安装包时间过长,急性子,所以琢磨着使用传统的方式来进行移植。废话不多说,开始记录!开发平台:vivado2017.4 SDK 2017.4准备工作1、如何新建工程以及如何进行硬件部分的配置在此不过阐述,请参考网上其它...
-
前言
最近在使用ZYNQ7020开发板,写个文章记录下,分享下过程也以便日后查看。在开发过程中需要使用到Linux系统,由于网速原因下载petalinux安装包时间过长,急性子,所以琢磨着使用传统的方式来进行移植。废话不多说,开始记录!
开发平台:vivado2017.4 SDK 2017.4
-
准备工作
1、如何新建工程以及如何进行硬件部分的配置在此不过阐述,请参考网上其它文章,主要完成SD卡,网卡以及QSPI的引脚配置。这里需要提一下的就是将网卡以及SD卡引脚设置为高速引脚。
2、u-boot,device-tree,kernel下载。地址分别是:https://github.com/Xilinx/u-boot-xlnx (u-boot)、https://github.com/Xilinx/linux-xlnx(kernel)、https://github.com/Xilinx/device-tree-xlnx(device-tree)。此处经过本人的血泪教训,建议u-boot下载跟开发平台配套的版本,否则可能导致一系列未知的问题,kernel可以下载最新的版本,另外使用使用传统方式移植时,需要安装arm-linux-gnueabihf交叉编译工具。
-
安装32位支持工作包
在命令行中,输入安装 32 位支持包的命令,格式为:apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
-
设置交叉编译器环境
我是直接在ubuntu中安装了一个vivado linux版本的,在安装目录下就能找到交叉编译器,或者直接网上下载随便放在一个目录下,我放在了/opt目录下。
设置环境变量有两种方式,一种临时的,一种永久的。为了方便我直接更改了~/.bashrc文件,该方式不必每次打开一个终端都重新配置。另一种就是每次打开终端,执行一次
source /opt/Xilinx/SDK/2017.2/settings64.sh
运行ARM +TAB两次,应该能看到环境下的交叉编译器
-
一切准备工作完成之后,就开始u-boot和kernel的编译工作了
1、编译u-boot,进去下载好的u-boot文件夹,修改include/configs文件夹中的zynq-common.h文件的sdboot部分如下,去除ramdisk的启动。
依次执行
make distclean //清除配置文件和编译中间结果
make CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig
//重新配置,生成makefile,具体板子不一样,在U-Boot/configs文件夹下
make CROSS_COMPILE=arm-linux-gnueabihf-
当 u-boot 编译成功后,在 u-boot 目录下会生成 u-boot(一个 elf 文件)、 u-boot.bin 和u-boot.srec 等文件,如下图所示,其中 u-boot(elf 文件)将用来制作最后启动的BOOT.bin文件。(这里可能会有看到生成一个uboot和一个uboot.elf文件,选uboot就行)
2、编译内核
进入内核目录,依次执行(时间会有点漫长)
make distclean //清除配置文件和编译中间结果
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zc702_defconfig //重新配置,生成makefile
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x8000 uImage //编译内核,且生成uImage
完成之后会在arch/arm/boot 目录下产生 uImage 文件
3、生成设备树
在网上很多都是直接使用了内核中的设备树文件,这里使用官方的另一种方式,利用SDK来生成对应工程的设备树文件。
将下载好的device-tree-xlnx-xilinx-v2017.4导入到SDK中
完成后生成设备树文件
将生成的设备树文件放入ubuntu中,使用内核的dtc工具生成devicetree.dtb,进入内核目录,执行
./scripts/dtc/dtc -I dts -O dtb -o /设备树文件目录/devicetrdeee.dtb /设备树文件目录/system-top.dts
-
制作SD卡
将SD卡利用读卡器插入Ubuntu,在Ubuntu搜索路径中,输入 disk,会出现磁盘
点击+号添加分区,第一个分区为FAT类型,用来存放引导文件,第二个分区为EXT4类型,存放文件系统,这里分区完毕后可以点击挂载。
-
同步根文件系统
这里使用的是debian根文件系统,去网上下载。
1、这里主要注意的是解压方式,只能使用命令解压sudo tar zxvpf debian_rootfs.tar.gz,千万别使用右键解压
2、进入根文件系统,在命令窗口输入"sudo rsync -av ./ /media/alinx/EXT"(/media/user/EXT 为 SD卡 EXT4分区的路径,可能会有不同,请根据自己实际情冴修改),开始同步当前目录到 SD卡的EXT分区根目录, 同步可能需要十几分钟的时间。
-
生成BOOT.bin文件
打开生成设备树工程的SDK,生成一个FSBL模板,完成后右键create boot image,选择存放路径,依次按fsbl.elf,平台bit文件,以及编译的u-boot文件(重命名为uboot.elf)顺序放入,生成BOOT.bin
-
创建uEnv.txt文件
新建一个文本文件,命名为uEnv.txt,写入,保存
bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait
将生成的BOOT.bin、uImage、devicetrdeee.dtb、uEnv.txt文件放入SDK的FAT分区。将SD卡放入板子,选择从SD卡启动,至此结束。
-
末尾
其实这里可以不需要uEnv.txt文件,我也是在后续的过程中才知道,在生成的设备树文件中的system-top.dts文件中添加重新生成新的设备树文件就行。
后面有时间写下裸机双系统和Linux+裸机双系统的移植,第一次写文章,如有错误,敬请指出!
更多推荐
所有评论(0)