制作四个文件启动的镜像

news2024/11/17 1:42:14

一 环境搭建:vivado2018.3,petalinux2018.3,

1.petalinux环境设置

所使用的编译环境需要使用petalinux这个软件,《第五章Petalinux 的安装》里面的5.1-5.4。有详细的安装过程,按照第五章的顺序把环境搭建好。可以不装XSDK,装好petalinux,到source setiing.sh之后用echo $PETALINUX有版本号,能够有hsi命令即可。JTAG也可以不装linux的,pl端的程序在Windows下的vivado里面写比linux方便。

petalinux2018.3安装路径:/home/geyuxi/opt/pkg/petalinux/2018.3/

source /home/geyuxi/opt/pkg/petalinux/2018.3/settings.sh

2,交叉编译工具链设置

交叉编译工具链版本要求需要大于7.0。安装方法有下面两种:

(1)只安装交叉编译器:选用的是7.5的交叉编译工具

文件名为gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz。和一半的交叉编译工具设置方式一样,将文件解压到/opt/目录下,再设置环境变量路径到目标位置:

sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt/

sudo vim /etc/profile

在最后一行添加:

export PATH=$PATH:/opt/arm-linux/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

退出profile

source /etc/profile

如果这个时候控制台的显示出问题,重启控制台即可。

再输入arm-linux-gnueabihf-gcc -v查看版本是否为7.5.0。若是,则设置成功。

(2)安装xilinx vivado xsdk 里面包含的有交叉编译器

     安装流程详见《第五章Petalinux 的安装》里面的5.5节。

     这里安装的路径放在了/home/geyuxi/opt/pkg/xsdk/SDK/2018.3/中,导入交叉编译器就输入source /home/geyuxi/opt/pkg/xsdk/SDK/2018.3/settings64.sh

二 ,FPGA硬件描述文件编译:获取hdf文件

hdf文件是硬件描述文件,通过在vivado设计硬件之后生成一个.bit文件,再通过file ->Export->Export Hardware生成,如图所示:

之后生成的hdf文件路径会打印在下方的Tcl Console中,如图2所示,在这里找到我们的hdf文件,放到linux的工作环境中,给hdf单独放一个文件夹

三,生成bit文件、dts文件、fsbl文件,u-boot.elf文件(用来合成BOOT.BIN文件)

名字

作用

编译来源

.bit文件

控制xilinx的FPGA部分的逻辑

.hdf文件或者vivado生成

.dts

设备树源文件

device-tree-xlnx-xilinx-v2018.3

.fsbl

用于xilinx的第一阶段启动文件

embeddedsw-xilinx-v2018.3

u-boot.elf

初始化硬件外设

alientek-uboot-2018.01-xlnx-v2018.3

1,生成.bit文件

.bit文件我们可以用之前在Windows下vivado里生成的那个,不过在linux下你用petalinux打开hdf文件的时候就会自己生成.bit文件,生成的文件统一是system.bit,所以直接用linux下的也行。

使能petalinux环境变量,每新开一个终端都需要执行一次

source  /home/geyuxi/opt/pkg/xsdk/SDK/2018.3/settings64.sh  

cd   /home/geyuxi/subomb_system/

hsi  //进入hsi,下面生成.bit文件

open_hw_design  /home/geyuxi/subomb_system/Navigator_7010.sdk/navigator_7010_wrapper.hdf

  exit

2,生成.dts设备树文件

.dts文件需要用hsi软件生成,要用到petalinux的devicetree的repo工具,工具的文件名为device-tree-xlnx-xilinx-v2018.3,使用的命令如下:

cd  /home/geyuxi/subomb_system/device-tree-xlnx-xilinx-v2018.3 

hsi

open_hw_design   /home/geyuxi/subomb_system/Navigator_7010.sdk/navigator_7010_wrapper.hdf

set_repo_path   ../device-tree-xlnx-xilinx-v2018.3

或者写绝对路径

set_repo_path  /home/geyuxi/subomb_system/device-tree-xlnx-xilinx-v2018.3

create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0

generate_target -dir ./        

或者写绝对路径

generate_target -dir  /home/geyuxi/subomb_system/linux/dts

exit

 之后就能再dts文件目录下找到生成的设备树文件了。

 

3,设备树文件生成之后,编译zynq_fsbl.elf文件

.fsbl文件也是需要用hsi软件生成的,需要用到petalinux的fsbl的repo工具,工具的文件名为embeddedsw-xilinx-v2018.3,使用如下命令:

建立一个软链接文件 gmake,链接到 make:

