RK3399开发板Linux实时性改造
本次测试基于NanoPC-T4开发板(国产化处理器RK3399),4.19.111内核+Xenomai实时性改造测试。
-
Xenomai下载网站:https://xenomai.org/downloads/
-
NanoPC-T4网站:https://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/zh
1、RK3399移植Xenomai实时框架
按照NanoPC-T4网站中的12节,搭建环境,安装交叉编译器,下载源码,编译系统。
建议使用64位的国产Linux系统,需要安装如下软件包:
sudo apt-get -y install bison g++-multilib git gperf libxml2-utils make
python-networkx zip
sudo apt-get -y install flex curl libncurses5-dev libssl-dev zlib1g-dev gawk minicom
sudo apt-get -y install openjdk-8-jdk
sudo apt-get -y install exfat-fuse exfat-utils device-tree-compiler liblz4-tool
sudo apt-get -y install android-tools-fsutils
sudo apt-get -y install swig
sudo apt-get -y install python-dev python3-dev
-
安装交叉编译器
该编译器可用来编译Linux系统的内核和u-boot,用以下命令下载并安装:
git clone https://github.com/friendlyarm/prebuilts.git -b master
--depth 1
cd prebuilts/gcc-x64
cat toolchain-6.4-aarch64.tar.gz* | sudo tar xz -C /
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin:$PATH
export GCC_COLORS=auto
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
. ~/.bashrc
这个编译器是64位的,不能在32位的PC Linux系统上运行,安装完成后,用以下命令可以验证是否安装成功:
aarch64-linux-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gcc
COL-LECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/6.4-aarch64/libexec/gcc/aarch64-cortexa53-linux-gnu/6.4.0/lto-wrapper
Target: aarch64-cortexa53-linux-gnu
Configured with: /work/toolchain/build/aarch64-cortexa53-linux-gnu/build/src/gcc/configure --build=x86_64-build_pc-linux-gnu
--host=x86_64-build_pc-linux-gnu --target=aarch64-cortexa53-linux-gnu --prefix=/opt/FriendlyARM/toolchain/6.4-aarch64
--with-sysroot=/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot --enable-languages=c,c++
--enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-cpu=cortex-a53
...
Thread model: posix
gcc version 6.4.0 (ctng-1.23.0-150g-FA)
-
ipipe补丁
从Xenomai下载网站上下载xenomai-3.1.tar.bz2压缩包以及ipipe-core-4.19.115-arm64-6.patch,与4.19.111内核源码放在同一目录下。
进入内核源码目录,打ipipe补丁。
cd linux-kernel-rk3399-4.19.111-2c71631-20210307
patch -p1 < ../ipipe-core-4.19.115-arm64-6.patch
因为小版本号有不同,所以会有部分地方的补丁打不上,需要根据.rej文件手动去打补丁。
-
xenomai补丁
解压xenomai源码目录,进入xenomai源码目录xenomai-3.1/scripts,使用脚本prepare-kernel.sh对linux内核源码打cobalt内核补丁
tar -xvf xenomai-3.1.tar.bz2
cd xenomai-3.1/scripts
./prepare-kernel.sh --linux=~/Desktop/rk3399/linux-kernel-rk3399-4.19.111-2c71631-20210307 --arch=arm64 --outpatch=../../xenomai-4.19.111.patch
其中主要参数为:
--linux=指定linux源码的绝对路径;
--ipipe=指定ipipe补丁。如果已经手动对linux源码打ipipe补丁,则不需要指定该参数。
--arch=指定硬件架构,x86_64、arm、arm64
outpatch=指定输出xenomai patch(绝对路径)。默认情况下如果不使用该参数,prepare-kernel.sh打cobalt内核补丁时,只会在linux源码目录建立与cobalt源码的软连接文件,这样的话,如果xenomai源码移动了就会有很多问题,所以推荐使用该参数生成xenomai内核的补丁,再去对linux使用该补丁。这样linux源码内的cobalt内核相关源码文件就不是链接文件了,今后再次构建时也直接使用该补丁。
回到linux源码目录使用补丁:
cd linux-kernel-rk3399-4.19.111-2c71631-20210307
patch -p1 < ../xenomai-4.19.111.patch
-
xenomai内核配置
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nano-pi4_linux_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig
进行如下配置:
CPU Frequency scaling --->[ ] CPU Frequency scalingCPU Idle --->[ ] CPU idle PM support
-
编译源码
使用准备的源码,进行编译:
cd linux-kernel-rk3399-4.19.111-2c71631-20210307
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images
编译完成后会生成 kernel.img resource.img 这两个文件,将其拷贝到eflasher系统的TF卡覆盖旧文件即可, 假设TF卡的FRIENDLYARM分区挂载到FRIENDLYARM目录,更新命令如下:
注:tf卡需要先刷写rk3399-eflasher-friendlycore-focal-4.19-arm64-20210319.img镜像文件。
# for Lubuntu
cp kernel.img resource.img /media/FRIENDLYARM/lubuntu/# for FriendlyCore
cp kernel.img resource.img /media/FRIENDLYARM/friendlycore-arm64/# for FriendlyDesktop
cp kernel.img resource.img /media/FRIENDLYARM/friendlydesktop-arm64/
2、实时性能测试
Cyclictest 是 rt-tests 下的一个测试工具,也是rt-tests 下使用最广泛的测试工具,它是一个高精度的测试程序,一般主要用来测试使用内核的延迟,从而判断内核的实时性。介绍几个常用参数:
-p PRIO --prio=PRIO 最高优先级线程的优先级 使用时方法为: -p 90 / --prio=90-m --mlockall 锁定当前和将来的内存分配-c CLOCK --clock=CLOCK 选择时钟 cyclictest -c 10 = CLOCK_MONOTONIC (默认)1 = CLOCK_REALTIME-i INTV --interval=INTV 基本线程间隔,默认为1000(单位为us),-l LOOPS --loops=LOOPS 循环的个数,默认为0(无穷个),与 -i 间隔数结合可大致算出整个测试的时间,比如 -i 1000 -l 1000000 ,总的循环时间为1000*1000000=1000000000 us =1000s ,所以大致为16分钟多。-n --nanosleep 使用 clock_nanosleep-h HISTNUM --histogram=US 在执行完后在标准输出设备上画出延迟的直方图(很多线程有相同的权限)US为最大的跟踪时间限制,结合gnuplot 可以画出我们测试的结果图。-q --quiet 使用-q 参数运行时不打印信息,只在退出时打印概要内容,结合-h HISTNUM参数会在退出时打印HISTNUM 行统计信息以及一个总的概要信息。-f --ftrace ftrace函数跟踪(通常与-b 配套使用,其实通常使用 -b 即可,不使用 -f)-b USEC --breaktrace=USEC 当延时大于USEC指定的值时,发送停止跟踪。USEC,单位为谬秒(us)。
输出结果含义:
T: 0 序号为0的线程
P: 0 线程优先级为0
C: 计数器。线程的时间间隔每达到一次,计数器加1
I: 时间间隔(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max:最大延时(us)
使用下述命令安装rt-tests测试工具。
#sudo apt install rt-tests
使用NanoPC-T4开发板以及两个个不同版本的内核进行测试。目的是评测实时化改造后系统实时性差异。分别使用4.19.111,4.19.111 + xenomai 3.1两个版本的内核,使用rt-tests工具在有/无压测的测试场景中进行全线程、不计次数、使用clock_nanosleep高分辨率睡眠时钟、优先级为99的cyclictest测试。
本次实时内核测试使用以下命令:
sudo cyclictest -a -t -p99
-a:全线程(根据CPU核数自动创建,RK3399为6核,会启动6线程)
-t:不限次数循环测试
-p:设置优先级(设置线程最大级别99)
-
4.19.111内核测试
-
4.19.111+Xenomai3.1内核测试
从统计结果可以看出,可以看出Xenomai3.1的实时补丁,在实时调度中表现的效果有比较明显的提升。
相关文章:
RK3399开发板Linux实时性改造
本次测试基于NanoPC-T4开发板(国产化处理器RK3399),4.19.111内核Xenomai实时性改造测试。 Xenomai下载网站:https://xenomai.org/downloads/ NanoPC-T4网站:https://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/z…...
ASP.NET Core 中的高效后台任务管理
一、引言 在当今快速发展的 Web 开发领域,ASP.NET Core 凭借其卓越的性能、强大的功能和高度的灵活性,已然成为众多开发者构建现代 Web 应用程序的首选框架。它不仅能够高效地处理各种复杂的业务逻辑,还为开发者提供了丰富多样的工具和功能&…...
Spring Boot 2 学习指南与资料分享
Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域,Spring Boot 2 凭借其卓越的特性,为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2,以下这份精心…...
知识追踪模型DKT,DLKT详解及代码复现
定义与应用 知识追踪是一种 教育技术领域的重要方法 ,旨在通过分析学生的学习行为和表现,预测其掌握特定知识点的程度。这种方法的核心在于建立能够反映学习者认知状态的动态模型,从而实现对学生学习进度的实时监控和个性化指导。 DKT模型 DKT模型 是最早的知识追踪模型之…...
一类特殊积分的计算
一类特殊积分的计算 前言一、第一个引理二、第二个引理三、积分的计算后记 前言 今天讨论的这类积分是十分有趣的,在 Mathematics Stack Exchange 看见后,便打算在此将其中的计算过程完善一下。在本篇文章中,我们重点考虑求解如下积分&#…...
VScode 配置 C语言环境
遇到的问题集合 mingw官方下载网站(https://sourceforge.net/projects/mingw-w64/files/)更新之后,与网上大多数教程上写的界面不同了。 网上大多数教程让下载这个: 但是现在找不到这个文件。 写hello.c文件时,报错&…...
spring mvc源码学习笔记之十一
pom.xml 内容如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...
小结:路由器和交换机的指令对比
路由器和交换机的指令有一定的相似性,但也有明显的区别。以下是两者指令的对比和主要差异: 相似之处 基本操作 两者都支持类似的基本管理命令,比如: 进入系统视图:system-view查看当前配置:display current…...
ffmpeg7.0 aac转pcm
#pragma once #define __STDC_CONSTANT_MACROS #define _CRT_SECURE_NO_WARNINGSextern "C" { #include "libavcodec/avcodec.h" }//缓冲区大小(缓存5帧数据) #define AUDIO_INBUF_SIZE 40960 /*name depthu8 8s16 …...
C#读取本地网络配置信息全攻略
一、引言 在当今数字化时代,网络已深度融入我们生活与工作的方方面面。对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键。想象一下,你正在开发一款网络诊断工具,需要精准定位网络连接问题,此时 IP 地址、…...
解决aerich init -t xx 报错ModuleNotFoundError: No module named ‘tomli_w‘
今天在学习fastapi的时候,发现一款数据库迁移工具,通过这个工具可以根据模型类来对数据库做出改变。 随跟着学: 在执行 aerich init -t settings.TORTOISE_ORM的时候, 彼其娘之。。 报了一些错误: Traceback (most recent ca…...
python检测gitlab中某个标签在一个月内添加和移除了多少次
可以通过 Python 脚本和 GitLab API 检测一个标签在一个月内被添加和移除的次数。以下是实现的步骤和示例代码: 步骤 获取 GitLab API 访问令牌:在 GitLab 中生成一个 Personal Access Token。设置时间范围:确定一个月的时间范围。调用 Git…...
学习模板之一
学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#x…...
2025-微服务—SpringCloud-1~3
2025-微服务—SpringCloud 第一章、从Boot和Cloud版本选型开始说起1、Springboot版本2、Springcloud版本3、Springcloud Alibaba4、本次讲解定稿版 第二章 关于Cloud各种组件的停更/升级/替换1、微服务介绍2、SpringCloud是什么?能干吗?产生背景…...
centos7.6 安装nginx 1.21.3与配置ssl
1 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2 下载Nginx wget http://nginx.org/download/nginx-1.21.3.tar.gz3 安装目录 mkdir -p /data/apps/nginx4 安装 4.1 创建用户 创建用户nginx使用的nginx用户。 #添加www组 # groupa…...
PL/SQL语言的数据库交互
PL/SQL语言的数据库交互 引言 在当今的信息化时代,数据库管理系统(DBMS)在各行各业中扮演着至关重要的角色。为了高效地与数据库进行交互,许多程序员、数据库管理员和系统分析师选择使用PL/SQL(Procedural Language/…...
ARP欺骗
文章目录 ARP协议ARP欺骗原理断网攻击ARP欺骗(不断网) ARP协议 在局域网中,网络传输的是帧,帧里面有目标主机的MAC地址。arp协议负责将IP地址解析成对应的MAC地址 ARP欺骗原理 即通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量…...
Genymotion配套VirtualBox所在地址
在 Genymotion打开虚拟机前需要先打开VirtualBox中的虚拟机 C:\Program Files\Oracle\VirtualBox\VirtualBox.exe 再开启genymotion中的虚拟机开关...
TPS61022 PFM的机制以及TPS61xxx转换器的PFM与PWM之间的负载阈值
引言 TI 的大多数 TPS61xxx 低压升压转换器都配备了 PSM(省电模式),以帮助提高轻负载效率。但是,当它处于重负载状态时,输出纹波通常会高于 PWM。此外,PSM 和 PWM 之间的负载电流阈值不会直观地写入数据表中…...
1. npm 常用命令详解
npm 常用命令详解 npm(Node Package Manager)是 Node.js 的包管理工具,用于安装和管理 Node.js 应用中的依赖库。下面是 npm 的一些常用命令及其详细解释和示例代码。 镜像源 # 查询当前使用的镜像源 npm get registry# 设置为淘宝镜像源 …...
黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作
B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等 增强自控力 冥想慢呼吸绿色锻炼充分休息减少决策次数优先做重要的事情(早晨)融入强自控群控…...
Markdown中甘特图的使用
Markdown中甘特图的使用 1. 前言2. 语法详解2.1 甘特图语法 3. 使用场景及实例4. 小结5. 其他文章快来试试吧🖊️ Markdown中甘特图的使用 👈点击这里也可查看 1. 前言 Markdown 的原生语法不支持绘制图形,但通过扩展模块,我们可…...
Django创建数据表、模型、ORM操作
1、创建项目 django-admin startproject PersonInfosProject 2、创建项目应用,进入PersonInfosProject文件夹,新建index应用,使用命令 cd PersonInfosProject python manage.py startapp 新建完成之后的目录结构 3、新建数据模型…...
No. 31 笔记 | Web安全-SQL手工注入技术学习 Part 2
一、研究背景 背景介绍 SQL注入是一种常见且高危的Web安全漏洞。攻击者可以通过构造恶意SQL查询语句来绕过验证机制,执行未授权操作,如获取敏感信息、篡改数据库内容甚至控制服务器。 研究内容 本笔记探讨以下数据库的手工注入技术: MySQLAc…...
Spring Boot中的扫描注解如何使用
在 Spring Boot 中,扫描注解是指通过注解来告诉 Spring 框架应该扫描哪些包、哪些类或哪些特定的组件,并将其作为 Spring 容器中的 bean 进行管理。Spring Boot 主要通过以下几种注解来实现自动扫描: ComponentScanSpringBootApplicationCom…...
用 Python 从零开始创建神经网络(十九):真实数据集
真实数据集 引言数据准备数据加载数据预处理数据洗牌批次(Batches)训练(Training)到目前为止的全部代码: 引言 在实践中,深度学习通常涉及庞大的数据集(通常以TB甚至更多为单位)&am…...
深入探讨 Vue.js 的动态组件渲染与性能优化
Vue.js 作为一款前端领域中备受欢迎的渐进式框架,以其简单优雅的 API 和灵活性受到开发者的喜爱。在开发复杂应用时,动态组件渲染是一项极其重要的技术,它能够在页面中动态地加载或切换组件,从而显著提升应用的灵活性与用户体验。…...
qml TextArea、TextEdit、TextField、TextInput的区别于联系
在 QML 中,TextArea、TextEdit、TextField 和 TextInput 都是用来接收用户输入的控件,但它们之间有一些区别和联系。 区别: TextArea:用于多行文本输入,可以接收多行文本输入。TextEdit:也用于多行文本输入…...
《探索 PC 端的开源神经网络多模态模型宝藏》
《探索 PC 端的开源神经网络多模态模型宝藏》 一、多模态模型:开启智能交互新纪元二、主流 PC 端开源多模态模型大赏1. Obsidian:轻量级多模态先锋2. GLM-Edge 系列:移动端与 PC 端的全能选手3. Minicpm-llama3-v2.6:紧凑高效的多…...
centos 搭建nginx+配置域名+windows访问
准备工作:一个完整的centos环境,nginx安装包(可以从官网下载)nginx: download 一:centos可能有精简版,部分环境没有相关依赖包, 需要检查以下项: 1.gcc检查:gcc -v(回车后应当有版…...
docker的数据卷和自定义镜像
docker的数据卷: 容器与宿主机之间,或者容器和容器之间的数据共享(目录)。 创建容器的时间,通过指定目录,实现容器于宿主机之间,或者容器和容器之间的数据共享。 容器的生命周期有限,…...
在 Linux 下Ubuntu创建同权限用户
我是因为不小心把最开始创建的用户的文件夹颜色搞没了,再后来全白用习惯了,就不想卸载了,像创建一个和最开始创建的用户有一样的权限可以执行sudo -i进入root一样的用户 如图这是最原始的样子 第一步 创建新用户,我这里是因为之前…...
计算机视觉算法实战——面部特征点检测
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域介绍✨✨ 面部特征点检测(Facial Landmark Detection)是计算机视觉中…...
电力场景红外测温图像均压环下的避雷器识别分割数据集labelme格式2436张1类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):2436 标注数量(json文件个数):2436 标注类别数:1 标注类别名称:["arrester"] 每个类别标注的框数&am…...
4种革新性AI Agent工作流设计模式全解析
文章目录 导读:AI Agent的四种关键设计模式如下:1. 反思2. 工具使用3. 规划4. 多Agent协作 总结内容简介: 导读: AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不仅接收任务,还自主制定和执行…...
C#基础 枚举 Enumeration从基础到进阶
目录 一、入门篇:枚举基础1. 枚举类型的定义2. 枚举类型的优点3. 枚举的基本使用3.1 枚举的类型转换3.2 遍历枚举成员3.3 判断枚举值是否有效3.4枚举的比较 4. 枚举的设计规范 二、深入底层篇:存储、值与继承限制1. 枚举的存储与表示2. 枚举底层类型选择…...
SOME/IP 协议详解——服务发现
文章目录 1. Introduction (引言)2. SOME/IP Service Discovery (SOME/IP-SD)2.1 General(概述)2.2 SOME/IP-SD Message Format2.2.1 通用要求2.2.2 SOME/IP-SD Header2.2.3 Entry Format2.2.4 Options Format2.2.4.1 配置选项(Co…...
android studio使用DataBinding
DataBinding 是谷歌官方发布的在android上对MVVM设计模式的一个实现框架,其作用是实现数据绑定。 Android DataBinding主要实现了View和ViewModel的双向绑定,包括用户的响应。并且实现了自动更新。 DataBinding优点: 1.大量减少Act…...
记一次学习skynet中的C/Lua接口编程解析protobuf过程
1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔,就想加入一种数据序列化方式,json、xml简单好用,但我就是不想用,于是就想到了protobuf,对于protobuf C/C的使用个人感觉有点重,正好…...
JavaSE面试
final和static对比 static知识点介绍static代码块当JVM加载类时,static代码块会且只会被执行一次。可用于优化程序性能。实例代码块在每次创建对象时,都会自动执行。static方法static方法中不能使用this和super关键字。静态内部类静态内部类的创建不需要…...
【Rust自学】11.10. 集成测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.10.1. 什么是集成测试 在Rust里,集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样,这也…...
Redis :redis的大Key问题
问题 : 什么是redis 的大key 呢? redis 是一个单线程应用程序。他的请求类似于队列处理,命令排队执行,逐个处理。 这样就会出现一个问题,一旦队列前面的命令请求处理时间过程,那么后续执行命令就会被迫的等…...
IntelliJ IDEA中Maven项目的配置、创建与导入全攻略
大家好,我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…...
如何确保获取的淘宝详情页数据的准确性和时效性?
要确保获取的淘宝详情页数据的准确性和时效性,可从以下几个方面着手: 合法合规获取数据 遵守平台规则:在获取淘宝详情页数据之前,务必仔细阅读并严格遵守淘宝平台的使用协议和相关规定。明确哪些数据可以获取、以何种方式获取以及…...
如何将json字符串格式化
文章目录 如何对json字符串进行格式化显示hutool方案的示例和不足使用fastjson的方案 如何对json字符串进行格式化显示 将json字符串内容进行格式化的输出显示。本文介绍 hutool的方案和alibaba 的fastjson方案 hutool方案的示例和不足 引入依赖 <dependency><grou…...
【Vue + Antv X6】可拖拽流程图组件
使用事项: ❗先放个组件上来,使用手册有空会补全 ❗需要下载依赖 “antv/x6”: “^2.18.1”, “antv/x6-plugin-dnd”: “^2.1.1”, 组件: 组件使用: <flowChart :key"flowChartKey" ref"flowChart" lef…...
反转链表题目
文章目录 反转链表题目链接:[在线OJ](https://leetcode.cn/problems/reverse-linked-list/description/)题目详解思路1:思路1算法复杂度 思路2代码实现思路2算法复杂度 结语 欢迎大家来到我的博客,给生活来点impetus 让我们进入《题海探骊》…...
利用Python爬虫获取义乌购店铺所有商品列表:技术探索与实践
在当今数字化时代,数据的重要性不言而喻。对于采购商而言,能够快速、准确地获取供应商店铺内的所有商品信息,是提升采购效率、优化采购决策的关键。义乌购作为国内知名的在线批发平台,汇聚了海量的商品资源,为采购商提…...
基于FPGA的多功能数字钟设计
基于FPGA的多功能数字钟设计 前言基础知识按键数码管 系统概述按键使用说明模块描述模块设计button_debouncebutton_controllerclock_controllerdigital_tube 整体资源用量测试视频 前言 本工程主要是数码管、按键、LED的应用开发。 注:本工程所有IP均使用源码开发…...
nginx-lua模块安装
一.简述 安装 Nginx 的 Lua 模块(通常指的是 ngx_lua 模块)可以显著增强 Nginx 的功能,使其能够执行 Lua 脚本。这使得 Nginx 可以处理更复杂的逻辑和动态内容生成。以下是详细的安装步骤,包括安装 OpenResty 或从源码编译 Nginx…...