petalinux-adi ---移植adi内核(一)

news2024/12/24 2:12:54

1. 设备树生成

将 前 面 生 成 的 设 备 树 文 件 ( 笔 者 这 里 生 成 的 设 备 树 文 件 在Petalinux 工 程 的components/plnx_workspace/device-tree/device-tree/ 目 录 下 ) pcw.dtsi 、 pl.dtsi 、system-top.dts 以 及 zynq-7000.dtsi 四 个 文 件 直 接 拷 贝 到 内 核 源 码 目 录 下 的arch/arm/boot/dts 目录中。如图所示:

3ad7f66eb6714dbfb07148d05913247b.png在该Petalinux 工程下使用“petalinux-config --get-hw-description hdf 文件路径”命令即可。 hdf 文件导入成功之后会自动弹出 petalinux 工程配置窗口,进入“Subsystem AUTO Hardware Settings”菜单下,首先按照配置调试串口,配置完成后,进入“Advanced bootable images storage Settings”菜单中,移动到“dtb image settings”选项,进入“dtb image settings”选项并将 image storage media 设置为 primary sd,如下图所示:

e124700aeb354cb5b5bd7d5053e6be96.png配置完成后,返回到最初的配置界面,进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下,选择EXT模式。

c913b7143d604e8a809c3336f0b96e31.png配置完成后,编译 fsbl 和 uboot,及生成 BOOT.BIN 文件,命令如下:

petalinux-build -c bootloader

petalinux-build -c u-boot

petalinux-package --boot --fsbl --u-boot --force

在 Petalinux 工 程 中 执 行 编 译 uboot 后 , 会 在 工 程compo-nents/plnx_workspace/device-tree/device-tree/目录下生成设备树文件。将 生 成 的 设 备 树 文 件 ( 笔 者 这 里 生 成 的 设 备 树 文 件 在 Petalinux 工程的 components/plnx_workspace/device-tree/device-tree/ 目 录 下 ) pcw.dtsi 、 pl.dtsi 、 system-top.dts 以 及 zynq-7000.dtsi 四 个 文 件 直 接 拷 贝 到 内 核 源 码 目 录 下 的

arch/arm/boot/dts 目录中。

    接下来我们需要对system-top.dts文件进行一个简单地修改,打开system-top.dts文件,修改之前内容如下:

960f27bd83db469dbcbd8542827616be.png修改完成之后,我们还需要修改 arch/arm/boot/dts 目录下的 Makefile 文件,将设备树添加上去,如下:

88dc5a6df268464ebc1c9b6fa051d26f.png

在内核源码目录下执行下面这条命令对内核进行 defconfig 配置: 

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

b8fc591580c2412b8bd4f91137ec8ad7.png

执行下面这条命令编译内核源码

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

b05b9acc3f814fba97417664cad37d9a.png

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

                eec8e6ac7f1a440fb538c9ba837e1fc6.png

2. 编译设备树

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

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

96e55fe2ffdd4772b882e7f2812eeea2.png

3. 生成ROOTFS

根文件系统我们直接使用 petalinux 进行编译即可。进入到 Petalinux 工程目录下,为了免去后面每次启动 linux 都要手动输入密码进入系统,所以我们先配置根文件系统免密码登录,进入根文件系统配置界面的命令如下

petalinux-config -c rootfs

进入“Image Features --->”菜单下,使能“debug-tweaks”,如下图所示:

78ea8124799345bc8842543a7840cbd0.png

这样配置后,会自动登录,不用再手动输入用户名和密码,方便调试。 配置完成后,保存退出。接下来直接编译根文件系统:

petalinux-build -c rootfs

04032f6d1e7b4ad7b9626d95228960ff.png将前面过程当中生成的各种镜像文件拷贝到 SD 启动卡的 FAT 分区,包括 zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)、system-top.dtb(内核设备树 dtb 文件,内核

源码目录 arch/arm/boot/dts/system-top.dtb)、 system.bit (pl 端 bitstream 文件, Petalinux工程目录下的 images/linux/system.bit)。大家根据自己前面步骤当中文件存放的目录去找到相应的这些镜像文件。

4. 启动系统

将内核镜像文件 zImage、内核设备树文件以及根文件系统从image.ub 文件中分离出来;而将 bit 文件从 BOOT.BIN 文件中分离出来,这样做之后我们的 SD卡中将会存在 5 部分内容:zImage、dtb、rootfs、bit 以及 BOOT.BIN(fsbl 镜像与 u-boot镜像的集合体),明确之后我们将他们拷贝到我们的 SD 卡中。将前面过程当中生成的各种镜像文件拷贝到 SD 启动卡的 FAT 分区,包括 zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)、system-top.dtb(内核设备树 dtb 文件,内核源码目录arch/arm/boot/dts/system-top.dtb)、system.bit(pl端bitstream文件,Petalinux工程目录下的 images/linux/system.bit)。大家根据自己前面步骤当中文件存放的目录去找到相应的这些镜像文件。

