当前位置: 首页 > news >正文

【ZYNQ Linux移植】4-内核移植

文章目录

  • 0 写在前面
  • 1 内核源码的文件结构
  • 2 Linux内核移植
    • 2.1 移植配置文件
    • 2.2 移植设备树
    • 2.3 创建脚本进行编译
    • 2.4 备份相关文件
  • 3 测试
  • 4 总结
  • 5 参考资料

0 写在前面

       这是一个系列博客,详细介绍如何在 ZYNQ 与 ZYNQ MP 平台上如何移植 Linux 系统。目前网络上的大部分教程都是全程基于 Petalinux 的开发,虽然这样简化了开发流程,但对于初学者深入理解掌握 Linux 是不利的,所以,有了这个系列的博客,从几乎为 0 开始教大家怎么移植 Linux 系统。

       本人的软件与环境版本:

       Windows 的 Vivado 与 Vitis 版本:2020.2(前期学习 ZYNQ7020 跟随正点原子安装);

       Ubuntu版本:18.04.2

       虚拟机上的 Vivado、Vitis 与 Petalinux 版本:2020.1(前期学习 ZYNQ MP 跟随 Alinx 安装)。

       所有相关的文件存放在虚拟机的以下路径:

~/Linux_tp

       如果后面涉及到一些命令行操作的文件路径,大家可以参考着修改为自己的路径。

       此外,我后续的操作与实测都是黑金(Alinx)基于 ZYNQ MP 系列的 zu3eg 操作,但基本也会对 ZYNQ-7000系列的一些不同做一些说明,如果你使用的是 ZYNQ-7000 系列的板卡,可以自己灵活变通一下。

1 内核源码的文件结构

       在第一篇:【ZYNQ Linux移植】1-前期准备中,我们已经获取了 Xilinx 官方提供的 Linux 内核源码。后续的操作,就将基于它进行。

       解压出来的 linux 内核源码包内的文件结构如下:

       这里对一些重要的文件与文件夹,进行一个大致的介绍:

文件名称描述
arch与芯片架构体系相关的目录
Documentation文档相关目录
drivers驱动相关目录
fs文件系统相关目录
include头文件相关目录
kernel内核相关目录
lib库相关目录
samples例程相关目录
scripts脚本文件
.config(隐藏文件)最终使用的配置文件
Kconfig图形化配置界面的配置文件

​       知道了大致的结构,接下来,我们开始移植!

2 Linux内核移植

2.1 移植配置文件

​       首先,明确一下配置文件都在什么地方,ZYNQ MP 系列与 ZYNQ-7000 系列使用的配置文件是不一样的!前者所在位置为:内核源码根目录/arch/arm64/configs/xilinx_zynqmp_defconfig,后者所在位置为:内核源码根目录/arch/arm/configs/xilinx_zynq_defconfig。从目录的差别也可以看出来前者为64位处理器(Cotex-A53),后者为32位处理器(Cotex-A9)。

       使用默认的配置文件可以让板卡启动 Linux 内核,但不能保证所有功能都好用(如 IIC、以太网驱动等),如果有自己的需求,如需要设置 CPU 的调频策略等,就可以使用图形化的界面进行修改,并保存配置文件,后续操作就以修改 CPU 调频策略为例进行演示。


       在 Linux 内核根目录,使用以下命令,进入图形化配置界面:

make menuconfig	

       按以下路径进入 CPU 调频选项处:

-->Power management and ACPI options(有的版本叫做CPU Power Management)-->CPU Frequency scaling-->Default CPUFreq governor (userspace)

       内核提供了以下六种调频策略:

​ (1)Performance,最高性能,直接用最高频率,不考虑耗电。

​ (2)Powersave,省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个

​ (3)Userspace,可以在用户空间手动调节频率,可以看到这是默认的配置

​ (4)Ondemand,定时检查负载,然后根据负载来调节频率。负载低的时候降低 CPU 频率以省电,负载高的时候提高 CPU 频率,增加性能。

​ (5)conservative:保守模式,类似于 ondemand,但调整相对较缓。

​ (6)schedutil: 4.7 版本内核新增加的一种调度策略, 可以直接使用调度程序提供的信息做出调整 cpu 频率的决策; 也可以调用 cpufreq 驱动程序更改频率以立即调整 CPU 的性能, 无需生成进程上下文或其他工作项。


​       不管在图形化界面进行了什么样的修改,都一定要记得保存!不过注意,默认是把配置文件保存为 .config 文件放在根目录下:

       如果后续要用这个配置文件进行编译,需要在编译时指定这个配置文件

       如果有 Petalinux,也可以在 Petalinux 工程根目录下使用以下命令:

petalinux-config -c kernel

​       以同样的方式进行修改,保存时,把配置文件保存到我们的 Linux 内核对应位置

/home/chj/Linux_tp/linux-xlnx-xlnx_rebase_v5.4/arch/arm64/configs/xilinx_zynqmp_defconfig

       相当于是覆盖掉原有的配置文件(建议备份一份)。

2.2 移植设备树

       我使用的是 ZYNQ MP 系列器件,把我们在第二篇:【ZYNQ Linux移植】2-获取设备树中备份的设备树,拷贝到:内核源码根目录/arch/arm64/boot/dts/xilinx。如果是 ZYNQ-7000 系列器件,需要拷贝到:内核源码根目录/arch/arm/boot/dts

       这里需要注意,如果是从 Vitis 获取的设备树,则有这4个文件即可,如果是从 Petalinux 获取的设备树,它的 system-top.dts 相较而言会多出一个头文件的包含:

​       我们需要也把它(以及它的包含头文件,一般还涉及 system-conf.dtsi,其位置为:Petalinux根目录/components/plnx_workspace/device-tree/device-tree)复制过来,当然如果没有自己追加设备树,把这行删掉也可以,不添加这个文件,这个文件的所在位置为:petalinux工程目录/project-spec/meta-user/recipes-bsp/device-tree/files

       但需要注意的是,由于我们需要后续从 SD 卡启动,所以我们需要在设备树新增对于 SD 卡的描述

/* SD */
&sdhci1 {disable-wp;no-1-8-v;
};

​       如果是不借助 Petalinux 移植,直接在 system-top.dts 后面追加上述内容即可,如果是使用 Petalinx,可以追加到 system-user.dtsi 中,并把它和它的包含头文件复制过来

       如果在后续的开发中,只需要修改设备树文件,则可以在 Linux 内核源码根目录下输入以下命令单独编译设备树:

make dtbs

       当然,需要先设置环境变量(可参考2.3)。这条命令只编译设备树文件,将 .dts 编译为 .dtb,编译完成以后就可以使用新的设备树文件。

2.3 创建脚本进行编译

       以上所有准备工作都完毕后,就可以进行编译了。编译都是需要在 Linux 内核源码的根目录下进行的。可以直接用命令编译,但更推荐的,是把命令写成一个 shell 脚本

       使用 vim 或者 touch 命令 加 gedit命令(不熟悉vim的使用)在根目录创建一个名为 zynqmp.sh 的 shell 脚本,并进行编辑:

touch zynqmp.sh
vi zynqmp.sh

       将其内容修改为(以 ZYNQ MP为例):

#!/bin/bashsource /opt/petalinux/2020.1/environment-setup-aarch64-xilinx-linuxmake distclean
make xilinx_zynqmp_defconfig
make -j16

       以下对这个脚本做一定的补充:

       (1)第三行先设置环境变量,有两种方式,一是可以使用 Vitis 的交叉编译器,这时使用的是 aarch64-linux-gnu

source /tools/Xilinx/Vitis/2020.1/settings64.sh
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

​       二是如果安装了 Petalinux 的话,可以使用 Petalinux 的交叉编译器(aarch64-xilinx-linux),这里就直接使用其加载环境变量的脚本即可:

source /opt/petalinux/2020.1/environment-setup-aarch64-xilinx-linux

​       我这里脚本选用了使用 Petalinux 的交叉编译器。

​       (2)第五行是先清理掉之前的编译结果

       (3)第六行是使用对应的配置文件编译 Linux 内核,注意 ZYNQ MP 系列与 ZYNQ-7000 系列使用不同的配置文件

make xilinx_zynqmp_defconfig
make xilinx_zynq_defconfig

       根据器件类型修改脚本。

       如果加载配置文件后,报以下错误,提示在 x86 下找不到配置文件,说明环境变量设置不对!参照上面使用 Vitis 或者 Petalinux

       (4)make -j16使用 16 线程进行编译,这个数字根据自己的配置进行修改。

       然后需要给予我们的脚本可执行权限,我这里是直接权限拉满了:

