开发板: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

二、编译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_defconfigHOSTCC  scripts/basic/fixdepHOSTCC  scripts/kconfig/conf.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/zconf.lex.cHOSTCC  scripts/kconfig/zconf.tab.oHOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
claude1009@ubuntu:~/xc7030/linux-xlnx-xilinx-v2018.3$ make uImage LOADADDR=0x00008000


然后等待比较长时间,就完成了。生成的内核文件所在位置为生成 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

四、制作设备树devicetree.dtb

首先将下载好的设备树源码device-tree-xlnx-xilinx-v2018.3文件夹复制到已经安装好的Vivado安装目录下的~/Xilinx/SDK/2018.3/data/embeddedsw/lib/bsp文件下,如图所示。

然后打开生成fsbl.elf文件的那个工程,进入到SDK软件中。打开 Xilinx Tools->Respositories 工具。

在Local Repositories中点击New,找到并加载刚才复制的设备树文件夹目录,然后点击Rescan Repositories,点击OK完成配置,如下图所示:

点击 File -> New -> Xilinx Board Support Package ,并命名为 devicetree_zc703 ,并在 Board Support Package OS 选择device_tree,如下图所示:

然后在弹出的窗口中,在bootargs一栏输入: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0 ,其他可保持不变,点击OK即可。

然后就在该工程目录下生成了一个设备树文件夹,目录如下图:

可以将此文件夹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卡中。

然后插入到板子。打开PC端的MobaXterm,设置好串口,连接好USB线和电源线,就可以看到下图的系统启动过程,并成功登录系统。

到此,我们的Linux系统就搭建完成啦0.0.0.0.0

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

  1. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  2. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  3. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  4. Linux开发学习笔记(二)

    (温馨提示:内容有点多,可点右边的目录进行跳转) Shell编程 1.简单介绍 Shell 脚本(shell script),是一种为 shell 编写的脚本程序.Shell 编程跟 java.php ...

  5. linux服务器学习笔记:linux如何远程登录?

    Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ssh服务实现的远程登录功 ...

  6. linux服务器学习笔记:linux忘记密码怎么办?

    当然,除了重装系统,也有另外的方式.进入单用户模式更改一下root密码即可. 具体方法请参考:Linux 忘记密码解决方法

  7. 【Linux入门学习笔记】Linux命令查阅方法及文件操作命令简介

    文章目录 一.指令构成 1. `man`帮助命令 1.1 如何阅读`SYNOPSIS` 1.2 如何阅读`DESCRIPTION`[^2] 2. 其他帮助命令 二.具体指令 1. `ls`(查看文件或 ...

  8. Linux教程学习笔记

    Linux教程学习笔记 目录 Linux教程学习笔记 写在前面 虚拟机 Linux目录结构 远程登录Linux系统 vi和vim编辑器 关机.重启和用户登录注销 用户管理 实用指令 组管理和权限管理 ...

  9. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

最新文章

  1. js弹出一段html,html js 弹出层
  2. 20165302第八周总结
  3. hadoop multipleoutputs
  4. linux下的各种系统错误errno描述一览
  5. 前端学习(97):psd切图流程
  6. 转自: http://blog.csdn.net/xiaxiaorui2003/article/details/3838631
  7. 苹果新iPad Pro代工订单或将推升富士康4月份营收
  8. U盘量产及在虚拟机中测试
  9. 20190815:(leetcode习题)两数之和(2种方法)
  10. 初识Git-GitHub
  11. Linux-软件包管理-rpm命令管理-安装-卸载
  12. 人脸识别打卡机怎么调sj_人脸识别考勤机怎么代打卡
  13. win10计算机变成了英文,Win10系统中自带的Office(Word,Excel)突然变成英文怎么变回中文...
  14. proxy_cfw全局代理_浏览器代理配置(chromium based(edge)/firefox/IDM)
  15. mysql8.0怎么设置中文版_MySQL 8.0 版本修改字符编码
  16. 郝斌c语言链表源码,链表的创建(郝斌视频)
  17. 【评测】各种细胞治疗处理技术设备
  18. CAD-CASS免费增强测绘工具CASS++
  19. 自然人如何开发票-以广西为例
  20. Android开发 屏幕截图

热门文章

  1. ListView 联动 SideBar ,根据数据首字母进行排序
  2. saoml流控开心版补丁
  3. 飞机机电管理计算机故障措施,一种基于故障树的飞机机电系统健康管理装置及管理方法与流程...
  4. 计算机软件故障通常有,故障检测程序
  5. 利用pandas实现json文件转化成csv文件
  6. 常见浏览器User-Agent大全(转载)
  7. 【ESP32_8266_WiFi (二)】接入点模式、无线终端模式
  8. 几种遍历数组的方法原理
  9. 可变参数传递与不可变参数传递
  10. LWIP协议栈设计与实现笔记: