怎么移植linux系统至zynq板卡上呢?这儿我们只讲技巧,不讲原理,适宜小白参考!
一、必要信息
假定你手上有一块zynq的板卡,如今你须要给板卡搭载一个linux操作系统,以及开发一些插口模块的驱动程序。这么首先你须要晓得板卡的原理图,原理图中你须要关注以下几点:
二、搭建BD平台
借助vavido软件搭建BD平台,这部份不会的可以直接参照我的另外一篇博客《zynqLinux程序开发》,搭建完BD后,须要导入HDF文件,以及launchSDK,在SDK中创建FSBL工程,这个FSBL工程通常直接使用SDK手动生成的就行,FSBL称为第一阶段引导程序,SDK按照你搭建的硬件平台会手动生成一个匹配BD的FSBL,在FSBL中主要对显存、时钟等等进行了设置,保证了CPU(ARM)能正常运行。
三、helloworld程序固化
为何我移植linux系统,还要固化helloworld程序呢?由于helloworld程序是最简单的,也是最便捷去验证zynq能够正常启动的,而你直接固化UBOOT,当你听到命令中无任何输出时,并不能确定是启动方法的问题,还是生成的uboot问题。所以建议在移植之前,先借助helloworld程序来验证下zynq能够正常启动。假如命令行中能正常复印除helloworld,那就可以进行下一步移植uboot的工作;假如不能正常复印,就须要检测启动方法设置、FLASH参数配置、DDR参数配置是否有问题。
怎么验证DDR有没有问题呢?很简单,SDK支持在线调试,在线加载helloworld程序,运行后看能够复印出helloworld,假如可以,就说明DDR没有问题;假如不能,那就要去vivado工程去检测下DDR的机型、位宽等配置是否有问题。
怎么检测启动方法呢?FSBL工程中有一段代码是获取当前板卡的启动方法的,直接把这个值复印下来瞧瞧就晓得,记得在复印时要瞧瞧是否早已初始化了并口,不然难以复印的。
假如以上两点都没问题,那基本上可以确认是FLASH配置问题了,若果是NANDFLASH启动,非常注意要配置SMC,根据FLASH的datasheet来配置。
四、移植uboot
在移植linux系统之前,还须要移植uboot,可以把uboot理解成二级引导程序,但是uboot本身也就是个裸机程序,所以可以借助SDK在线调试,瞧瞧uboot能够输出信息。uboot分为两个版本,一个是不支持设备树的uboot硬盘安装linux,最新的uboot是支持设备树的版本。我们按支持设备树的版本来移植uboot。uboot的设备树只是将硬件信息告诉uboot,在编译uboot的时侯,会将uboot文件夹中的设备树链接进uboot.elflinux系统移植 pdf,因而在移植uboot时必需要更改uboot中的设备树。可能好多人会问:为何uboot中有个设备树,而内核中也有个设备树,这两个设备树我要用那个呢?虽然你打开uboot中的设备树和内核中的设备树,你都会发觉这两个设备树时一样的,也就是你更改并使用其中一个就行,并且必须是更改uboot中的设备树,由于uboot中的设备树是直接编译进uboot的,而不是去flash的偏斜地址处读取设备树。你可以直接将uboot中的设备树更改完,拷贝一份作为内核的设备树文件,再去内核里编译成DTB文件就行。
uboot默认是从NORFLASH启动的,所以须要依照你的板卡启动方法更改uboot的启动方法红旗linux安装,比如假如你的板卡是从NAND启动,就须要在include/configs/zynq_zc70x.h降低
#defineCONFIG_SYS_NO_FLASH
#defineCONFIG_NAND_ZYNQ
紧接着要更改uboot的环境变量,也即是指定uboot该从哪些地方读取内核、设备树、文件系统。这一步十分关键,在借助SDK烧录程序时要根据uboot中设置的环境变量中的实惠地址来,否则uboot引导都会失败。
其实,你可以借助makemenuconfig来关掉不须要的外设驱动(建议关闭,不然可能会出现uboot启动卡在找寻驱动与之对应设备的死循环中)。
更改完配置文件后,就须要依照板卡的硬件信息,来更改设备树了,主要是显存大小,时钟频度,以及并口,更改完后,再执行make就可以编译uboot了,编译生成的uboot文件要自动更改为uboot.elf文件linux系统移植 pdf,再借助SDK常见BOOT.BIN。
附上移植uboot的步骤:
1.解压u-boot-xlnx-xilinx-v2017.4;7zaxu-boot-xlnx-xilinx-v2017.4-r-o./
2.更改根目录下的Makefile文件,指定构架和编译工具链;
3.更改zynq_zc70x.h
4.更改zynq_common.h
5.makezynq_zc70x_config
6.make
五、移植linux
linux版本也分为两个,在linux3.0之前是没有设备树的版本,在linux3.0以后引入了设备树,就须要更改设备树来给内核提供硬件信息。通常内核可以直接编译,也可以将不须要的驱动模块除去(借助makemenuconfig),再借助makedtbs来编译设备树。
附上移植kernel的步骤:
解压linux-xlnx-xilinx-v2017.4.zip;7zaxlinux-xlnx-xilinx-v2017.4.zip-r-o./更改根目录下的Makefile文件,指定构架和编译工具链;降低板卡对应的设备树;makexilinx_zynq_defconfigmakeuImage-j2
六、uramdisk
uramdisk可以直接从网上下载一个,也可以自己借助busybox建立一个,通常都是采用从网上下载一个,由于这部份都是通用的,但是下载出来后,可以依照自己的需求进行更改。这儿可以到博主的下载模块进行下载;
附上更改ramdisk的步骤:
ddif=uramdisk.image.gzof=ramdisk.image.gzbs=64skip=1
gunzipramdisk.image.gz
mkdirprootfs
sudomount-oloop,rwramdisk.imagerootfs
sync
sudoumountrootfs
gzip-9ramdisk.image
mkimage-Aarm-Tramdisk-Cgzip-nRamdisk-dramdisk.image.gzuramdisk.image.gz
rmramdisk.image.gz