sudo  ln  -s /usr/bin/make /usr/bin/gmake

cd  /home/geyuxi/subomb_system/embeddedsw-xilinx-v2018.3  

hsi

open_hw_design /home/geyuxi/subomb_system/Navigator_7010.sdk/navigator_7010_wrapper.hdf

//这一步走通了最后一步才通,与navigator_7010_wrapper.bit前缀保持一致

set hwdsgn navigator_7010_wrapper   

    //设置 embeddedsw 仓库路径

set_repo_path ../embeddedsw-xilinx-v2018.3

// 定义 fsbl_dir 变量

set  fsbl_dir  /home/geyuxi/subomb_system/linux/fsbl

//编译zynq_fsbl,

generate_app -hw $hwdsgn -os standalone -proc ps7_cortexa9_0 -app zynq_fsbl -compile -sw fsbl -dir $fsbl_dir

exit

make clean    //在/home/geyuxi/subomb_system/linux/fsbl路径下输入make clean。

在/home/geyuxi/subomb_system/linux/fsbl目录下修Makefile文件,将编译产生的fsbl镜像文件名字改为 zynq_fsbl.elf,在fsbl 工程目录下,打开Makefile文件,修改EXEC变量

 

make   //生成在/home/geyuxi/subomb_system/linux/fsbl路径下,编译成功之后产生的镜像文件就成了 fsbl_zynq.elf。

 

1,编译uboot

#if 第一次操作

/home/geyuxi/subomb_system/ZYNQ_SUBOMB/linux/dts文件夹下生成的pcw.dtsi,pl.dtsi,system-top.dts 以及 zynq-7000.dtsi 四个文件拷贝到 u-Boot 源码目录

下的 arch/arm/dts 目录下

(1),添加设备树文件

/linux/dts 目录下)pcw.dtsi、pl.dtsi、system-top.dts 以及 zynq-7000.dtsi 四个文件拷贝到 u-boot 源码目录下的arch/arm/dts目录下。arch/arm/dts/system-top.dts做修改,具体查看正点原子手册;以上主要修改bootargs属性、添加model属性、网口0的MAC地址以及给qspi进行了分区操作。修改arch/arm/dts/system-top.dts文件。找到dtb-$(CONFIG_ARCH_ZYNQ)这里,将system-top.dtb(.dts 编译之后得到的就是.dtb 文件)。修改arch/arm/dts/Makefile 如下图所示,这样当CONFIG_ARCH_ZYNQ宏被选中的时候,system-top.dts才会被编译进去。

 

(2)修改 zynq- common.h 和 和 zynq_zc70x.h 配置 文件

zynq-common.h 和 zynq_zc70x.h 都在 include/configs 目录下,zynq-common.h 是xilinx 提供的用于配置 zynq 系列处理器的通用配置文件。zynq-common.h 头文件被zynq_zc70x.h 包含,下面我们要对这两个头文件进行一些简单地修改!主要是修改时钟频率、外设时钟、环境变量偏移量。

include/configs/zynq_zc70x.h

#ifndef __CONFIG_ZYNQ_ZC70X_H

#define __CONFIG_ZYNQ_ZC70X_H



#include <configs/zynq-common.h>



#endif /* __CONFIG_ZYNQ_ZC70X_H */



include/configs/zynq-common.h

/* CPU clock */

#ifndef CONFIG_CPU_FREQ_HZ

# define CONFIG_CPU_FREQ_HZ 666666687

#endif



/* QSPI */

#ifdef CONFIG_ZYNQ_QSPI

# define CONFIG_SF_DEFAULT_SPEED 50000000

#endif



/* Total Size of Environment Sector */

#ifdef CONFIG_ENV_IS_IN_EEPROM

# define CONFIG_ENV_SIZE CONFIG_SYS_EEPROM_SIZE

# define CONFIG_EXTRA_ENV_SETTINGS

#else

# define CONFIG_ENV_SIZE 0x20000

#endif

(3)配置并编译u-boot,就在uboot目录下

A,  defconfig配置

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig

B,  menuconfig  图形化配置

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  menuconfig

具体配置如下:

Boot media --->[*] Support for booting from SD/EMMC // 选择

SPL / TPL --->[ ] Enable SPL  // 取消

Command line interface --->

Memory commands --->[ ] eeprom - EEPROM subsystem // 取消

Device access commands --->[ ] i2c  // 取消

//将设备树设置为 system-top(也就是 system-top.dts)

Device Tree Control --->(system-top) Default Device Tree for DT control

