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

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.dtbsetenv 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.254saveenv

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

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

cfe2bd88b0cf40ac86b4912dd950022f.png

上电成功示意图:

abecfbad68224b30b22f09ce8b85134b.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MindSpore NLP的PEFT微调

创建notebook 登录控制台 创建notebook 如果出现提示按如下操作 回到列表页面创建notebook参数如下: 配置mindnlp环境 打开GitHub - mindspore-lab/mindnlp: Easy-to-use and high-performance NLP and LLM framework based on MindSpore, compatible with model…

centos-stream9系统安装docker

如果之前安装过docker需要删除之前的。 sudo dnf -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装yum-utils工具: dnf -y install yum-utils dnf-plugin…

Redis存在安全漏洞

Redis是美国Redis公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。 Redis存在安全漏洞。攻击者利用该漏洞使用特制的Lua脚本触发堆栈缓冲区溢出漏洞,从…

黑马Java面试教程_P8_并发编程

系列博客目录 文章目录 系列博客目录前言1.线程的基础知识1.1 线程和进程的区别?难2频3面试文稿 1.2 并行和并发有什么区别? 难1频1面试文稿 1.3 创建线程的四种方式 难2频4面试文稿 1.4 runnable 和 callable 有什么区别 难2频3面试文稿 1.5 线程的 run…

ubuntu22.04 nginx配置下载目录,亲测成功

安装nginx ubuntu最简单,apt安装即可 apt install nginx 配置文件 文件都在目录下 /etc/nginx/添加内容 修改/ etc/nginx/sites-available/default , 注意这里不是nginx.conf,直接修改nginx.conf不奏效 location /downloads { …

【从零开始入门unity游戏开发之——C#篇21】C#面向对象的封装——`this`扩展方法、运算符重载、内部类、`partial` 定义分部类

文章目录 一、this扩展方法1、扩展方法的基本语法2、使用扩展方法3、扩展方法的注意事项5、扩展方法的限制6、总结 二、运算符重载1、C# 运算符重载2、运算符重载的基本语法3. 示例:重载加法运算符 ()4、使用重载的运算符5、支持重载的运算符6、不能重载的运算符7、…

android EditText密码自动填充适配

android上的密码(其实不仅仅是密码,可以是用户名也可以是邮箱)自动填充,是需要考虑适配的。 官方文档:https://developer.android.com/identity/autofill/autofill-optimize?hlzh-cn 什么是自动填充 手机厂商一般会…

stm32制作CAN适配器5--WinUsb上位机编写

上次我们要stm32制作了一个基于winusb有canfd适配器,今天我们来制作一个上位机程序来进行报文收发。 上位机还是用以前写好的,只是更改下dll文件。 项目链接器,输入,附加依赖项中增加winusb.lib winusb初始化:#incl…

数据库管理系统——数据库设计

摘要:本博客讲解了数据库管理系统中的数据库设计相关内容,包括概念结构设计:E-R模型,逻辑结构设计:E-R模型到关系设计等内容。 目录 一、数据库设计和数据模型 1.1.数据库设计概述 1. 2.数据库结构概述 1.3.数据库…

Pytorch | 从零构建AlexNet对CIFAR10进行分类

Pytorch | 从零构建AlexNet对CIFAR10进行分类 CIFAR10数据集AlexNet网络结构技术创新点性能表现影响和意义 AlexNet结构代码详解结构代码代码详解特征提取层 self.features分类部分self.classifier前向传播forward 训练过程和测试结果代码汇总alexnet.pytrain.pytest.py CIFAR1…

C++ 杨辉三角 - 力扣(LeetCode)

点击链接即可产看题目:118. 杨辉三角 - 力扣(LeetCode) 一、题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出…

【JetPack】WorkManager笔记

WorkManager简介: WorkManager 是 Android Jetpack 库中的一个重要组件。它用于处理那些需要在后台可靠执行的任务,这些任务可以是一次性的,也可以是周期性的,甚至是需要满足特定条件才执行的任务。例如,它可以用于在后…

GTID详解

概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…

常耀斌:深度学习和大模型原理与实战(深度好文)

目录 机器学习 深度学习 Transformer大模型架构 人工神经元网络 卷积神经网络 深度学习是革命性的技术成果,有利推动了计算机视觉、自然语言处理、语音识别、强化学习和统计建模的快速发展。 深度学习在计算机视觉领域上,发展突飞猛进,…

vsCode怎么使用vue指令快捷生成代码

1.下载Vetur插件 2.在文件-首选项-配置代码片段中找到vue.json文件 (注:旧版本的编辑器路径为文件-首选项-用户片段) 3.在打开的配置代码片段弹窗中搜索vue.json,找到并打开 (注:如果搜不到的话就按住鼠标…

python学opencv|读取图像(十八)使用cv2.line创造线段

【1】引言 前序已经完成了opencv基础知识的学习,我们已经掌握了处理视频和图像的基本操作。相关文章包括且不限于: python学opencv|读取图像(三)放大和缩小图像_python(1)使用opencv读取并显示图像;(2)使用opencv对图像进行缩放…

unity webgl部署到iis报错

Unable to parse Build/WebGLOut.framework.js.unityweb! The file is corrupt, or compression was misconfigured? (check Content-Encoding HTTP Response Header on web server) iis报错的 .unityweb application/octet-stream iis中添加 MIME类型 .data applicatio…

【深度学习】零基础介绍循环神经网络(RNN)

RNN介绍 零基础介绍语言处理技术基本介绍分词算法词法分析工具文本分类与聚类情感分析 自然语言处理词向量词向量学习模型1. 神经网络语言模型2. CBOW 和 skip-gram3. 层次化softmax方法4. 负采样方法 RNN介绍RNN的变种:LSTM1. Forget Gate2. Input Gate3. Update M…

Docker Compose 安装 Harbor

我使用的系统是rocky Linux 9 1. 准备环境 确保你的系统已经安装了以下工具: DockerDocker ComposeOpenSSL(用于生成证书)#如果不需要通过https连接的可以不设置 1.1 安装 Docker 如果尚未安装 Docker,可以参考以下命令安装&…

面试题整理9----谈谈对k8s的理解1

谈谈对k8s的理解 1. Kubernetes 概念 1.1 Kubernetes是什么 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统,其服务、支持和工具的…