详细介绍:第7章 zynq Linux内核和根文件系统的编译和启动
前言
由于本人较懒,记录主要是过程,由于zynq的比stm32做的人少很多,资料也少很多,我会简要介绍原理,操作流程主要由图片加少量文字组成,每一章都是在之前的章节基础上做的
上一章Uboot的问题都解决了,现在开始编译内核
一、下载内核源码并编译
下载内核源码https://github.com/Xilinx/linux-xlnx/releases/tag/xilinx-v2018.3到虚拟机内解压
在内核文件夹里依次输入以下指令使用zynq的配置
export ARCH=arm
make xilinx_zynq_defconfig
新建一个build.sh文件,并赋予执行权限后执行,share文件下生成一个内核镜像
#! /bin/bash
export PATH=$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make -j8
make UIMAGE_LOADADDR=0x8000 uImage
cp arch/arm/boot/uImage /mnt/hgfs/share

二、下载buildroot并编译
由于uboot版本为2018.1,buildroot这里下载2018.2https://buildroot.org/downloads/
在文件夹内输入make zynq_zc706_defconfig使用zc706的配置,输入make menuconfig进行配置,由于之前内核和uboot都是使用独立的源码编译,在这里取消掉

save后修改.config文件,将部分镜像地址改为国内,这样可以缩短下载的时间
BR2_KERNEL_MIRROR="https://mirror.bjtu.edu.cn/kernel/"
BR2_GNU_MIRROR="http://mirrors.nju.edu.cn/gnu/"
BR2_LUAROCKS_MIRROR="https://luarocks.cn"
BR2_CPAN_MIRROR="http://mirrors.nju.edu.cn/CPAN/"
输入make进行编译,由于下载的软件包很多,编译时间较长,期间报编译错误大概率是由于多线程编译内存不足导致的,编译完报错是因为没有用到它的编译脚本,这不用管,只要生成了镜像就可以
将output/images/rootfs.cpio.uboot拷贝到tftp文件夹内
三、使用tftp启动
将ubootarch/arm/dts/system-top.dtb拷贝到tftp文件夹内
进入uboot后,输入以下指令从tftp启动,需要保证uImage、rootfs.cpio.uboot、system-top.dtb在tftp文件夹内
setenv ipaddr 192.168.0.10
setenv serverip 192.168.0.11
tftpboot 0x1000000 uImage && tftpboot 0x2000000 rootfs.cpio.uboot && tftpboot 0x3000000 system-top.dtb && bootm 0x1000000 0x2000000 0x3000000
开机后,nand报错
回头看vivado的时序为下图,显然符合数据手册上的时序
而设备树pcw.dtsi的值为
&nand0 {
arm,nand-cycle-t0 = <0x3>;
arm,nand-cycle-t1 = <0x3>;
arm,nand-cycle-t2 = <0x0>;
arm,nand-cycle-t3 = <0x1>;
arm,nand-cycle-t4 = <0x1>;
arm,nand-cycle-t5 = <0x1>;
arm,nand-cycle-t6 = <0x2>;
status = "okay";
};
猜测可能是四舍五入有问题,直接截取前一位,尝试修改vivado nand时序
修改完重新生成设备树,然后用设备树启动Linux,果然没问题了,这个确实有点坑啊,xilinx左右脑互博了属于是
总结
主要介绍了zynq 内核和根文件系统的编译和启动。
浙公网安备 33010602011771号