Device Drivers --->Serial drivers --->[ ] Enable an early debug UART for debugging

配置完成之后保存退出。

 

C,执行下面这条命进行编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all  -j10

u-boot 文件是 elf 格式的镜像文件,而 u-boot.bin 则是纯二进制格式的镜像文件

 mv u-boot u-boot.elf //供后面打包BOOT.bin

至此,.bit文件,.dts文件,.fsbl,u-boot.elf文件全部制作完成。

四,Linux内核编译

生成zImage的xilinx arm官网kernel源码包:

linux-xlnx-xilinx-v2018.3.tar.gz。生成在arch/arm/boot/zImage

生成zImage的正点原子修改后的kernel源码包:

alientek-linux-4.14.0-xlnx-v2018.3.tar.gz。生成在arch/arm/boot/zImage

1,将前面 U-Boot 源码 arch/arm/dts 目录下的那四个设备树文件(pl.dtsi、 pcw.dtsi 、 system-top.dts 和 zynq-7000.dtsi ) 直 接 拷 贝 到 内 核 源 码 目 录 下 的 arch/arm/boot/dts 目录中。修改过的四个文件?

#if 第一次操作

将 system-top.dts 文 件 添 加 到 arch/arm/dts/Makefile 文件中,找到 dtb-$(CONFIG_ARCH_ZYNQ)这里,将 system-top.dtb添加上去

 

2,defconfig  配置

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

3,menuconfig 配置驱动

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

如果添加axi_uartlittle串口驱动

(.config - Linux/arm 4.14.0 Kernel Configuration

 > Device Drivers > Character devices > Serial drivers)

Support for console on Xilinx uartlite serial port

( .config - Linux/arm 4.14.0 Kernel Configuration

 > Device Drivers > GPIO Support > Memory mapped GPIO drivers)

Xilinx GPIO support

Xilinx Zynq GPIO support

#endif

4,编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  zImage  -j10

编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件

5,编译设备树  文件夹下linux-xlnx-xilinx-v2018.3

内核与 u-boot 不同的是,U-Boot 的设备树默认是与内核一起编译的,并且产生的 dtb 文

件已经与 U-Boot 镜像文件集成在一起了;在内核里边我们需要单独编译出设备树的 dtb 文件,前面已经将我们所需要的设备树文件拷贝到内核的 arch/arm/boot/dts 目录下了,接下来执行这条命令编译 system-top.dtb 文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

编译成功之后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件

 

五,生成BOOT.BIN文件和rootfs文件

在自定义的文件夹下,创建一个petalinux工程使用虚拟机时使用bash命令关掉原来的设置才能设置正确的环境变量

1,创建 Petalinux 工程

petalinux-create -t project --template zynq -n ZYNQ_SUBOMB 

2, 导入 hdf 文件

cd  ZYNQ_SUBOMB  //进入到 petalinux 工程目录下

petalinux-config --get-hw-description ../Navigator_7010.sdk/   //获取硬件信息

3,配置petalinux

会自动进入配置界面,设置进入“Subsystem AUTO Hardware Settings”子菜单下的“Advanced bootable images storage Settings”菜单中,移动到“dtb image settings”选项,如下图所示:

 

进入“dtb image settings”选项并将 image storage media 设置为 primary sd,如下图所示:

配置完成后,返回到最初的配置界面,进入到“Image Packaging Configuration”菜单 下的“Root filesystem type (INITRAMFS)”子菜单下,如下图所示:

 

选择“SD card”,按键盘上的“Enter”键返回。 保存并退出。

 

编译生成跟文件系统petalinux-build -c rootfs。最终会在 images/linux下生成rootfs.tar.gz和rootfs.tar.bz2。这个是最简版本的,可以用可以不用。

 

文件名

生成的位置

内核源码目录

kernel/arch/arm/boot/zImage

system-top.dtb

内核设备树 dtb 文件,内核源码目录arch/arm/boot/dts/system-top.dtb

pl端bitstream

/home/geyuxi/subomb_system/Navigator_7010.sdk/design_navigator_7010_wrapper.bit

zynq_fsbl.elf

/home/geyuxi/subomb_system/linux/fsbl/zynq_fsbl.elf

我把它们全部放到/home/geyuxi/subomb_system/SD下面了,进入该路径后生成BOOT.BIN执行命令:生成BOOT.BIN

petalinux-package  --boot  -p  /home/geyuxi/subomb_system/ZYNQ_SUBOMB  --fsbl

/home/geyuxi/subomb_system/linux/fsbl/zynq_fsbl.elf --u-boot ./u-boot.elf -o ./BOOT.BIN --force

