Linux 设备树
学习设备树之前你需要知道什么?
因为设备树描述了整个芯片和开发板等所有硬件信息内容,所以他的信息量是非常庞大的,RK的linux的设备树算下来大概就有九千多行,大家不要被这个数字给吓到,这些内容都是原厂工程师写的,我们只需要掌握基本语法,能够看懂和对着模板修改就行。也不用想着全局掌握,设备树只是写配置的地方,真正使用他的地方还是在内核中,要弄懂整体框架还要结合后面的驱动来。
很多把stm32或者51过来的同学可能感觉莫名其妙学的很浅的感觉,大家一样想每个点甚至每个寄存器都弄的明明白白清清楚楚所以花了非常非常大的力气,Linux整体太庞大了集齐了多少开源大佬的智慧,随便一个小点拎出来都比我们以往写的main复杂,SOC也不同MCU,寄存器以及复杂度都不是一个量级的,如果强行自己全局把控面面俱细,那将会是一种痛苦,我们要做的是先玩起来,改设备树一点简单的驱动基础应用就是最快的玩起来方式。随着后面的深入大家会碰到很多问题,跟随着这些问题我们边玩边深入。坚持下去你将会快乐的成为大佬。
通俗的讲设备树就是用于描述硬件信息的一个配件文件,因为他描述的时候的拓扑结构很像树,所以就叫做设备树。详细的讲设备树是一种树状的结构,由节点(Node)和属性(Property)组成。每个节点描述一个硬件设备或资源,节点通过父子关系和兄弟关系进行连接。如下所示以一个根节点开始。根节点可以包含一些全局属性和设备节点。每个设备节点以一个路径标识符(例如/cpu@0)和多个属性(键值对)组成。设备节点可以包含子节点,形成嵌套的层次结构。属性描述了设备的特性,例如设备的名称、类型、寄存器地址、中断信息等。设备节点的路径和属性组合在一起提供了设备树的完整描述,以描绘硬件系统中各个设备的层次结构和配置信息。
常见的设备树术语:
-
设备树(Device Tree):一种用于描述硬件设备和资源连接的数据结构,是一种中立、可移植的设备描述方法。
-
DTS(设备树源文件 Device Tree Source):设备树的源码文件,可以理解成c语言的.c文件。
-
DTSI (设备树包含文件 Device Tree Include):包含了设备树源文件中的可重复使用的部分,可以通过
#include
指令在其他设备树源文件中引用。通常用于共享公共的设备树定义和配置,可以理解成c语言的.h文件。 -
DTC(设备树编译器 Device Tree Compiler):用于将设备树源文件(DTS)编译成设备树二进制文件(DTB)的工具,可以理解成c语言的gcc编译器。
-
DTB(设备树二进制文件 Device Tree Blob):设备树源文件编译生成的二进制文件,可以理解成c语言的.hex或者bin。
-
节点(Node):在设备树中用来描述硬件设备或资源的一个独立部分。每个节点都有一个唯一的路径和一组属性。
-
属性(Property):用于描述节点的特征和配置信息,包括设备的名称、地址、中断号、寄存器配置等。
-
属性值(Property Value):属性中的具体数据,可以是整数、字符串、布尔值等各种类型。
-
父节点和子节点(Parent Node and Child Node):在设备树中,每个节点都可以有一个父节点和多个子节点,用于描述设备之间的连接关系。
我们通常使用.dts
(设备树源文件)或.dtsi
(设备树源文件包含文件)来写设备树。编写完成以后通过DTC工具编译生成 .dtb
(设备树二进制)文件,内核在启动时加载这个二进制文件来获得必要的硬件信息。DTS、DTSI、DTC、DTB之间的关系如下图:
比如我们使用的泰山派使用的是瑞芯微的主控,我们可以在下面目录找到瑞芯微64位的所有处理器与所有板子相关的设备树其中也包括了泰山派的:
泰山派SDK/kernel/arch/arm64/boot/dts/rockchip$
泰山派SDK/kernel/arch/arm64/boot/dts/rockchip$ ls -a
Makefile
rk3326-863-lp3-v10.dts rk3566-box-demo-v10-android9.dts
rk3326-863-lp3-v10.dtsi rk3566-box-demo-v10.dts
rk3326-863-lp3-v10-rkisp1.dts rk3566-box-demo-v10.dtsi
rk3326-86v-v10.dts rk3566-box.dtsi
rk3326.dtsi rk3566.dtsi
rk3326-evb-ai-va-v10.dts rk3566-eink.dtsi
rk3326-evb-ai-va-v11.dts rk3566-evb1-ddr4-v10.dts
rk3326-evb-ai-va-v11-i2s-dmic.dts rk3566-evb1-ddr4-v10.dtsi
rk3326-evb-ai-va-v12.dts rk3566-evb1-ddr4-v10-linux.dts
rk3326-evb-ext-sii902x-rgb-to-hdmi-v10.dtsi rk3566-evb1-ddr4-v10-lvds.dts
rk3326-evb-lp3-v10-avb.dts rk3566-evb2-lp4x-v10.dts
rk3326-evb-lp3-v10.dts rk3566-evb2-lp4x-v10.dtsi
rk3326-evb-lp3-v10.dtsi rk3566-evb2-lp4x-v10-edp.dts
rk3326-evb-lp3-v10-linux.dts rk3566-evb2-lp4x-v10-eink.dts
rk3326-evb-lp3-v10-robot-linux.dts rk3566-evb2-lp4x-v10-i2s-mic-array.dts
rk3326-evb-lp3-v10-robot-no-gpu-linux.dts rk3566-evb2-lp4x-v10-linux.dts
rk3326-evb-lp3-v11-avb.dts rk3566-evb2-lp4x-v10-pdm-mic-array.dts
rk3326-evb-lp3-v11.dts rk3566-evb3-ddr3-v10.dts
rk3326-evb-lp3-v12-linux.dts rk3566-evb3-ddr3-v10.dtsi
rk3326-linux.dtsi rk3566-evb3-ddr3-v10-linux.dts
rk3328-android.dtsi rk3566-evb5-lp4x-v10.dts
rk3328-box-liantong-avb.dts rk3566-evb5-lp4x-v10.dtsi
rk3328-box-liantong.dts rk3566-evb.dtsi
rk3328-box-liantong.dtsi rk3566-evb-mipitest-v10.dts
rk3328-box-plus-dram-timing.dtsi rk3566-evb-mipitest-v10.dtsi
rk3328-dram-2layer-timing.dtsi rk3566-rk817-eink.dts
rk3328-dram-default-timing.dtsi rk3566-rk817-eink-w103.dts
rk3328.dtsi rk3566-rk817-eink-w6.dts
rk3328-evb-android-avb.dts rk3566-rk817-tablet.dts
rk3328-evb-android.dts rk3566-rk817-tablet-k108.dts
rk3328-evb-android.dtsi rk3566-rk817-tablet-rkg11.dts
rk3328-evb.dts rk3566-rk817-tablet-v10.dts
rk3328-roc-cc.dts rk3568-amp.dtsi
rk3328-rock64-android-avb.dts rk3568-android9.dtsi
rk3328-rock64-android.dts rk3568-android.dtsi
rk3328-rock64-android.dtsi rk3568-dram-default-timing.dtsi
rk3328-rock64.dts rk3568.dtsi
rk3358.dtsi rk3568-evb1-ddr4-v10-android9.dts
rk3358-evb-ddr3.dtsi rk3568-evb1-ddr4-v10.dts
rk3358-evb-ddr3-v10-linux.dts rk3568-evb1-ddr4-v10.dtsi
rk3358-linux.dtsi rk3568-evb1-ddr4-v10.dtsi3
rk3358m-vehicle-ddr3.dtsi rk3568-evb1-ddr4-v10-linux.dts
rk3358m-vehicle-v10.dts rk3568-evb1-ddr4-v10-linux-spi-nor.dts
rk3368-808.dtsi rk3568-evb2-lp4x-v10-bt1120-to-hdmi.dts
rk3368-808-evb.dts rk3568-evb2-lp4x-v10.dts
rk3368a-817-tablet-bnd.dts rk3568-evb2-lp4x-v10.dtsi
rk3368a-817-tablet.dts rk3568-evb4-lp3-v10.dts
rk3368-android.dtsi rk3568-evb5-ddr4-v10.dts
rk3368-cif-sensor.dtsi rk3568-evb5-ddr4-v10.dtsi
rk3368-dram-default-timing.dtsi rk3568-evb6-ddr3-v10.dts
rk3368.dtsi rk3568-evb6-ddr3-v10.dtsi
rk3368-evb-act8846.dts rk3568-evb6-ddr3-v10-linux.dts
rk3368-evb.dtsi rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts
rk3368-geekbox.dts rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts
rk3368-lion.dtsi rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dts
rk3368-lion-haikou.dts rk3568-evb7-ddr4-v10.dts
rk3368-orion-r68-meta.dts rk3568-evb.dtsi
rk3368-p9-avb.dts rk3568-iotest-ddr3-v10.dts
rk3368-p9.dts rk3568-iotest-ddr3-v10-linux.dts
rk3368-p9.dtsi rk3568-linux.dtsi
rk3368-px5-evb-android.dts rk3568-nvr-demo-v10.dts
rk3368-px5-evb.dts rk3568-nvr-demo-v10.dtsi
rk3368-r88-dcdc.dts rk3568-nvr-demo-v10-linux.dts
rk3368-r88.dts rk3568-nvr-demo-v10-linux-spi-nand.dts
rk3368-sheep.dts rk3568-nvr-demo-v12.dtsi
rk3368-sheep-lvds.dts rk3568-nvr-demo-v12-linux.dts
rk3368-sziauto-rk618.dts rk3568-nvr-demo-v12-linux-spi-nand.dts
rk3368-tablet.dts rk3568-nvr.dtsi
rk3368-xikp-avb.dts rk3568-nvr-linux.dtsi
rk3368-xikp.dts rk3568-pinctrl.dtsi
rk3368-xikp.dtsi rk630.dtsi
rk3399-android.dtsi rk630-rk3568-ddr3-v10.dts
rk3399-box.dtsi rockchip-pinconf.dtsi
rk3399-box-rev1.dts tspi-rk3566-core-v10.dtsi
rk3399-box-rev2.dts tspi-rk3566-csi-v10.dtsi
rk3399-dram-default-timing.dtsi tspi-rk3566-dsi-v10.dtsi
rk3399.dtsi tspi-rk3566-edp-v10.dtsi
rk3399-early-opp.dtsi tspi-rk3566-gmac1-v10.dtsi
rk3399-evb-cros.dtsi tspi-rk3566-hdmi-v10.dtsi
rk3399-evb.dts tspi-rk3566-user-v10-linux.dtb
rk3399-evb.dtsi .tspi-rk3566-user-v10-linux.dtb.cmd
rk3399-evb-ind.dtsi .tspi-rk3566-user-v10-linux.dtb.d.dtc.tmp
rk3399-evb-ind-lpddr4-android-avb.dts .tspi-rk3566-user-v10-linux.dtb.d.pre.tmp
rk3399-evb-ind-lpddr4-android.dts .tspi-rk3566-user-v10-linux.dtb.dts.tmp
rk3399-evb-ind-lpddr4-linux.dts .tspi-rk3566-user-v10-linux.dtb.dts.tmp.domain
rk3399-evb-ind-lpddr4-v13-android-avb.dts tspi-rk3566-user-v10-linux.dts
rk3399-evb-rev1-android.dts
前面我们讲了dts和dtsi就类比c语言的.c和.h的关系,大家都知道c语言是有调用关系的所以对于我们的设备树也有调用关系,下先从tspi-rk3566-user-v10.dts
文件开始下手可以得出调用关系,这里牵扯到include的用法我们后面深入讲解目前大家就理解成c语言include就行:
tspi-rk3566-user-v10.dtsrk3566.dtsirk3568.dtsirk3568-dram-default-timing.dtsirk3568-android.dtsitspi-rk3566-core-v10.dtsitspi-rk3566-edp-v10.dtsitspi-rk3566-dsi-v10.dtsitspi-rk3566-hdmi-v10.dtsitspi-rk3566-csi-v10.dtsitspi-rk3566-gmac1-v10.dtsi
如果大家全编译过泰山派开发板的SDK固件的话就会发现SDK/kernel/arch/arm64/boot/dts/rockchip
路径下生成了一个tspi-rk3566-user-v10-linux.dtb
文件,这就是我们设备树编译器的功劳,我们全编译的时候首先去编译生成了DTC编译器,然后在用这个编译器去编译我们的设备树,我们可以在SDK/kernel/scripts/dtc
目录下找到我们的dtc编译器源码和源码生产的dtc编译器执行文件。以通过pwd记录一下这个目录的绝对路径,后面我们通过绝对路径使用dtc来编译测试。
相关文章:
Linux 设备树
学习设备树之前你需要知道什么? 因为设备树描述了整个芯片和开发板等所有硬件信息内容,所以他的信息量是非常庞大的,RK的linux的设备树算下来大概就有九千多行,大家不要被这个数字给吓到,这些内容都是原厂工程师写的&a…...
Ollama管理本地开源大模型,用Open WebUI访问Ollama接口
现在开源大模型一个接一个的,而且各个都说自己的性能非常厉害,但是对于我们这些使用者,用起来就比较尴尬了。因为一个模型一个调用的方式,先得下载模型,下完模型,写加载代码,麻烦得很。 对于程序的规范来说,只要东西一多,我们就需要一个集中管理的平台,如管理python…...
面向对象进阶:多态
黑马程序员Java个人笔记 BV17F411T7Ao p129~132 目录 多态 多态调用成员的特点 调用成员变量 调用成员方法 理解 多态的优势 解耦合 多态的弊端 解决方案:强制类型转换 instanceof jdk14新特性,将判断和强转放一起 总结 多态 多态调…...
设置IMX6ULL开发板的网卡IP的两种方法(临时生效和永久有效两种方法)
设置开发板网卡的IP,有两种方法。 方法一:临时生效 第一种方式是临时设置,只有本次有效,重启后又要重新设,命令为: ifconfig eth0 192.168.5.9设置成功后可以使用ifconfig命令来查看已设置的 IP 地址。 …...
Navicat for MySQL 查主键、表字段类型、索引
针对Navicat 版本11 ,不同版本查询方式可能不同 1、主键查询 (重点找DDL!!!) 方法(1) :右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法(2&…...
二十七、Tomcat专题总结与拓展
文章目录 一、Tomcat设计思路总结1、Tomcat整体架构2、Tomcat设计思路 二、Tomcat源码设计精髓三、拓展:SpringBoot整合Tomcat源码分析四、拓展:SpringBoot整合Undertow实战1、Undertow概述2、SpringBoot集成Undertow2.1、引入依赖2.2、application.prop…...
WPF+MVVM案例实战与特效(三十九)- 深度剖析一个弧形进度条的实现
文章目录 1、使用 Path 结合 ArcSegment 绘制圆弧1、属性解读2、静态圆弧3、动态圆弧4、运行效果5、圆弧两端点的形状2、总结1、使用 Path 结合 ArcSegment 绘制圆弧 1、属性解读 Path 是 WPF 中的一个标记元素,用于绘制复杂的几何路径形状,而 ArcSegment 用于描述 Path 中…...
Spring Boot 应用 “Connection is closed” 及 MySQL 空闲超时断开连接解决方案
在使用 Spring Boot MySQL HikariCP 的组合时,可能会在生产或测试环境中遭遇类似如下异常信息: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT ...]; SQL state [nu…...
【数据库】Oracle
文章目录 1. 批量更新 1. 批量更新 这种方式将所有更新操作放在一个事务中执行,减少了与数据库的交互次数,从而可能提高性能。此外,事务处理还可以确保数据的一致性和完整性。begin; update mytable set STATE 102,STATE_DATE now() …...
链式栈的实现及其应用
目录 一、链式栈结构模型 二、链式栈的实现 2.1创建 2.2压栈 2.3出栈 2.4判断栈是否为空 2.5查看栈顶 2.6释放栈 三、应用 链式栈实际上就是基于链表,压栈和弹栈可分别看作头插和头删,链表尾部就是栈底,头指针就是栈顶指针 一、链式…...
结构化的Prompt
资源库: AI 提示词-WayToAGI精选高效的AI提示词库,助力创作者和开发者解锁人工智能的潜力。通过我们的提示词和策略,优化您的AI工具使用效率,激发创意思维,提升产出质量。https://www.waytoagi.com/prompts?tag6 结构…...
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复
ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复 在 2024 年 12 月 12 日上午的北京时间时段内,ChatGPT突发全球宕机,OpenAI致歉:已查明原因,正积极修复 官方证实了其备受瞩目的聊天机器…...
【实验16】基于双向LSTM模型完成文本分类任务
目录 1 数据集处理- IMDB 电影评论数据集 1.1 认识数据集 1.2 数据加载 1.3 构造Dataset类 1.4 封装DataLoader 1.4.1 collate_fn函数 1.4.2 封装dataloader 2 模型构建 2.1 汇聚层算子 2.2 模型汇总 3 模型训练 4 模型评价 5 模型预测 6 完整代码 7 拓展实验 …...
【中工开发者】鸿蒙商城app
这学期我学习了鸿蒙,想用鸿蒙做一个鸿蒙商城app,来展示一下。 项目环境搭建: 1.开发环境:DevEco Studio2.开发语言:ArkTS3.运行环境:Harmony NEXT base1 软件要求: DevEco Studio 5.0.0 Rel…...
SpringBoot 整合 MongoDB 实现文档存储
一、MongoDB 简介 MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解…...
鲲鹏麒麟安装ElasticSearch7.8.0
因项目需求需要在鲲鹏麒麟服务器上安装ElasticSearch7.8.0,考虑Docker方式安装比较简单,因此使用Docker方式安装 环境信息 操作系统:Kylin Linux Advanced Server release V10 (Tercel) Docker:18.09.0 [rootserver ~]# uname …...
NDN命名数据网络和域名的区别
NDN(Named Data Networking)网络的概念 NDN是一种新型的网络架构,也被称为命名数据网络。与传统的以IP地址为中心的网络架构不同,NDN是以数据(内容)本身命名为中心的网络架构。在传统网络中,我们通过IP地址来寻找主机设备,然后获取该设备上存储的内容。而在NDN网络中,…...
PyTorch基本使用-自动微分模块
学习目的:掌握自动微分模块的使用 训练神经网络时,最常用的算法就是反向传播。在该算法中,参数(模型权重)会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度,PyTorch 内置了名为 torch.autogra…...
关于linux kernel softlockup 的探究
1. 基本解释 softlockup:发生在某个 CPU 长时间占用资源,但 CPU 仍然可以响应中断 和调度器。软死锁通常不会导致系统崩溃,但可能会使系统响应变慢. 2. 驱动模拟softlockup 以下为代码实现 #include <linux/module.h> #include <…...
MySQL 时区参数 time_zone 详解
文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...
【计算机网络层】数据链路层 :局域网和交换机
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯局域网 🚦局域网…...
WebSocket、Socket、TCP 与 HTTP:深入探讨与对比
随着互联网技术的快速发展,现代Web应用对于实时通信的需求越来越高。传统的HTTP协议由于其无状态和请求-响应模式的限制,在实现高效、低延迟的实时通信方面存在一定的局限性。为了解决这一问题,WebSocket协议应运而生,它提供了一种…...
【开源免费】基于SpringBoot+Vue.JS在线办公系统(JAVA毕业设计)
本文项目编号 T 001 ,文末自助获取源码 \color{red}{T001,文末自助获取源码} T001,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
Vue指令
创建项目: vue init webpack 项目名称 element-ui npm i element-ui -saxios npm i axios1.1.3 -S vuex npm i vuex3.6.2 -S vuex持久化 npm i -S vuex-persistedstate4.1.0代理模版 proxyTable: {/api: {target: http://localhost:8081/,changeOrigin: true,pathRe…...
经典文献阅读之--ATI-CTLO(基于自适应时间间隔的连续时间Lidar-Only里程计)
0. 简介 激光雷达扫描中的运动失真,由机器人的激烈运动和环境地形特征引起,显著影响了3D激光雷达里程计的定位和制图性能。现有的失真校正解决方案在计算复杂性和准确性之间难以平衡。《ATI-CTLO: Adaptive Temporal Interval-based Continuous-Time Li…...
【GitHub分享】you-get项目
【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五,卸载 如果大家想要更具体地操作可去开源网站查看手册,这里只是一些简单介绍,但是也够用一般,有什么问题,也可以留言。 一、介绍 you-get是一…...
右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统
一、项目名称 山西右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统 二、项目背景: 山西右玉光伏发电项目位于右玉县境内,总装机容量为200MW,即太阳能电池阵列共由200个1MW多晶硅电池阵列子方阵组成,每个子方阵包含太阳能…...
box 提取
box 提取 import json import os import shutilimport cv2 import numpy as np import pypinyinclass Aaa():passdef pinyin(word):s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL):s .join(i)return s if __name__ __main__:selfAaa()base_dirrE:\data\dao\20241…...
【合作原创】使用Termux搭建可以使用的生产力环境(六)
前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(五)-CSDN博客我们讲到了如何美化xfce4桌面,达到类似于Windows的效果,这一篇将继续在上一篇桌面的基础上给我们的系统装上必要的软件,让它做到真正可以使…...
C#—索引器
C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...
Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)
点击如下链接: https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧,请求免费的License 如果提示登录,请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…...
【CSS in Depth 2 精译_074】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(下):行内元素的间距设置
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 ✔️ 12.2 Web 字体12.3 谷歌字体 文章目…...
React 18
文章目录 React 18自动批处理并发特性Suspense 组件增强新 HookscreateRoot API 替代 ReactDOM.renderStrict Mode严格模式服务器端渲染改进性能优化 React 18 React 18 引入了一系列新特性和改进,旨在提升性能、改善用户体验,并简化开发流程。以下是 R…...
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片
yolov,coco,voc标记的睡岗检测数据集,可识别在桌子上趴着睡,埋头睡觉,座椅上靠着睡,平躺着睡等多种睡姿的检测,6549张图片 数据集分割 6549总图像数 训练组91% 5949图片 有效集9&#x…...
Pydantic中的discriminator:优雅地处理联合类型详解
Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…...
vue实现文件流形式的导出下载
文章目录 Vue 项目中下载返回的文件流操作步骤一、使用 Axios 请求文件流数据二、设置响应类型为 ‘blob’三、创建下载链接并触发下载四、在 Vue 组件中集成下载功能五、解释与实例说明1、使用 Axios 请求文件流数据:设置响应类型为 blob:创建下载链接并…...
Dify工具前奏:一个好玩的镜像,selenium
文章目录 按照惯例,闲聊开篇通义千问给出的回答,蛮有趣的。什么是selenium?使用场景缺点按照惯例,闲聊开篇 眼看就要过0点了,今天写点有把握的。 我先卖个关子,问你们一个问题: 我用mobaxterm或者其它的工具,ssh访问到远程服务器。但我想在那台机器上打开浏览器该怎么…...
警惕!手动调整服务器时间可能引发的系统灾难
警惕!手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制(JWT、TOTP) 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…...
Python泛型编程:TypeVar和Generic详解 - 写给初学者的指南
Python泛型编程:TypeVar和Generic详解 - 写给初学者的指南 前言1. 为什么需要泛型?2. TypeVar:定义泛型类型变量3. Generic:创建泛型类4. 多个泛型类型变量5. 使用场景小结结语 前言 大家好!今天我们来聊一聊Python中…...
单片机:实现控制LED灯亮灭(附带源码)
使用单片机控制LED灯的亮灭是一个非常基础的嵌入式应用项目,适合初学者学习如何操作GPIO(通用输入输出)端口以及如何控制外设。通过该项目,您可以学习如何通过按键输入、定时器控制或其他触发条件来控制LED灯的开关状态。 1. 项目…...
Dcoker安装nginx,完成反向代理和负载均衡
1. 简介 官网:nginx Nginx是一个高性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx的这些功能能够为系统带来性能和安全方面的诸多优势,我们在项目部署时需要引入 Nginx组件。接下来我们会逐一向大…...
Java转C之C/C++ 的宏定义和预处理
C/C 宏定义和预处理总结 C/C 的宏定义和预处理器是在编译前执行的一系列文本处理操作,用于包含文件、定义常量、条件编译和控制编译器行为。以下是全面总结,涵盖各种知识点、注意事项以及示例。 表1:C/C 预处理指令和功能 预处理指令功能描…...
【老白学 Java】数字格式化
数字格式化 文章来源:《Head First Java》修炼感悟。 很多时候需要对数字或日期进行格式化操作,来达到某些输出效果。Java 的 Formatter 类提供了很多扩展性功能用于字符串的格式化,只要调用 String 静态方法 format() ,传入参数…...
elementUI修改table样式
在Vue项目中,如果使用的是单文件组件(.vue),并且样式是通过<style>标签定义的,vue2可以使用/deep/,vue3可以使用::v-deep选择器来修改ElementUI组件的样式。 1.修改表头背景色 /deep/.el-table__head…...
Invalid bound statement (not found) 错误解决
出现这个错误提示:Invalid bound statement (not found): com.xxx.small_reservior.dao.WaterRainMapper.getWaterRainByRegion,通常表示 MyBatis 框架无法找到与给定的 getWaterRainByRegion 方法匹配的 SQL 映射语句。这种问题通常发生在以下几种情况中…...
AWD学习(二)
学习参考: AWD攻防学习总结(草稿状态,待陆续补充)_awd攻防赛入门-CSDN博客国赛分区赛awd赛后总结-安心做awd混子-安全客 - 安全资讯平台 记第一次 AWD 赛前准备与赛后小结-腾讯云开发者社区-腾讯云 AWD学习笔记 - DiaosSamas Blog…...
VUE常见问题汇总
目录 1、80端口占用问题 2、sass版本安装问题 3、Missing binding node_modules/node-sass/vendor/darwin-x64-72/binding.node 4、Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/win32-x64-83_binding.node Cannot download &qu…...
H.323音视频协议
概述 H.323是国际电信联盟(ITU)的一个标准协议栈,该协议栈是一个有机的整体,根据功能可以将其分为四类协议,也就是说该协议从系统的总体框架(H.323)、视频编解码(H.263)、…...
第六届地博会开幕,世界酒中国菜美食文化节同期启幕推动地标发展
第六届知交会暨地博会开幕,辽黔欧三地馆亮点纷呈,世界酒中国菜助力地理标志产品发展 第六届知交会暨地博会盛大开幕,多地展馆亮点频出,美食文化节同期启幕推动地标产业发展 12月9日,第六届粤港澳大湾区知识产权交易博…...
如何在安卓系统里面用C++写一个获取摄像头原始数据并保存成.yuv文件
在 Android 系统中使用 C 编写一个获取摄像头原始数据并保存为 .yuv 文件的程序,并且通过 Android.bp 编译,你需要结合 V4L2 和 Android NDK 的特性来实现。以下是详细的步骤和代码示例。 步骤 1: 设置权限 确保你的应用程序有访问摄像头的权限。在 An…...