接下来我们需要将这些文件拷贝到 FAT 分区,接下来我们需要将之前编译的根文件系统压缩包文件解压到 SD 启动卡的 EXT4 分区。

在 U-Boot 启动 2 秒倒计时之前,按回车或者是空格键停止启动,进入到 U-Boot 的命令行模式,因为现在不能直接启动,我们需要对 U-Boot 环境变量进行修改:

c8c81dcfef0043d2b46ff34861cb93ed.png

在 U-Boot 命令行下执行下面这些命令设置环境变量,如下所示:

setenv default_bootcmd '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} &&run cp_kernel2ram && run cp_dtb2ram && bootz ${netstart} - ${dtbnetstart}; fi'

b1f381e8de564e2c844ac14b57938eaa.png变量设置完成之后,执行 saveenv 命令保存环境变量到 QSPI Flash 中,那么下次就不用再设置了。

23f2d6e7ab254be0b363cea253b12b76.png保存完成后执行 boot 命令启动内核或者执行 reset 重启开发板:

395a002c4d6f49c2b231f306a6f0fd32.png

可按下列代码在u-boot中修改

env default -a
setenv bitstream_load_address 0x100000
setenv bitstream_image system.bit
setenv bitstream_size 0x2000000
setenv kernel_img zImage
setenv dtbnetstart 0x3000000
setenv netstart 0x3080000
setenv cp_dtb2ram 'mmcinfo &&fatload mmc 0:1 ${dtbnetstart} ${dtb_img}'
setenv default_bootcmd '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} &&run cp_kernel2ram && run cp_dtb2ram && bootz ${netstart} - ${dtbnetstart}; fi'

setenv dtb_img system-top.dtb

setenv ipaddr 192.168.1.11
setenv ethaddr ca:0a:35:00:1e:53
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.1
setenv dns-nameservers 192.168.30.254

saveenv

如遇问题,请将环境变量配置与我一致。

setenv cp_dtb2ram 'mmcinfo &&fatload mmc 0:1 ${dtbnetstart} ${dtb_img}'

cfe2bd88b0cf40ac86b4912dd950022f.png

上电成功示意图:

abecfbad68224b30b22f09ce8b85134b.png

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

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

相关文章

从腾讯云的恶意文件查杀学习下PHP的eval函数

问题来自于腾讯云的主机安全通知&#xff1a; &#x1f680;一键接入&#xff0c;畅享GPT及AI大模型服务&#xff01;【顶级API中转品牌】&#xff1a; https://api.ablai.top/ 病毒文件副本内容如下&#xff1a; <?php function x($x){eval($x);}x(str_rot13(riny($_CBF…

Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略

Tool之Excalidraw&#xff1a;Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略 目录 Excalidraw 简介 1、Excalidraw 的主要特点&#xff1a; Excalidraw 安装和使用方法 1、Excalidraw的安装 T1、使用 npm 安装&#xff1a; T2、使用 …

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar&#xff1a;《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读&#xff1a;这篇论文提出了一种名为rStar的自我博弈互推理方法&#xff0c;用于增强小型语言模型 (SLMs) 的推理能力&#xff0c;无需微调或依赖更强大的模型。rStar…

Solidity 智能合约安全漏洞——普通重入攻击

普通重入攻击 重入攻击&#xff08;Re-Entrancy&#xff09; 一直是以太坊智能合约中最危险的漏洞之一&#xff0c;导致了许多大规模的资金被盗事件。比如 2016 年发生在 The DAO 项目中的 Re-Entrancy 漏洞攻击&#xff0c;造成价值当时 6000 万美元的以太币被盗&#xff0c;…

基于koa服务端脚手架搭建(文件加载器) --【elpis全栈项目笔记】

基于koa服务端脚手架(文件加载器) --【elpis-core】 前言&#xff1a; elpis-core 是一个项目文件加载器。基于一定的约定&#xff0c;将功能不同的代码分类放置到不同的目录下管理。适用于项目代码规范化、减少维护成本、沟通成本&#xff0c;易于扩展。&#xff08;简易版的 …

AQS源码学习

一、park/unpark阻塞唤醒线程 LockSupport是JDK中用来实现线程阻塞和唤醒的工具。使用它可以在任何场合使线程阻塞&#xff0c;可以指定任何线程进行唤醒&#xff0c;并且不用担心阻塞和唤醒操作的顺序&#xff0c;但要注意连续多次唤醒的效果和一次唤醒是一样的。JDK并发包下…

