移植linux系统至zynq板卡--简单实用

如何移植linux系统至zynq板卡上呢?这里我们只讲方法,不讲原理,适合小白参考!

一、必要信息

假设你手上有一块zynq的板卡,现在你需要给板卡搭载一个linux操作系统,以及开发一些接口模块的驱动程序。那么首先你需要知道板卡的原理图,原理图中你需要关注以下几点:

  • zynq具体型号

  • zynq启动方式

  • DDR型号

  • FLASH型号

  • uart引脚约束

二、搭建BD平台

利用vavido软件搭建BD平台,这部分不会的可以直接参照我的另外一篇博客《zynq Linux程序开发》,搭建完BD后,需要导出HDF文件,以及launchSDK,在SDK中创建FSBL工程,这个FSBL工程一般直接使用SDK自动生成的就行,FSBL称为第一阶段引导程序,SDK根据你搭建的硬件平台会自动生成一个匹配BD的FSBL,在FSBL中主要对内存、时钟等等进行了设置,保证了CPU(ARM)能正常运行。

三、hello world程序固化

为什么我移植linux系统,还要固化hello world程序呢?因为hello world程序是最简单的,也是最方便去验证zynq能否正常启动的,而你直接固化UBOOT,当你看到命令中无任何输出时,并不能确定是启动方式的问题,还是生成的uboot问题。所以建议在移植之前,先利用hello world程序来验证下zynq能否正常启动。如果命令行中能正常打印除hello world,那就可以进行下一步移植uboot的工作;如果不能正常打印,就需要检查启动方式设置、FLASH参数配置、DDR参数配置是否有问题。

如何验证DDR有没有问题呢?很简单,SDK支持在线调试,在线加载hello world程序,运行后看能否打印出hello world,如果可以,就说明DDR没有问题;如果不能,那就要去vivado工程去检查下DDR的型号、位宽等配置是否有问题。

如何检查启动方式呢?FSBL工程中有一段代码是获取当前板卡的启动方式的,直接把这个值打印出来看看就知道,记得在打印时要看看是否已经初始化了串口,不然无法打印的。

如果以上两点都没问题,那基本上可以确认是FLASH配置问题了,如果是NAND FLASH启动,特别注意要配置SMC,按照FLASH的datasheet来配置。

四、移植uboot

在移植linux系统之前,还需要移植uboot,可以把uboot理解成二级引导程序,而且uboot本身也就是个裸机程序,所以可以利用SDK在线调试,看看uboot能否输出信息。uboot分为两个版本,一个是不支持设备树的uboot,最新的uboot是支持设备树的版本。我们按支持设备树的版本来移植uboot。uboot的设备树只是将硬件信息告诉uboot,在编译uboot的时候,会将uboot文件夹中的设备树链接进uboot.elf,因此在移植uboot时必须要修改uboot中的设备树。可能很多人会问:为什么uboot中有个设备树,而内核中也有个设备树,这两个设备树我要用哪个呢?其实你打开uboot中的设备树和内核中的设备树,你就会发现这两个设备树时一样的,也就是你修改并使用其中一个就行,而且必须是修改uboot中的设备树,因为uboot中的设备树是直接编译进uboot的,而不是去flash的偏移地址处读取设备树。你可以直接将uboot中的设备树修改完,拷贝一份作为内核的设备树文件,再去内核里编译成DTB文件就行。

uboot默认是从NOR FLASH启动的,所以需要根据你的板卡启动方式修改uboot的启动方式,例如如果你的板卡是从NAND启动,就需要在include/configs/zynq_zc70x.h增加

#define CONFIG_SYS_NO_FLASH

#define CONFIG_NAND_ZYNQ

紧接着要修改uboot的环境变量,也即是指定uboot该从什么地方读取内核、设备树、文件系统。这一步非常关键,在利用SDK烧写程序时要按照uboot中设置的环境变量中的便宜地址来,否则uboot引导就会失败。

当然,你可以利用make menuconfig来关闭不需要的外设驱动(建议关掉,不然可能会出现uboot启动卡在寻找驱动与之对应设备的死循环中)。

修改完配置文件后,就需要根据板卡的硬件信息,来修改设备树了,主要是内存大小,时钟频率,以及串口,修改完后,再执行make就可以编译uboot了,编译生成的uboot文件要手动修改为uboot.elf文件,再利用SDK常见BOOT.BIN。

附上移植uboot的步骤:

1.解压u-boot-xlnx-xilinx-v2017.4;                     7za x u-boot-xlnx-xilinx-v2017.4 -r -o./

2.修改根目录下的Makefile文件,指定架构和编译工具链;

3.修改zynq_zc70x.h

4.修改zynq_common.h

5.make zynq_zc70x_config

6.make

五、移植linux

linux版本也分为两个,在linux3.0之前是没有设备树的版本,在linux3.0之后引入了设备树,就需要修改设备树来给内核提供硬件信息。一般内核可以直接编译,也可以将不需要的驱动模块去掉(利用make menuconfig),再利用make dtbs来编译设备树。

附上移植kernel的步骤:

  1. 解压linux-xlnx-xilinx-v2017.4.zip;                      7za x linux-xlnx-xilinx-v2017.4.zip -r -o./
  2. 修改根目录下的Makefile文件,指定架构和编译工具链;
  3. 增加板卡对应的设备树;
  4. make xilinx_zynq_defconfig
  5. make uImage -j2

六、uramdisk

uramdisk可以直接从网上下载一个,也可以自己利用busybox构建一个,一般都是采用从网上下载一个,因为这部分都是通用的,而且下载下来后,可以根据自己的需求进行修改。这里可以到博主的下载模块进行下载;

附上修改ramdisk的步骤:

dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1

gunzip ramdisk.image.gz

mkdir p rootfs
sudo mount -o loop,rw ramdisk.image rootfs

sync
sudo umount rootfs

gzip -9 ramdisk.image

mkimage -A arm -T ramdisk -C gzip -n Ramdisk -d ramdisk.image.gz uramdisk.image.gz

rm ramdisk.image.gz

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值