六 ,制作sd卡分区

分区必须从2048开始,可用SDFormatter进行格式化

umount /dev/sdb*

sudo fdisk /dev/sdb

输入d删除原来的分区,创建fat分区

输入“n”,并按如下创建分区

 

设置分区类型为W95 FAT32 (LBA)

 

输入“a”设为引导分区,创建ext4分区,输入n,后面一路默认

 

输入“p”检查分区表是否创建两个分区成功;输入“w”写入sd卡并退出

输入以下命令格式化分区,就可以将镜像分别放入对应分区了

sudo mkfs.vfat -F 32 -n boot /dev/sdb1

sudo mkfs.ext4 -L rootfs /dev/sdb2

Ext4分区放文件系统,通过如下命令将系统解压进去

rootfs

sudo tar -xzf rootfs.tar.gz -C /media/geyuxi/rootfs

改名design_navigator_7010_wrapper.bit->system.bit 和

改名system-top.dtb->system.dtb

 

卸载分区

umount /media/whitewizard/boot

umount /media/whitewizard/rootfs

启动时写boot的启动参数,参数如下:

setenv bitstream_load_address 0x100000

setenv bitstream_image system.bit

setenv bitstream_size 0x300000

setenv kernel_image zImage

setenv devicetree_image system-top.dtb

setenv sdboot 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && load mmc 0 ${bitstream_load_address} ${bitstream_image} && fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && load mmc 0 ${kernel_load_address} ${kernel_image} && load mmc 0 ${devicetree_load_address} ${devicetree_image} && bootz ${kernel_load_address} - ${devicetree_load_address}; fi'

Saveenv

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PR 基础】新建序列

目录 一、新建序列 二、序列预设 三、设置 一、新建序列 在如下区域点击鼠标右键&#xff0c;选择 新建项目-》序列 或 点击工具栏中的文件-》新建-》序列 二、序列预设 &#xff08;1&#xff09;时基&#xff1a;就是指帧速率&#xff0c;也就是每秒播放帧的数量&#xf…

iOS Matter 操作证书签发方案

在 Matter 配网和操作中&#xff0c;为了信息交互的安全&#xff0c;在配网时&#xff0c;Commissioner自身需要完整的证书&#xff0c;同时需要向设备安装操作证书。 Matter 证书包含&#xff1a; RCA: 根证书 ICA: 中间证书&#xff0c;可选 NOC: 操作证书(注意有以下两种…

人工智能的前沿信息获取之使用文献数据库

人工智能的知识更新迭代非常迅速&#xff0c;因此对人工智能前沿的跟踪非常必要。本文主要介绍了使用文献数据库获取人工智能前沿信息的方法。 文献数据库是检索和下载论文的主要工具&#xff0c;对文献进行检索和下载的技巧在本科公共基础课《文献检索》或《信息检索》等类似…

家庭智能触摸面板开关一Homekit智能

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【ESP-IDF】介绍NVS

ESP-IDF是一款由乐鑫科技&#xff08;Espressif Systems&#xff09;开发的面向ESP32和ESP32-S系列芯片的开发框架&#xff0c;NVS&#xff08;Non-Volatile Storage&#xff09;是其中的一项功能。 NVS是一种用于在嵌入式系统中保存持久化数据的键值存储库。在ESP-IDF中&#…

虚拟化技术 — SR-IOV 单根 I/O 虚拟化

目录 文章目录 目录SR-IOVSR-IOV VEBSR-IOV VEPASR-IOV Multi-ChannelSR-IOV OvSSR-IOV 的应用使能 SR-IOV VFs挂在 VF 到 KVM 虚拟机中SR-IOV 的 NUMA 亲和性VF 的网络配置VFs Bonding SR-IOV 虚拟机的热迁移问题 SR-IOV 传统的 I/O 虚拟化方案需要 VMM 来捕获和模拟 VM 的 I…

400左右蓝牙耳机什么牌子音质好?400左右的无线蓝牙耳机推荐

过去几年苹果的AirPods深受大家欢迎&#xff0c;但要论最佳耳机&#xff0c;还要考虑佩戴类型&#xff0c;功能上又分降噪水平&#xff0c;甚至价格上也要实惠&#xff0c;毕竟对于不想太高预算来获得出色音质和舒适度的人来说&#xff0c;这也是他们心中的"最佳"产品…

Kubernetes那点事儿——调度策略