【漏洞复现】CVE-2023-37461 Arbitrary File Writing

漏洞信息 NVD - cve-2023-37461 Metersphere is an opensource testing framework. Files uploaded to Metersphere may define a belongType value with a relative path like ../../../../ which may cause metersphere to attempt to overwrite an existing file in the d…

02-1:python入门基础Python变量与数据类型

一、Python 变量的定义 &#xff08;一&#xff09;定义方式 在 Python 中&#xff0c;变量的定义是通过赋值来实现的&#xff0c;其语法格式非常简洁直观&#xff0c;基本形式为 “变量名 值”。等号左边是你自定义的变量名&#xff0c;右边则是要赋给该变量的值。Python 是…

在Vue3中实现文件上传功能,结合后端API

随着现代Web应用程序的不断发展&#xff0c;文件上传成为了用户交互中不可或缺的一部分。在本篇博客中&#xff0c;我们将深入讨论如何在Vue3中实现一个文件上传功能&#xff0c;并与后端API进行交互。我们将使用Vue3的Composition API&#xff08;setup语法糖&#xff09;来构…

详细ECharts图例3添加鼠标单击事件的柱状图

<!DOCTYPE html><html><head><meta charset"UTF-8"><script src"js/echarts.js"></script> <!-- 确保路径正确 --><title>添加鼠标单击事件的柱状图</title></head><body><div id&q…

Redis Hash Tag 知识详解

一、Redis Hash Tag概述 Redis Hash Tag是Redis集群环境里用于控制数据分片的关键机制。在Redis集群中&#xff0c;数据依据键的哈希值来确定分片存储位置。Hash Tag能让用户指定键的特定部分作为哈希计算核心部分&#xff0c;进而使相关键存储于同一节点&#xff0c;这对处理…

Java 初学者的第一个 SpringBoot3.4.0 登录系统二

Java 初学者的第一个 SpringBoot3.4.0 登录系统二 SpringBoot 3.4.0 是 SpringBoot 的最新版本&#xff0c;是乐衷与新技术的 Java 初学者和程序员的选择。和 SpringBoot3.4.0 搭配的各种软件组件也是新的潮流。Java 通用代码生成器光&#xff0c;2.4.0 电音之王尝鲜版十支持新…

SSH客户端

SSH客户端 在VMware界面中操作虚拟机非常不友好&#xff0c;所以一般推荐使用专门的SSH客户端。市面上常见的有&#xff1a; Xshell&#xff1a;个人免费&#xff0c;商业收费&#xff0c;之前爆出过有隐藏后门。不推荐Finshell&#xff1a;基础功能免费&#xff0c;高级功能…

python小课堂(一)

基础语法 1 常量和表达式2 变量和类型2.1 变量是什么2.2 变量语法 3 变量的类型3.1 动态类型特性 4 注释4.1注释是什么 5 输入输出5.1 print的介绍5.2 input 6 运算符6.1 算术运算符在这里插入图片描述6.2 关系运算符6.3 逻辑运算符6.4赋值运算符 1 常量和表达式 在print()中可…

java中的方法的重载和重写、构造器

目录 方法的重载和重写、构造器1.java的修饰符&#xff1a;2.普通方法3.构造器&#xff08;也叫构造方法/构造函数&#xff09;4.方法的重载5.补充6.方法的重写7.类的执行顺序8.再看方法的重写 方法的重载和重写、构造器 1.java的修饰符&#xff1a; public修饰的代码&#xf…

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术&#xff0c;从一张模型图像中提取安全环的特征&#xff0c;并在后续图像中识别多个实例&#xff0c;完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

前端知识补充—HTML

1. HTML 1.1 什么是HTML HTML(Hyper Text Markup Language), 超⽂本标记语⾔ 超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者所加的评注、补充或脚注等等 标记语⾔: 由标签构成的语⾔…

springboot根据租户id动态指定数据源

代码地址 码云地址springboot根据租户id动态指定数据源: springboot根据租户id指定动态数据源,结合mybatismysql多数源下的事务管理 创建3个数据库和对应的表 sql脚本在下图位置 代码的执行顺序 先设置主数据库的数据源配置目标数据源和默认数据源有了主库的数据源&#xff…

powershell美化

powershell美化 写在前面 除了安装命令&#xff0c;其他都是测试命令&#xff0c;后续再写进配置文件 安装主题控件 安装主题oh-my-posh&#xff0c;powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…

Docker监控新纪元:Prometheus引领高效容器监控革命

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 •座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&…