Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)

开发板:Zynq7030数据采集板
PC平台:Ubuntu-18.04 + MobaXterm
开发环境:Xilinx Vivado + SDK -18.3
交叉编译工具:arm-linux-gnueabihf-
学习目标:生成 uImage、devictree.dtb 文件

一、下载Linux内核源码

在第一篇文章Zynq-7000系列之linux开发学习笔记:开发前准备(一)中已经提供过Linux内核源码的下载链接,这里再提供一下,方便中途看本文章的人进行下载,链接如下:
kernel 2018.3 :https://github.com/Xilinx/linux-xlnx/tree/xilinx-v2018.3
下载完Linux内核源码后,将文件解压到相应目录,我这里还是解压到前几篇文章使用的目录。进到目录可以看到如下的文件结构:

claude1009@ubuntu:~/xc7030$ cd linux-xlnx-xilinx-v2018.3/
claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ ls
arch   certs    CREDITS  Documentation  firmware  include  ipc     Kconfig  lib       MAINTAINERS  mm   README   scripts   sound  usr
block  COPYING  crypto   drivers        fs        init     Kbuild  kernel   LICENSES  Makefile     net  samples  security  tools  virt

Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第1张图片

二、编译Linux内核

同样,首先我们要设置好交叉编译工具和环境变量,操作如下:

claude1009@ubuntu:~$ source /home/claude1009/Xilinx/SDK/2018.3/settings64.sh
claude1009@ubuntu:~$ export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

如果直接就开始编译Linux内核,可能会出现下面问题:“mkimage” command not found – uImage will not be built,这是由于缺少相关依赖包,执行下面命令安装即可。

claude1009@ubuntu:~$ sudo apt-get install uboot-mkimage

然后进入到Linux内核源码的主目录,使用下面使命令进行编译,生成uImage。

claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ make clean
claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ make xilinx_zynq_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ make uImage LOADADDR=0x00008000 

Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第2张图片
然后等待比较长时间,就完成了。生成的内核文件所在位置为生成 linux-xlnx-xilinx-v2018.3/arch/arm/boot

三、下载设备树devicetree.dtb

在第一篇文章Zynq-7000系列之linux开发学习笔记:开发前准备(一)中已经提供过设备树devicetree源码的下载链接,这里再提供一下,方便中途看本文章的人进行下载,链接如下:
device-tree 2018.3 :https://github.com/Xilinx/device-tree-xlnx/tree/xilinx-v2018.3
下载完设备树devicetree源码后,将文件解压到相应目录,我这里还是解压到前几篇文章使用的目录。进到目录可以看到如下的文件结构:

claude1009@ubuntu:~/xc7030$ cd device-tree-xlnx-xilinx-v2018.3/
claude1009@ubuntu:~/xc7030/device-tree-xlnx-xilinx-v2018.3$ ls
ams              axi_emc       axi_sysace        axi_xadc       demosaic     framebuf_rd    hdmi_rx_ss       mipi_csi2_rx  pl310ps       scene_change_detector  sdps    ttcps         vtc
audio_embed      axi_ethernet  axi_tft           canps          devcfg       framebuf_wr    hdmi_tx_ss       mipi_dsi_tx   pmups         scugic                 slcrps  uartlite      wdtps
audio_formatter  axi_gpio      axi_timebase_wdt  cpu            device_tree  gamma_lut      i2s_receiver     mixer         pr_decoupler  scutimer               smccps  uartns        xadcps
axi_can          axi_iic       axi_traffic_gen   cpu_cortexa53  dmaps        generic        i2s_transmitter  multi_scaler  qspips        scuwdt                 spips   uartps
axi_cdma         axi_pcie      axi_usb2_device   cpu_cortexa9   dp           globaltimerps  iicps            nandps        ramps         sdfec                  tmrctr  usbps
axi_clk_wiz      axi_perf_mon  axi_vcu           ddrcps         emaclite     gpiops         intc             norps         rfdc          sdi_rx                 tpg     vid_phy_ctrl
axi_dma          axi_qspi      axi_vdma          ddrps          emacps       hdmi_ctrl      mig_7series      ocmcps        RM            sdi_tx                 tsn     vproc_ss

Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第3张图片

四、制作设备树devicetree.dtb

首先将下载好的设备树源码device-tree-xlnx-xilinx-v2018.3文件夹复制到已经安装好的Vivado安装目录下的~/Xilinx/SDK/2018.3/data/embeddedsw/lib/bsp文件下,如图所示。
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第4张图片
然后打开生成fsbl.elf文件的那个工程,进入到SDK软件中。打开 Xilinx Tools->Respositories 工具。
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第5张图片
在Local Repositories中点击New,找到并加载刚才复制的设备树文件夹目录,然后点击Rescan Repositories,点击OK完成配置,如下图所示:
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第6张图片
点击 File -> New -> Xilinx Board Support Package ,并命名为 devicetree_zc703 ,并在 Board Support Package OS 选择device_tree,如下图所示:
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第7张图片
然后在弹出的窗口中,在bootargs一栏输入: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0 ,其他可保持不变,点击OK即可。
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第8张图片
然后就在该工程目录下生成了一个设备树文件夹,目录如下图:
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第9张图片
可以将此文件夹devicetree_zc703复制到Linux内核源码的目录中,然后进入目录可以看到有如下文件:

claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ cd devicetree_zc703/
claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3/devicetree_zc703$ ls
Makefile  pcw.dtsi  skeleton.dtsi  system.dts  system.mss  system-top.dts  zynq-7000.dtsi

这里我们要使用的文件有: pcw.dtsi、system-top.dts、zynq-7000.dtsi ,其中zynq-7000.dtsi是Zynq系列通用的设备树文件;而pcw.dtsi则包含我们在fsbl工程创建时,在原理框图设计中进行IO配置的外设接口;system-top.dts通过include方式包含了pcw.dtsi和zynq-7000.dtsi,是我们需要进行编译的文件,最终生成可用的设备树。
使用的命令是Linux内核源码中的dtc工具,具体操作如下:

claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ ./scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb ./devicetree_zc703/system-top.dts 
Error: ./devicetree_zc703/system-top.dts:9.2-10 syntax error
FATAL ERROR: Unable to parse input tree

这里出现了错误,是因为在system-top.dts文件中使用include有误,修改如下:

/include/ "zynq-7000.dtsi"
/include/ "pcw.dtsi"

再次执行命令即可生成devicetree.dtb设备树文件。

四、启动Linux系统

将上述得到的uImage和devicetree.dtb文件,和之前得到的BOOT.bin文件都复制到SD卡中。
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第10张图片
然后插入到板子。打开PC端的MobaXterm,设置好串口,连接好USB线和电源线,就可以看到下图的系统启动过程,并成功登录系统。
Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)_第11张图片
到此,我们的Linux系统就搭建完成啦0.0.0.0.0

你可能感兴趣的:(Zynq-7000系列)