chmod 777 zynqmp.sh

       之后就可以运行编译了:

./zynqmp.sh

       内核编译不同于 u-boot 编译,编译时间会比较长,以我这个配置为例,大概需要三分钟时间。编译完后,可以观察到多了不少文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.4 备份相关文件

       通过 Linux 内核的编译,我们可以获取两个文件,一是内核镜像文件,二是设备树文件(.dtb)


       生成的内核镜像文件所在位置为:

内核源码根目录/arch/arm64/boot

       把 Image 备份出来。这个目录下还有一个 image.gz 的文件,它是 Image 的压缩包,ZYNQ 不能用它启动,而必须使用未压缩的 Image


       生成的设备树文件(.dtb)与我们放入的设备树(dts等)在同一目录下:

内核源码根目录/arch/arm64/boot/dts/xilinx	(ZYNQ MP)
内核源码根目录/arch/arm/boot/dts	(ZYNQ-7000)

       把生成的设备树也备份出来即可。

3 测试

​       把在前一篇:【ZYNQ Linux移植】3-u-boot移植获取的 BOOT.bin 和 这一篇获取的 Image设备树文件一同放入 SD 卡的 FAT 分区:

       调整板卡至 SD 卡启动模式。正常加载 u-boot:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

       使用以下 u-boot 命令加载镜像与设备树

fatload mmc 1:1 2000000 image
fatload mmc 1:1 1000000 system-top.dtb

在这里插入图片描述

       然后使用以下命令启动内核

booti 0x2000000 - 0x1000000

​       如果能加载如下画面,就算加载成功:

​       这时可能有人或疑惑,怎么没有正常板卡的那种启动打印log呢?这与我们当前的环境变量有关。重新给板卡上电,输入以下 u-boot 命令:

printenv bootargs

       我们可以看到输出结果为:bootargs=console=ttyPS0,115200 root=/dev/mmcblk1p2,这是说现在我们的设置默认从 SD 卡的第二个分区加载根文件系统。如果想要看启动的log,可以修改这个变量:

setenv bootargs 'console=ttyPS0,115200'

       然后重新按上面的命令加载内核与设备树,再启动内核,就能看到对应的打印log了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

       但因为我们现在还没有根文件系统,最后会报错:

end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

       也就是提示内核崩溃,因为根文件系统目录不存在, VFS(虚拟文件系统)不能挂载根文件系统。即使根文件系统目录存在,如果根文件系统目录里面是空的依旧会提示内核崩溃。这个就是根文件系统缺失导致的内核崩溃,但是内核是启动了的,只是根文件系统不存在而已。

4 总结

       在移植过程中,涉及的目录:

1,配置文件目录:内核源码根目录/arch/arm64/configs

2,设备树目录:内核源码根目录/arch/arm64/boot/dts/xilinx

​       最后获取的目标文件:

Image镜像文件:内核源码根目录/arch/arm64/boot

设备树文件 :内核源码根目录/arch/arm64/boot/dts/xilinx

5 参考资料

1,DeepSeeker相关搜索结果;

2,《正点原子 MPSoC-P5B之嵌入式Linux开发指南_V1.0》

相关文章:

【ZYNQ Linux移植】4-内核移植

文章目录 0 写在前面1 内核源码的文件结构2 Linux内核移植2.1 移植配置文件2.2 移植设备树2.3 创建脚本进行编译2.4 备份相关文件 3 测试4 总结5 参考资料 0 写在前面 这是一个系列博客,详细介绍如何在 ZYNQ 与 ZYNQ MP 平台上如何移植 Linux 系统。目前网络上的大部…...

代码随想录算法训练营第三十二天

LeetCode/卡码网题目: 518. 零钱兑换 II377. 组合总和 Ⅳ790. 多米诺和托米诺平铺(每日一题)57. 爬楼梯(第八期模拟笔试) 其他: 今日总结 往期打卡 背包问题特点: 滚动数组背包遍历顺序 完全背包从小到大,即基于当前物品更新过的继续更新01背包从大到…...

java CompletableFuture 异步编程工具用法1