Kubernetes那点事儿——调度策略 前言一、静态Pod二、nodeSelector 节点选择器三、nodeName四、taint污点五、tolerations污点容忍六、容器资源限制七、nodeAffinity节点亲和性 前言 Kubernetes的强大之处离不开它的调度系统&#xff0c;它为Pod调度到某个Node上提供了多种方式…

Linux学习_设备树实现中断

Linux学习_设备树实现中断 中断层级结构设备树_中断控制器设备树_中断子节点驱动程序获取GPIO获取中断号申请中断中断处理函数 中断层级结构 就硬件而言&#xff0c;中断控制器指的就是GIC&#xff0c;但是实际在软件上&#xff0c;图中的GPIO等我们也称之为中断控制器。 外部…

[PyTorch]预训练权重的转换

众所周知&#xff0c;使用大量数据预训练后的骨干网络可以提升整个模型的泛化能力&#xff0c;而我们如果将网络的骨干网络替换后则不能直接使用原来的权重。这个项目的作用是在你替换骨干网络后可以将网络预训练权重一并“偷”过来。 下给结论&#xff1a;将DeeplabV3的骨干网…

详解 TCP(三次握手 + 四次挥手 + 滑动窗口 + 拥塞控制 + 和 UDP 做对比)

文章目录 1. TCP / IP五层模型和OSI七层模型1&#xff09;OSI七层模型2&#xff09;TCP/IP 五层模型 2. TCP和UDP1&#xff09; TCP首部结构2&#xff09;UDP首部结构3&#xff09;TCP和UDP的区别2.2 UDP和TCP对应的应用场景 3. TCP 建立连接时的三次握手1&#xff09;为什么需…

虚拟专用网VPN与网络地址转换NAT技术

1、专用网络或本地互联网 一方面现在随着个人电脑的增大&#xff0c;IP地址十分紧缺&#xff0c;所以如果为每一台电脑都分配个一个全球IP地址&#xff08;唯一的&#xff09;不太现实&#xff1b;另外一方面&#xff0c;很多机构&#xff08;比如大公司&#xff09;往往只需要…

阿里正式加入ChatGPT战局,“通义千问”上线后表现如何?

ChatGPT发布后&#xff0c;数月间全世界都对AI的能力有了新的认知。 ChatGPT掀起的战局&#xff0c;现在又多了一位选手了&#xff01; 阿里版类ChatGPT突然官宣正式对外开放企业邀测&#xff0c;由达摩院开发&#xff0c;名为“通义千问” 顾名思义&#xff0c;阿里正式加入Ch…

java实现钉钉自定义机器人发送消息

钉钉作为现在很多企业的移动办公平台&#xff0c;具有很多很强大的功能&#xff0c;可以帮助我们更加及时的发现问题&#xff0c;解决问题&#xff0c;今天我们做一个java实现钉钉自定义机器发送消息的功能。 首先&#xff0c;先放出官方文档地址&#xff1a;https://open.ding…

GIS在城市规划中的作用与应用

山海鲸可视化-GIS影像 简介 GIS&#xff08;地理信息系统&#xff09;是一种用于捕获、存储、管理、分析和显示地理空间数据的技术和工具。GIS可以用于各种领域&#xff0c;包括城市规划、土地管理、自然资源管理、公共安全、环境保护、气象预报、交通运输、农业、地质勘探、…

支持多模型数据分析探索的存算分离湖仓一体架构解析(上)

当企业需要建设独立的数据仓库系统来支撑BI和业务分析业务时&#xff0c;有了“数据湖数据仓库”的混合架构。但混合架构带来了更高的建设成本、管理成本和业务开发成本。随着大数据技术的发展&#xff0c;通过在数据湖层增加分布式事务、元数据管理、极致的SQL性能、SQL和数据…

Python实现哈里斯鹰优化算法(HHO)优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

BI数据可视化报表模板分享,附免费下载方法

奥威BI软件上既有大量单张下载套用的BI数据可视化报表模板&#xff0c;又有以通用标准方案、行业通用方案为基础打造的标准化BI数据可视化报表模板套装&#xff0c;下载套用即可完成整个企业的BI数据可视化分析。这些BI数据可视化报表模板的效果如何&#xff0c;怎么下载&#…

Spring set注入专题

简单数据类型&#xff0c;来自BeanUtils&#xff0c;包含8种基本数据类型&#xff0c;8种包装类等 Temporal是java8之后的新特性&#xff0c;表示时区&#xff0c;时间等 Local为语言类 注入简单数据类型(包括String): 注意&#xff0c;property中不能使用ref&#xff0c;要使…

连接云服务器

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…