ok113i平台——usb触摸屏驱动开发
在嵌入式Linux系统中,如果USB触摸屏能够检测到并且在手指移动时有数据,但点击无法触发,这可能是因为触摸屏驱动或配置的问题。以下是一些可能的解决方法:
1. 确认驱动支持
首先,确保您使用的触摸屏驱动程序完全支持您的触摸屏设备。可以通过查看内核日志来确认驱动程序加载和设备识别情况:
dmesg | grep -i 'touch'
2. 检查输入设备
确认触摸屏设备是否正确注册为输入设备:
cat /proc/bus/input/devices
查找您的触摸屏设备条目,并记下其Handlers
字段中的eventX
(如event0
)。
3. 使用evtest
工具进行测试
evtest
是一个用于测试输入设备的工具,可以详细检测触摸屏的事件输出。
运行evtest
并选择触摸屏设备:
evtest /dev/input/eventX
在触摸屏上点击和移动手指,观察evtest
输出的事件,确认是否有BTN_TOUCH或BTN_LEFT等事件。
如果没有evtest, 直接用cat也能看到触摸时会有乱码数据输出,用hexdump可以看到二进制数据;
4. 确认tslib的环境变量及配置参数
环境变量通常在/etc/profile里,也有可能在/etc/profile调用了其他文件,如OK113i就用了/etc/profile.d/qtenv.sh文件来配置tslib的环境变量
只需关注/etc/profile.d/qtenv.sh文件中跟TSLIB相关内容
if [ ! -n "$TouchDeviceNum" ]; thenecho "use sunxi-ts"export QT_QPA_FB_TSLIB=1export TSLIB_TSDEVICE=/dev/input/event0export TSLIB_CALIBFILE=/etc/pointercalexport TSLIB_CONFFILE=/etc/ts.confexport TSLIB_PLUGINDIR=/usr/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_FBDEVICE=/dev/fb0export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0if [ ! -f "$TSLIB_CALIBFILE" ];then/usr/bin/ts_calibratefi
fi
QT_QPA_FB_TSLIB 是与qt相关的配置;
TSLIB_TSDEVICE 表示触摸设备文件,通过第2步,可以确定触摸设备是event8,这里设置成了event0,要改,不然运行ts_test或qt程序触摸会没反应;
TSLIB_CALIBFILE 指定校准数据保存文件,很多教程说不用校准,但在我当前的环境中步校准,触摸点是不准确的;
TSLIB_CONFFILE 指定ts配置文件,该文件通常使用默认参数即可;
TSLIB_PLUGINDIR 示 tslib 插件目录位置;
TSLIB_CONSOLEDEVICE 表示控制台设置,这里不设置,因此为 none;
TSLIB_FBDEVICE 表示 FB 设备,也就是屏幕,根据实际情况配置;
5. 校准触摸屏
正点原子教程说电容触摸屏不用校准,但我这里不校准不行,校准也很简单,输入ts_calibrate,依次点击屏幕上5个校准点即可;
使用tslib库自带的ts_calibrate工具校准触摸屏:
ts_calibrate
屏幕会弹出校准界面
6. 触摸测试
tslib还提供测试程序供用户测试触摸功能,如ts_test
界面会出现三个按钮“Drag”、“Draw”和“Quit”;
Drag 默认选项,拖曳测试;
Draw 绘图测试;
Quit 退出程序;
7. 问题:tslib要指定eventX才能接收触摸数据,但是usb触摸屏每次上电的eventX编号都可能不一样,又受插拔顺序影响
解决方法:
参考1:linux input如何固定设备event handler;
参考2:Linux下采用软链接来固定触摸屏的event编号;
参考3:如下,使用udev来配置软连接,参考chaptgpt
在使用eudev
的时候,有时您可能需要为特定的USB设备分配固定的event
编号,以便在系统重启或设备重新插拔时保持一致。这在处理多个相同类型的设备时特别有用。以下是如何使用eudev
配置USB设备的固定event
编号的步骤。
在OK113i-linux-sdk/platform/framework/auto/rootfs/etc/udev/rules.d/创建文件
54-usbscreentouch.rules
文件内容如下:
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="ILITEK ILITEK-TP", SYMLINK+="input/event_touch"
#意思是匹配event事件设备,名字为ILITEK ILITEK-TP,创建新连接input/event_touch
7.1 确认设备信息
首先,您需要确认USB设备的详细信息,可以使用lsusb
和udevadm
工具来完成。
使用lsusb
查看设备信息
cat /proc/bus/input/devices
找到目标设备的供应商ID(Vendor ID)和产品ID(Product ID)。例如,输出可能如下所示:
I: Bus=0003 Vendor=222a Product=0001 Version=0110
N: Name="ILITEK ILITEK-TP"
P: Phys=usb-sunxi-ehci-1.2/input0
S: Sysfs=/devices/platform/soc@3000000/4200000.ehci1-controller/usb1/1-1/1-1.2/1-1.2:1.0/0003:222A:0001.0006/input/input14
U: Uniq=V06.00.00.00
H: Handlers=event4
B: PROP=0
B: EV=1b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=100 3
B: MSC=10
在此示例中,供应商ID是1234
,产品ID是5678
。
使用udevadm
查看设备属性
使用udevadm info
命令获取设备的详细属性:
udevadm info --query=all --name=/dev/input/eventX # 获取设备属性
udevadm info --attribute-walk --name=/dev/input/eventX # 获取所有子属性, 下面更改ATTRS{idVendor}会有用
替换/dev/input/eventX
为实际的设备节点路径。输出将包含许多属性,例如:
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/0003:1234:5678.0001/input/input5/event5
N: input/event5
S: input/by-id/usb-Example_Corp_Example_Device-if00-event
E: DEVNAME=/dev/input/event5
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/0003:1234:5678.0001/input/input5/event5
E: ID_VENDOR_ID=1234
E: ID_MODEL_ID=5678
E: ID_SERIAL=Example_Corp_Example_Device
...
7.2. 创建udev
规则
使用上述信息创建一个自定义的udev
规则文件,在/etc/udev/rules.d/
目录中。
具体路径如下:
OK113i-linux-sdk/platform/framework/auto/rootfs/etc/udev/rules.d/54-usbscreentouch.rules
示例规则文件
以下是一个示例规则文件,命名为99-usb-static-event.rules
:
vi /etc/udev/rules.d/99-usb-static-event.rules
内容如下:
# /etc/udev/rules.d/99-usb-static-event.rules
# 固定USB设备的event编号# 规则格式: 通过设备属性匹配设备,并创建符号链接为固定的event编号
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="input/event_touch"
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="ILITEK ILITEK-TP", SYMLINK+="input/event_touch"
## 注意:ATTRS{name}不能与ATTRS{idVendor}共用,不然匹配不到设备
在此示例中,1234
和5678
分别是设备的供应商ID和产品ID。SYMLINK+="input/event-fixed0"
表示创建一个符号链接,将目标设备的event
节点链接到/dev/input/event-fixed0
。
7.3 重新加载udev
规则
保存规则文件后,重新加载udev
规则以使其生效:
udevadm control --reload-rules
udevadm trigger
7.4 验证配置
拔掉并重新插入USB设备,或使用以下命令触发设备事件:
udevadm trigger --action=add /dev/input/eventX
替换/dev/input/eventX
为实际的设备节点路径。然后,检查符号链接是否已创建:
ls -l /dev/input/event-fixed0
您应该看到类似如下的输出:
lrwxrwxrwx 1 root root 6 Jul 26 12:34 /dev/input/event-fixed0 -> eventX
这表明设备的event
节点已被链接到固定的event
编号。
问题:重新插拔设备,需要软件重启才能接收到触摸事件
解决方案1:《qt+tslib支持usb触摸屏热插拔功能实现》
解决方案2:不使用tslib
参考 https://blog.csdn.net/weixin_42968584/article/details/128336470?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-3-128336470-blog-120849874.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-3-128336470-blog-120849874.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=4
- qt5直接屏蔽tslib的使用就能多点触摸;配置文件:/etc/profile.d/qtenv.sh
- 屏蔽tslib后,usb触摸屏不能热插拔,需要qt更改源码
buildroot/build/qt5base-5.12.5/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
更改后的内容如下:
……
// 从426行开始if (errno != EINTR && errno != EAGAIN) {qErrnoWarning(errno, "evdevtouch-test: Could not read from input device");if (errno == ENODEV) { // device got disconnected -> stop readingdelete m_notify;m_notify = nullptr;QT_CLOSE(m_fd);m_fd = -1;while(1){m_fd = QT_OPEN(d->deviceNode.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);if(m_fd >= 0){m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);connect(m_notify, SIGNAL(activated(int)), this, SLOT(readData()));return;}// system("echo waiting for evdevtouch ...");system("sleep 1");}// unregisterTouchDevice();}return;}
当前更改源码后,重新编译buildroot成功,且热插拔也成功;
出厂系统配置触摸方式文件
更改/home/OK113i-linux-sdk/platform/framework/auto/rootfs/etc/profile.d/qtenv.sh
相关文章:
ok113i平台——usb触摸屏驱动开发
在嵌入式Linux系统中,如果USB触摸屏能够检测到并且在手指移动时有数据,但点击无法触发,这可能是因为触摸屏驱动或配置的问题。以下是一些可能的解决方法: 1. 确认驱动支持 首先,确保您使用的触摸屏驱动程序完全支持您…...
【Bluedroid】AVRCP 连接源码分析(二)
接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 getcapabilities_cmd packages/modules/Bluetooth/system/btif/src/btif_rc.cc /***************************************************************************** Function …...
Jenkins 自动构建Job
1.创建Job 登录Jenkins,点击新建Item,创建项目 选择Pipeline,然后点击确定 接下来主要在Pipeline script中编写脚本 2.签出Git仓库 2.1配置Git账号 Manage Jenkins->Security->Credentials 在凭据界面,选择全局 添加凭据,添加Git用…...
现代企业软件测试人员需求与发展方向深度解析
引言 现代互联网软件行业是不断创新的引擎。应用程序越来越复杂,部署周期越来越短,用户期望越来越高,运营规模也越来越庞大。在这种动态环境中,软件测试人员的角色不再仅限于在发布前阶段“查找错误”。相反,测试人员…...
2.19学习(php文件后缀)
misc buu-后门查杀 下载附件,我们用火绒安全扫一下然后点击详情进入该文件所在文件夹,再用记事本打开该文件,搜索flag无果,再试试pass(由题目中的密码联系到pass,password,key等)&a…...
AI Agent实战:打造京东广告主的超级助手 | 京东零售技术实践
前言 自2022年末ChatGPT的问世,大语言模型(LLM)技术引发全球关注。在大模型技术落地的最佳实践中,智能体(Agent)架构显现出巨大潜力,成为业界的普遍共识,各大公司也纷纷启动Agent技…...
将Google文档导入WordPress:简单实用的几种方法
Google文档是内容创作者非常实用的写作工具。它支持在线编辑、多人协作,并能够自动保存内容。但当我们想把Google文档中的内容导入WordPress网站时,可能会遇到一些小麻烦,比如格式错乱、图片丢失等问题。本文将为大家介绍几种简单实用的方法&…...
Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。
Spring的过滤器获取请求体中JSON参数,同时解决Controller获取不到请求体参数的问题。 文章目录 前言一、需求场景描述二、原因解析三、自定义 HttpServletRequestWrapper 来保存数据解决Controller获取不到的问题。四、案例(要注意的点) 前言 Spring的过滤器获取请…...
全链路优化:如何让单点登录认证接口并发性能翻倍?
背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...
基于大语言模型的推荐系统(1)
推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影&…...
嵌入式八股文(四)计算机网络篇
目录 第一章 基础概念 1. 服务 2. 协议 3. 接口 4. 网络体系结构 5. OSI七层模型 6. TCP/IP四层参考模型 7. 最大传输单元MTU及分片操作 8. 流量控制 9. 数据链路层提供的功能 10. 汇集树 11. 生成树协议 12. 拥塞控制及途径 6. 包调度 7. 隧道 8. 抖动 9. 逆…...
【龙智】Confluence到期日提醒插件Data Center v1.8.0发布:Confluence 9兼容、表格提醒强化,Slack通知升级
还在为Confluence中重要内容的逾期而焦头烂额? 还在苦于手动核查任务的截止日期? 不仅效率低下,还时常遗漏关键信息? 别担心,你的帮手来了! Confluence到期日提醒插件——由Atlassian全球白金合作伙伴龙…...
Luckfox Pico Max运行RKNN-Toolkit2中的Yolov5 adb USB仿真
1:下载rknn-toolkit2 git clone https://github.com/rockchip-linux/rknn-toolkit2 2:修改onnx目录下的yolov5的test.py的代码 # pre-process config print(--> Config model) rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, …...
AI IDE - Trae -学习与实践
1.应用场景 主要用于使用AI IDE进行快速的开发,提高开发效率;节约开发时间; 额外话:可以预见搞出来的东西终将取代了我们自身; 2.学习/操作 1.文档阅读 Trae - Ship Faster with Trae -- 官网,下载安装 …...
内外网文件传输 安全、可控、便捷的跨网数据传输方案
一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 安全性风险:内外网直连可能导致病毒传播、数据泄露。 操作繁琐:传统方式需频繁切换网络环境&…...
pycharm 调试 debug 进入 remote_sources
解决办法1: pycharm函数跳转到remote_sources中的文件中_pycharm修改remotesource包存放地址-CSDN博客 file->settings->project structure将项目文件夹设为"Sources"(此时文件夹会变为蓝色)。 解决方法2 Debug:使用Pychar…...
Docker国内镜像源部署deepseek
部署deepseek时Docker拉取国内镜像失败可能是由于国内网络环境复杂或镜像源配置不正确导致的。 具体原因可能包括: 网络问题:国内网络环境复杂,可能导致访问国内镜像仓库的速度较慢或无法访问,进而影响Docker镜像的拉取…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_os_specific_init函数
ngx_os_specific_init 声明在 src/os/unix/ngx_os.h ngx_int_t ngx_os_specific_init(ngx_log_t *log); 定义在 src\os\unix\ngx_linux_init.c ngx_int_t ngx_os_specific_init(ngx_log_t *log) {struct utsname u;if (uname(&u) -1) {ngx_log_error(NGX_LOG_ALERT, log,…...
C++算法基础笔记
算法学习 C语法字符和字符串输入输出输出控制 字符串拼接和扩充检查字符串是否存在大写、小写字母字符数组换行 C语法 字符和字符串输入输出 在C 中使用如下语法实现对容器中的对象进行遍历,类似于js或python的for in语法 for (element_declaration : container)…...
江苏地区电子行业DeepSeek AI+OdooERP业务升级规划方案
作者:Odoo技术开发/资深信息化负责人 日期:2025年2月22日 一、江苏电子行业现状与痛点分析 行业特点 产业集群效应显著:江苏电子产业以无锡、苏州、南京为核心,形成了涵盖PCB、集成电路、新能源、智能终端等领域的完整产业链&…...
Spring事务原理 二
在上一篇博文《Spring事务原理 一》中,我们熟悉了Spring声明式事务的AOP原理,以及事务执行的大体流程。 本文中,介绍了Spring事务的核心组件、传播行为的源码实现。下一篇中,我们将结合案例,来讲解实战中有关事务的易…...
【实用工具】在 Windows 上使用 JVMS 管理多版本 JDK
文章目录 前言JVMS 的主要功能安装 JVMS初始化 JVMS管理 JDK 版本远程添加(这块比较吃网络,如果不成功可以看下面手动添加)安装指定版本的 JDK查看本地已安装的 JDK 版本切换 JDK 版本 手动添加 JDK 前言 在 Java 开发过程中,针对…...
前端面试-JavaScript 数据类型详解
目录 一、数据类型分类 二、核心区别对比 1. 存储方式 2. 比较方式 3. 类型检测方法 三、特殊类型详解 1. Symbol 2. BigInt 3. null vs undefined 四、常见面试扩展问题 五、总结 一、数据类型分类 JavaScript 数据类型分为 基本数据类型(原始类型&…...
Oracle 连接报错:“ORA-12541:TNS:no listener ”,服务组件中找不到监听服务
一、 报错: navicat连接数据库报错:ORA-12541:TNS:no listener 二、排查问题 三、 解决问题 删除Oracle安装目录下选中的配置:listener.ora 及 listener*.bak相关的 cmd,用管理员打开 执行:netca 命…...
go-micro
一,课程介绍 1,主讲老师: 大地 2,合作网站: www.itying.com 3,我的专栏: https://www.itying.com/category_Z9-b0.html 4,必备基础:学习本教程要有golang和go web基础 5,大地老师Golang入门实战系列教…...
SVN把英文换中文
原文链接:SVN设置成中文版本 都是英文,换中文 Tortoise SVN 安装汉化教程(乌龟SVN) https://pan.quark.cn/s/cb6f2eee3f90 下载中文包...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atoi 函数
ngx_atoi 声明在 src/core/ngx_string.h ngx_int_t ngx_atoi(u_char *line, size_t n); 定义在 src/core/ngx_string.c ngx_int_t ngx_atoi(u_char *line, size_t n) {ngx_int_t value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim…...
DeepSeek R1/V3满血版——在线体验与API调用
前言:在人工智能的大模型发展进程中,每一次新模型的亮相都宛如一颗投入湖面的石子,激起层层波澜。如今,DeepSeek R1/V3 满血版强势登场,为大模型应用领域带来了全新的活力与变革。 本文不但介绍在线体验 DeepSeek R1/…...
深度学习技术文章质量提升指南(基于CSDN评分算法优化)
一、质量缺陷诊断(基于CSDN质量分V5.0算法) 根据1提供的评分框架,当前文章可能存在的质量短板: 技术深度不足:缺乏具体模型实现细节与数学推导结构完整性缺失:未形成"理论-实践-应用"完整闭环代…...
力扣-回溯-37 解数独
思路 双层递归,而且在传递参数使用&的好处是不用在复制一次样本,浪费时间 class Solution { public:bool isVaild(vector<vector<char>> &board, int row, int cal, char val){for(int i 0; i < 9;i){if(board[row][i] val) …...
极简入门,本地部署dify低代码平台构建AI Agent大模型全流程(使用教程、微案例、配置详解、架构图解析)
文章目录 一、环境搭建1.1 安装VMware-workstationCentOS7.91.2 安装宝塔1.3 安装docker及改镜像、安装dify1.4 配置模型供应商 二、dify快速上手体验2.1 知识库2.2 微案例:基于知识库的助手 三、dify知识库配置详解3.1 分片策略3.2 父子分段3.3 索引方法3.4 检索结…...
ssh与服务器
目录 前言: 一、密码连接 二、密钥对连接 1.将公钥放在服务器 2.ssh连接 三、禁用密码 1.进入服务器/etc/ssh文件夹 2.打开sshd_config文件,进行如下配置 3.有可能还需要更改其他文件夹 4.重启ssh服务 四、config 五.ssh与github 1.本地创建…...
C++ bind基本使用
std::bind 是 C11 引入的一个函数模板,用于创建一个新的可调用对象,该对象可以调用某个函数或成员函数,并将一些参数绑定为固定值。通过 std::bind,你可以创建一个新的函数对象,这个对象可以接受剩余的参数,…...
【GPT】从GPT1到GPT3
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…...
Java IO 设计模式总结
装饰器模式 装饰器(Decorator)模式 可以在不改变原有对象的情况下拓展其功能。 装饰器模式通过组合替代继承来扩展原始类的功能,在一些继承关系比较复杂的场景(IO 这一场景各种类的继承关系就比较复杂)更加实用。 对…...
js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性
ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言,本文讲述Javascript[ECMAScript]版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]的新特性,帮助朋友们更好的熟悉和使用Javascript ES5 1.严格模式 use strict2.Object getPrototypeOf,返回一个对象的原…...
基于ffmpeg+openGL ES实现的视频编辑工具-解码(四)
在开发视频编辑工具时,预览功能是基石,它涵盖视频、图片以及音频播放,而视频解码则是实现视频预览及后续编辑操作的关键环节。本文聚焦于基于 FFmpeg 实现视频解码的过程,详细阐述开发中遭遇的痛点、对应的解决方式,以及核心代码的运作原理。 一、开发背景与目标 视频编…...
机器学习:决策树
1. 初步概念 决策树是一种基于分裂特征的机器学习方法,用于分类和回归任务。它通过将数据按特征值进行分割,最终做出预测。与线性模型不同,决策树能够自动识别重要的特征,并根据数据情况生成复杂的决策规则。 2. 决策树的核心思想 决策树的核心思想在于选择一个特征作为…...
@media 的常用场景与示例
media 的常用场景与示例 1. 基本概念2. 常用场景2.1 不同屏幕宽度的布局调整2.2 隐藏或显示元素2.3 字体大小调整2.4 图片大小调整2.5 高度调整2.6 颜色调整2.7 鼠标悬停效果 3. 常用示例3.1 基本响应式布局3.2 隐藏侧边栏3.3 字体大小和图片大小 4. 总结 在现代网页设计中&…...
深入浅出:基于SpringBoot和JWT的后端鉴权系统设计与实现
文章目录 什么是鉴权系统定义与作用主要组成部分工作原理常用技术和框架 基于SpringBoot JWT的鉴权系统设计与实现指南前言技术对比令牌技术JWT令牌实现全流程1. **依赖引入**2. **JWT 工具类**3. **JWT 拦截器(Interceptor)** 4. **拦截器注册**5. **登…...
怎麼利用靜態ISP住宅代理在指紋流覽器中管理社媒帳號?
靜態ISP住宅代理是一種基於真實住宅IP的代理服務。這類代理IP通常由互聯網服務提供商(ISP)分配,具有非常高的真實性,與普通數據中心代理相比,更不容易被平臺檢測到為“虛假IP”或“代理IP”,靜態ISP住宅代理…...
DeepSeek掘金——SpringBoot 调用 DeepSeek API 快速实现应用开发
Spring Boot 实现 DeepSeek API 调用 1. 项目依赖 在 pom.xml 中添加以下依赖: <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>&l…...
解决本地模拟IP的DHCP冲突问题
解决 DHCP 冲突导致的多 IP 绑定失效问题 前言 续接上一篇在本机上模拟IP地址。 在实际操作中,如果本机原有 IP(如 192.168.2.7)是通过 DHCP 自动获取的,直接添加新 IP(如 10.0.11.11)可能会导致 DHCP 服…...
Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)
文章目录 LFS的功能?如何使用LFS?将大文件存储在外部系统是什么意思?具体是如何运作的?为什么要这样做? 对开发者的影响?1. **性能和效率**2. **协作体验**3. **版本管理差异**4. **额外的工具和配置** LFS…...
数据中心储能蓄电池状态监测管理系统 组成架构介绍
安科瑞刘鸿鹏 摘要 随着数据中心对供电可靠性要求的提高,蓄电池储能系统成为关键的后备电源。本文探讨了蓄电池监测系统在数据中心储能系统中的重要性,分析了ABAT系列蓄电池在线监测系统的功能、技术特点及其应用优势。通过蓄电池监测系统的实施&#…...
三甲医院网络架构与安全建设实战
一、设计目标 实现医疗业务网/卫生专网/互联网三网隔离 满足等保2.0三级合规要求 保障PACS影像系统低时延传输 实现医疗物联网统一接入管控 二、全网拓扑架构 三、网络分区与安全设计 IP/VLAN规划表 核心业务配置(华为CE6865) interface 100G…...
如何在 React 中测试高阶组件?
在 React 中测试高阶组件可以采用多种策略,以下是常见的测试方法: 1. 测试高阶组件返回的组件 高阶组件本身是一个函数,它返回一个新的组件。因此,可以通过测试这个返回的组件来间接测试高阶组件的功能。通常使用 Jest 作为测试…...
INA219电流、电压、功率测量芯片应用
INA219电流、电压、功率测量芯片应用 简述芯片引脚应用电路寄存器驱动代码 简述 INA219是一款由德州仪器(Texas Instruments)生产的高精度电流/功率监测芯片,广泛应用于电池监控、电源管理等需要精确电流和功率测量的应用中。该芯片通…...
深入解析设计模式之工厂模式
深入解析设计模式之工厂模式 在软件开发的复杂体系中,设计模式作为解决常见问题的有效方案,为开发者提供了强大的工具。工厂模式作为一种广泛应用的创建型设计模式,专注于对象的创建过程,通过巧妙的设计,将对象的创建…...
ollama修改监听ip: 0.0.0.0
确认Ollama绑定IP地址 默认情况下,Ollama可能仅监听本地回环地址(127.0.0.1)。要允许外部访问,需将其配置为监听所有IP(0.0.0.0)或指定IP(如10…19)。 修改启动命令(推荐…...