1、测试异步调用: static void testCompletableFuture1() throws ExecutionException, InterruptedException {// 1、无返回值的异步任务。异步线程执行RunnableCompletableFuture.runAsync(() -> System.out.println("only you"));// 2、有返回值的异…...

Spring Boot 集成 Solr 的详细步骤及示例

环境准备 安装 Solr :从 Solr 官网(Welcome to Apache Solr - Apache Solr)下载并安装最新版本,然后通过命令 bin/solr start 启动 Solr 服务,使用 bin/solr create -c mycore 创建一个新的 Solr 核心。 安装 JDK &am…...

Nemotron-Research-Tool-N1 如何提升大语言模型工具使用能力?

Nemotron-Research-Tool-N1如何提升大语言模型工具使用能力? 如今,大语言模型(LLMs)发展迅猛,给它配备外部工具成为研究热点。但传统方法存在不少问题。这篇论文提出的Nemotron-Research-Tool-N1系列模型带来新突破&a…...

OpenCV进阶操作:图像直方图、直方图均衡化

文章目录 一、图像直方图二、图像直方图的作用三、使用matplotlib方法绘制直方图2.使用opencv的方法绘制直方图(划分16个小的子亮度区间)3、绘制彩色图像的直方图 四、直方图均衡化1、绘制原图的直方图2、绘制经过直方图均衡化后的图片的直方图3、自适应…...

Android控件VideoView用法

一 控件UI <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter" /> 二 配置 <?xml version="1.0" encoding="u…...

人工智能数学基础(十)—— 图论

图论作为数学的重要分支&#xff0c;为人工智能提供了强大的建模和分析工具。无论是社交网络分析、路径规划还是数据结构设计&#xff0c;图论都发挥着不可替代的作用。今天&#xff0c;我将带领大家深入浅出地探索图论的核心概念&#xff0c;并结合 Python 实例&#xff0c;让…...

深入探索Anthropic Claude与Spring AI的融合应用

深入探索Anthropic Claude与Spring AI的融合应用 前言 在人工智能的蓬勃发展进程中&#xff0c;自然语言处理领域不断涌现出强大的模型和工具。Anthropic Claude系列基础AI模型凭借其出色的性能&#xff0c;在各种应用场景中展现出巨大潜力&#xff0c;为开发者和企业提供了丰…...

Python爬虫实战:获取优美图库各类高清图片,为用户提供设计素材

一、引言 在互联网时代,高清壁纸资源丰富多样,而优美图库作为一个提供大量精美壁纸的网站,吸引了众多用户。通过 Python 爬虫技术,可以自动化地从该网站获取所需的壁纸资源,为用户节省时间和精力。然而,网站通常会采取反爬措施来防止数据被恶意抓取,因此需要在爬虫程序…...

Java常用注解大全(基于JDK17+SpringBoot3)

一、基础注解(Java原生) 编译相关 @Override:方法重写校验 java 复制 下载 @Override public String toString() { return "CustomObj"; } @Deprecated:标记过时元素 java 复制 下载 @Deprecated(since="1.8", forRemoval=true) public void oldMethod…...

【NLP】30. 深入理解 In-Context Learning 的核心机制与策略

In-Context Learning&#xff08;ICL&#xff09;详解&#xff1a;提示学习时代的语言理解 一、什么是 In-Context Learning&#xff08;ICL&#xff09;&#xff1f; In-Context Learning 是指&#xff1a; 不改变模型参数&#xff0c;通过在输入中加入示例&#xff08;demon…...

数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记

数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记 环境准备 这篇笔记记录了我在 Windows 10/11 上部署数字化工厂中央控制室驾驶舱系统的全过程&#xff0c;包括各种常见问题的解决方法。部署过程中使用了国内镜像源来加快下载速度。 前置需求 Python&#xff1a;3.8 到…...

数据库的原子事务

原子事务 11.1 全有或全无效应 二级索引需要原子性的多键更新&#xff0c;这不仅对数据库内部一致性至关重要&#xff0c;也对应用数据的一致性非常有用&#xff08;例如考虑账户余额和账户交易&#xff09;。 我们将放弃get-set-del接口&#xff0c;并添加一个新的接口来允…...

基于51单片机的红外人体感应报警器

基于51单片机的人体监测报警 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff09; 功能介绍 具体功能&#xff1a; 1.按下报警按钮会发生红LED蜂鸣器声光报警&#xff1b; 2.若检测到人&#xff0c;黄LED打开&#xff1b; 3.按下布防按键&…...

从Excel到高级工具:数据分析进阶指南

从Excel到高级工具&#xff1a;数据分析进阶指南 在数据分析的世界里&#xff0c;Excel曾经是众多人的第一站。它简单、直观、功能强大&#xff0c;从普通用户到专业人士&#xff0c;无不对其依赖。然而&#xff0c;随着数据规模增长、分析需求升级&#xff0c;Excel渐渐显得力…...

Excel VBA 自定义函数

一、VBA 函数基础概念 在 Excel VBA 中&#xff0c;函数主要分为两种类型&#xff1a; Sub 过程&#xff1a;执行操作但不返回值Function 函数&#xff1a;执行操作并返回结果 基本语法示例 1. Function 函数示例 定义一个返回字符串的公共函数 Public Function GetGreetin…...

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…...

【Quest开发】接入语音转文字

参考官方文档&#xff1a;https://developers.meta.com/horizon/documentation/unity/voice-sdk-tutorials-overview 软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 注意&#xff1a;需全程科学上网 Meta提供了一…...

Vim 命令从头学习记录

学习链接&#xff1a;eleon-vim基础教程 Vim - 基础翻屏操作 光标移动&#xff1a;hjkl 20j 向下移动20行&#xff0c;w 向后移动一个字符&#xff0c;b 向前移动一个字符。 Ctrl u 向上翻半页 UP Ctrl d 向下翻半页 Down Ctrl f 向下翻整页 Forward Ctrl b 向上翻整页 …...

[Linux]物理地址到虚拟地址的转化

[Linux]物理地址到虚拟地址的转化 水墨不写bug 文章目录 一、再次认识地址空间二、页表1、页表的结构设计2、页表节省了空间&#xff0c;省在哪里&#xff1f;3、页表的物理实现 一、再次认识地址空间 OS和磁盘交互的内存基本单位是4KB&#xff0c;这4KB通常被称为内存块。OS对…...

js获取明天日期、Vue3大菠萝 Pinia的使用

直接上代码 const today new Date(2019, 2, 28) const finalDate new Date(today) finalDate.setDate(today.getDate() 3)console.log(finalDate) // 31 March 2019 安装 yarn add pinia # or with npm npm install pinia创建第一个store仓库 1、在src目录下创建store目录…...

矩阵置零(中等)

可以用两个标记数组分别记录每一行和每一列是否有零出现。 首先遍历该数组一次&#xff0c;如果某个元素为 0&#xff0c;那么就将该元素所在的行和列所对应标记数组的位置置为 true。然后再次遍历该数组&#xff0c;用标记数组更新原数组。 class Solution {public void set…...

GZ人博会自然资源系统(测绘)备考笔记

本文为备考 GZ人才博览会自然资源系统&#xff08;测绘&#xff09; 的笔记&#xff0c;包括若干 知识点整理 及 近两年考核&#xff08;面试&#xff09;真题 &#xff08;文末附《GZ人博会自然资源系统&#xff08;测绘&#xff09;备考笔记》1 的下载链接&#xff09;。 目录…...

《进制转换的终极指南:原理、方法与编程应用》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、进制转换的基本原理二、进制转换方法总结&#xff08;一&#xff09;使用权重法的转换1. 二进制 → 十进制2. 八进制 → 十进制3. 十六进制 → 十进制 &…...

2025系统架构师---论软件的设计模式论文

2023 年,我所在的公司承担了某部网络靶场的研发任务。我作为公司的技 术总监,希望能打造基于网络靶场的系列产品,参与到项目的设计中,以期开发 扩展性和可维护性良好的网络靶场,为以后的产品开发打下基础。网络靶场是网 络安全技术研究的基础支撑平台,它利用虚拟的和实物…...

嵌入式Linux驱动学习

Ubuntu18 下载链接 https://releases.ubuntu.com/bionic/ Ubuntu配置静态IP 更新Ubuntu18的镜像源 以清华大学镜像源举例 网站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ 第一步点开网站搜索ubuntu然后点击问号 第二步选择自己的Ubuntu版本 第三步在Ubuntu中复制…...

基于大模型的子宫腺肌病全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、子宫腺肌病概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 现有诊断与治疗方法综述 三、大模型技术原理与应用基础 3.1 大模型简介 3.2 在医疗领域的应用现状 3.3 适用于子宫腺肌病预测的可行性分析…...

Notebook.ai 开源程序是一套工具,供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切

​一、软件介绍 文末提供程序和源码下载 Notebook.ai 开源程序是一套工具&#xff0c;供作家、游戏设计师和角色扮演者创建宏伟的宇宙 - 以及其中的一切。 二、软件特点 Notebook 是作家的规划工具&#xff0c;用于创建从宇宙到角色、情节到单个项目的任何内容。通过浏览器、…...

关于 dex2oat 以及 vdex、cdex、dex 格式转换

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ dex2oat dex2oat 是 Android 系统中的一个核心工具&#xff0c;负责将应用中的 .dex&#xff08;Dalvik Executable&#xff09;字节码编译为本地机器代码&am…...

Java---Object和内部类

Object类和内部类 前言&#xff1a;一、Object类1.object类初识2.Object的方法2.(1).获取对象的信息--toString方法2.(2).对象比较equals方法2.(3).hashCode方法 二、内部类1.内部类初识&#xff1a;2.内部类的分类&#xff1a;2.(1).实例内部类2.(2).静态内部类2.(3).匿名内部…...

【OSPF协议深度解析】从原理到企业级网络部署

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心配置实现案例1&#xff1a;单区域基础配置案例2&#xff1a;多区域配置案例3&#xff1a;安全认证配置 运行…...

linux tar命令详解。压缩格式对比

1.压缩格式对比 压缩格式命令选项文件扩展名压缩率速度无压缩-cvf.tar无最快gzip-czvf.tar.gz中等较快bzip2-cjvf.tar.bz2较高较慢xz-cJvf.tar.xz最高最慢 9. 更多参考 【Linux基础】文件压缩tar命令指南tar压缩方式对比...

C++和Lua混和调用

为什么要C/C 流行的语言&#xff0c;学习人员多高性能&#xff0c;对于嵌入式设备则是省电大量的第三方库 为什么要Lua C缺点&#xff1a;编译慢&#xff0c;调试难&#xff0c;学习难度大Lua优点&#xff1a; 最快的脚本语言可以编译调试与C/C结合容易Lua是对性能有要求的必…...

Cadence高速系统设计流程及工具使用

上一章已经谈到&#xff0c;在Cadence的高速设计流程中&#xff0c;有两个重要的工具SigXP和Constrain Manager&#xff08;CM约束管理器&#xff09;。SigXP是仿真分析工具和约束生成工具&#xff0c;我们就是使用这个工具对关键信号进行仿真的。SI工程师通过对仿真结果的分析…...

Unity:AddTorque()(增加旋转力矩)

目录 什么是 AddTorque()&#xff1f; 第一性原理出发&#xff1a;什么是 Torque&#xff08;力矩&#xff09;&#xff1f; Torque 公式 Unity 中 AddTorque 的工作原理 参数属性 &#x1f50d; Linear Drag&#xff08;线性阻力&#xff09; 线性阻力模拟的现实情况&…...

嵌入式硬件设计全解析:从架构到实战

一、嵌入式硬件设计核心架构与系统组成​ 1. 处理器选型与架构设计​ (1)处理器类型与应用场景​ 处理器类型​ 代表架构 / 型号​ 典型应用场景​ 核心优势​ 微控制器(MCU)​ ARM Cortex-M3/M4、STM32F 系列​ 低功耗控制、小型设备​ 集成外设、低功耗、低成本​ 微处…...

R7打卡——糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch.nn as nn import torch.nn.functional as F import torchvision,torch# 设置硬件设备&#xff0c;如果有GPU则使用&#xff0c;没有…...

win10开了移动热点,手机无法连接,解决办法(chatgpt版)

提问&#xff1a; win10连着网线上网&#xff0c;有无线网卡intel Wireless-AC 9560网卡 可以用电脑开移动热点给手机连接吗&#xff1f;如何设置&#xff1f;我现在可以开热点&#xff0c;但是手机连不上&#xff0c;显示正在获取ip地址后就连不上了 chatgpt回答&#xff1a…...

下载core5compat 模块时,被禁止,显示 - servese replied: Forbbidden. -->换镜像源

怎么解决&#xff1f; --->换镜像源 方法 1&#xff1a;使用命令行参数指定镜像源 在运行 Qt 安装器时&#xff0c;通过 --mirror 参数指定镜像源&#xff1a; # Windows qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject# Linux/macO…...

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《用无人机仿真玩转PID控制:MATLAB四旋翼仿真建模全攻略》

《MATLAB实战训练营&#xff1a;从入门到工业级应用》高阶挑战篇-✈️ 用无人机仿真玩转PID控制&#xff1a;MATLAB四旋翼仿真建模全攻略 &#x1f681; 欢迎来到这篇超级详细的MATLAB四旋翼无人机仿真教程&#xff01;无论你是控制理论爱好者、无人机发烧友&#xff0c;还是M…...

GESP2024年3月认证C++八级( 第二部分判断题(1-5))

孙子定理参考程序&#xff1a; #include <iostream> #include <vector> using namespace std;// 扩展欧几里得算法&#xff1a;用于求逆元 int extendedGCD(int a, int b, int &x, int &y) {if (b 0) {x 1; y 0;return a;}int x1, y1;int gcd extende…...

PHP的现代复兴:从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡

PHP的现代复兴&#xff1a;从脚本语言到企业级服务端引擎的演进之路-优雅草卓伊凡 一、PHP的历史误解与现实真相 1.1 被固化的陈旧认知 当卓伊凡浏览知乎上关于PHP的讨论时&#xff0c;发现大量回答仍然停留在十年前的刻板印象中。这些误解包括但不限于&#xff1a; “PHP只…...

手表功能RunModeTasks

RunModeTasks 功能解释 “RunModeTasks 执行特定于当前模式的功能 根据模式控制作行为”这句话是指 OV-Watch 智能手表项目中的一组任务&#xff0c;这些任务负责管理设备的运行模式并根据不同模式控制设备的行为。 主要组成部分 RunModeTasks 主要由以下三个部分组成&#…...

Qt6.8中进行PDF文件读取和编辑

1.环境配置 在 .pro 文件中添加 PDF 模块依赖&#xff1a; QT core gui pdf # 添加 pdf 模块 注意&#xff1a;独立 pdf 模块的起始版本是Qt 5.15&#xff0c;建议需要 PDF 功能的开发者优先选择此版本或更高版本 2.读取PDF 文件 核心类&#xff1a;QPdfDocument&#xf…...

Barrett Reduction算法优化:更紧的界限消除冗余的减法

1. 引言 Barrett Reduction 是一种被广泛使用的模 m m m 运算算法。在zkSecurity 受NEAR团队所委托的&#xff08;针对RustCrypto: NIST P-256 (secp256r1) elliptic curve——https://github.com/RustCrypto/elliptic-curves/tree/master/p256&#xff09;进行的 Rust p256 …...

Node.js 是什么?

Node.js 是什么? Node.js 是一个基于 Chrome V8 JavaScript 引擎 的 跨平台 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它使开发者能够使用 JavaScript 编写后端(服务端)程序,而不仅仅局限于浏览器端(前端)。 1. Node.js 的核心特点 (1) 基于 Chrom…...

数据结构中 数组、链表、图的概念

数据结构是计算机存储、组织数据的方式&#xff0c;数组、链表和图是三种常见的数据结构&#xff0c;下面为你详细介绍它们的概念&#xff1a; 数组 数组是一种线性数据结构&#xff0c;它由一组相同类型的元素组成&#xff0c;这些元素存储在连续的内存位置上。每个元素都可…...

基于PPO的自动驾驶小车绕圈任务

1.任务介绍 任务来源: DQN: Deep Q Learning &#xff5c;自动驾驶入门&#xff08;&#xff1f;&#xff09; &#xff5c;算法与实现 任务原始代码: self-driving car 在上一篇使用了DDPG算法完成自动驾驶小车绕圈任务之后&#xff0c;继续学习了PPO算法&…...

Three.js + React 实战系列 - 客户评价区细解教程 Clients 组件✨(回答式评价 + 评分星级)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦&#xff01;&#xff01;谢谢大家&#xff01;&#xff01;&#xff01; 在这篇博客中&#xff0c;我们将实现一个简洁的 Hear from My Clients 客户评价区域。这个区块在个人主页中可以突显用户体验和专业度&#xff0c;帮…...