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

基于RK3399 Android11适配OV13850 MIPI摄像头

目录

  • 1、原理图分析
  • 2、编写和配置设备树
  • 3、调试方法
  • 4、遇到的问题与解决
  • 5、补丁

1、原理图分析

在这里插入图片描述
  从上图可看出,我们需要关心的,①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤MCLK使用的是GPIO3_B7 ⑥需要保证红色框框的供电电源正常。
  结合RK提供的文档,如下摄像头数据采集拓扑图所示,我们就可以开始编写配置设备树了,其实官方提供了很多类似的设备树配置给我们参考的。
摄像头数据采集拓扑

2、编写和配置设备树

①配置OV13850设备树节点Ⅰ
在这里插入图片描述
②配置OV13850设备树节点Ⅱ 提示:下图复用功能是<. RK_PB7 3 &pcfg_pull_one>;
在这里插入图片描述
③配置dphy
在这里插入图片描述
④配置isp
在这里插入图片描述

3、调试方法

①移植成功后,使用dmesg指令查看对应驱动的log
在这里插入图片描述
②驱动加载成功后,会有生成以下的摄像头设备节点
在这里插入图片描述
③RKISP 驱动如果加载成功,会有 video 及 media 设备存在于/dev/目录下。系统中可能存在 多个/dev/video 设备,通过/sys 可以查询到 RKISP 注册的 video 节点
在这里插入图片描述
④查看拓扑结构
 Ⅰ、通过media-ctl -p 查看rkisp1_selfpath 信息,可以知道打开哪些media设备
在这里插入图片描述
 Ⅱ、再通过media-ctl -p /dev/media0 查看已打开的media设备的拓扑,下图是截取了一部分信息
在这里插入图片描述
⑤查看摄像头支持哪几种图像流格式,截图省略
  指令:v4l2-ctl -d /dev/video0 --list-formats
⑥查看调试上层相关信息,截图省略
  指令:dumpsys media.camera
⑦抓图
  指令:v4l2-ctl -d /dev/video0 --set-fmt-video=width=800,height=600,pixelformat=NV12 --stream-mmap=3 --stream-to=/sdcard/out.yuv --stream-skip=9 --stream-count=1
在这里插入图片描述
在这里插入图片描述
  查看YUV图片可以使用该网站:在线查看 YUV 文件的免费在线工具 - ImageToStl
在这里插入图片描述

4、遇到的问题与解决

 ①问题1:相机权限问题:解决问题的链接
 ②问题2:没有获取到对应IQ文件,后面查看编译生成的文件,并没有将IQ文件拷贝过去,报错如下图所示
在这里插入图片描述
  解决方法:找到对应IQ目录上的.mk文件,在.mk文件中的PRODUCT_COPY_FILES节点下添加

$(call find-copy-subdir-files,*,$(CUR_PATH)/camera/rkisp1/,$(TARGET_COPY_OUT_VENDOR)/etc/camera/rkisp1/) \

这条语句,这条语句作用是拷贝所有的IQ文件到/vendor/etc/camera/rkisp1/目录下。
 ③问题3:屏幕显示UI为0度横屏,而默认\hardware\rockchip\camera\etc\camera\camera3_profiles_rk3399.xml文件中配置的是传感器成像方向是90度,导致相机成像出现拉伸现象。
  解决方法:如下图所示。
在这里插入图片描述
 ④问题4:图像上下或者左右相反,可以通过修改OV13850寄存器完成上下或左右的翻转。
  解决方法:如下图介绍。
在这里插入图片描述
在这里插入图片描述

5、补丁

commit ea5601611a8fdff4b5efaf6db0f947bab7d0447d
Author: dengjiawen <1411471554@qq.com>
Date:   Thu Feb 22 10:52:28 2024 +0800适配MIPI摄像头OV13850diff --git a/frameworks/base/data/etc/privapp-permissions-platform.xml b/frameworks/base/data/etc/privapp-permissions-platform.xml
index 3b6abd50ee..0912e0ec6f 100644
--- a/frameworks/base/data/etc/privapp-permissions-platform.xml
+++ b/frameworks/base/data/etc/privapp-permissions-platform.xml
@@ -469,4 +469,8 @@ applications that come with the platform<privapp-permissions package="com.android.bips"><permission name="android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON"/></privapp-permissions>
+
+    <privapp-permissions package="com.android.camera2">
+               <permission name="android.permission.SYSTEM_CAMERA"/>
+      </privapp-permissions></permissions>
diff --git a/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml b/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml
index 84dd8b5ed5..61ac244250 100755
--- a/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml
+++ b/hardware/rockchip/camera/etc/camera/camera3_profiles_rk3399.xml
@@ -251,7 +251,7 @@<!-- ******************PSL specific section end **************************************************************--></Profiles>
-  <Profiles cameraId="0" name="ov13850" moduleId="m00">
+  <Profiles cameraId="0" name="ov13850" moduleId="m01"><Supported_hardware><hwType value="SUPPORTED_HW_RKISP1"/></Supported_hardware>
@@ -291,7 +291,7 @@<lens.info.hyperfocalDistance value="0.0"/> <!-- HAL may override this value from CMC for RAW sensors --><lens.info.minimumFocusDistance value="0.1"/> <!-- HAL may override this value from CMC for RAW sensors --><!-- Lens -->
-            <lens.facing value="BACK"/>
+            <lens.facing value="FRONT"/><!-- Request --><request.maxNumOutputStreams value="1,2,1"/><request.pipelineMaxDepth value="4"/>
@@ -463,7 +463,7 @@<sensor.baseGainFactor value="0,1"/> <!-- HAL may override this value from CMC for RAW sensors --><sensor.blackLevelPattern value="0,0,0,0"/><sensor.maxAnalogSensitivity value="2400"/> <!-- HAL may override this value from CMC for RAW sensors -->
-            <sensor.orientation value="90"/>
+            <sensor.orientation value="0"/>	<!-- 摄像头默认成像方向改为0, 这样和默认横屏0°才一致,成像才不会拉伸 --><sensor.profileHueSatMapDimensions value="0,0,0"/><sensor.availableTestPatternModes value="OFF,COLOR_BARS"/><!-- Info -->
diff --git a/hardware/rockchip/camera/etc/camera_etc.mk b/hardware/rockchip/camera/etc/camera_etc.mk
index ee01d12646..30328325bd 100755
--- a/hardware/rockchip/camera/etc/camera_etc.mk
+++ b/hardware/rockchip/camera/etc/camera_etc.mk
@@ -9,11 +9,13 @@ ifeq ($(filter box atv vr stbvr, $(strip $(TARGET_BOARD_PLATFORM_PRODUCT))), )ifeq (1,$(strip $(shell expr $(PLATFORM_SDK_VERSION) \>= 26)))PRODUCT_COPY_FILES += \$(CUR_PATH)/camera/camera3_profiles_$(TARGET_BOARD_PLATFORM).xml:$(TARGET_COPY_OUT_VENDOR)/etc/camera/camera3_profiles.xml \
+	$(call find-copy-subdir-files,*,$(CUR_PATH)/camera/rkisp1/,$(TARGET_COPY_OUT_VENDOR)/etc/camera/rkisp1/) \#$(call find-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_VENDOR)/firmware) \#$(call find-copy-subdir-files,*,$(CUR_PATH)/camera,$(TARGET_COPY_OUT_VENDOR)/etc/camera) elsePRODUCT_COPY_FILES += \$(CUR_PATH)/camera/camera3_profiles_$(TARGET_BOARD_PLATFORM).xml:$(TARGET_COPY_OUT_SYSTEM)/etc/camera/camera3_profiles.xml \
+	$(call find-copy-subdir-files,*,$(CUR_PATH)/camera/rkisp1/,$(TARGET_COPY_OUT_VENDOR)/etc/camera/rkisp1/) \$(call find-copy-subdir-files,*,$(CUR_PATH)/firmware,$(TARGET_COPY_OUT_SYSTEM)/etc/firmware) \$(call find-copy-subdir-files,*,$(CUR_PATH)/camera,$(TARGET_COPY_OUT_SYSTEM)/etc/camera) \$(call find-copy-subdir-files,*,$(CUR_PATH)/tools,$(TARGET_COPY_OUT_SYSTEM)/bin)
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi
index 450c677864..9062188ed2 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi
@@ -335,7 +335,7 @@cif_clkout: cif-clkout {rockchip,pins =/*cif_clkout*/
-				<2 RK_PB3 3 &pcfg_pull_none>;
+				<3 RK_PB7 3 &pcfg_pull_none>;};isp_dvp_d0d7: isp-dvp-d0d7 {
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi
index dd7d5f8952..d697023024 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-excavator-sapphire.dtsi
@@ -303,26 +303,6 @@};};-&i2c4 {
-	status = "disabled";
-	i2c-scl-rising-time-ns = <600>;
-	i2c-scl-falling-time-ns = <20>;
-
-	mpu6500@68 {
-		status = "disabled";
-		compatible = "invensense,mpu6500";
-		reg = <0x68>;
-		irq-gpio = <&gpio1 22 IRQ_TYPE_EDGE_RISING>;
-		mpu-int_config = <0x10>;
-		mpu-level_shifter = <0>;
-		mpu-orientation = <0 1 0 1 0 0 0 0 1>;
-		orientation-x= <1>;
-		orientation-y= <0>;
-		orientation-z= <0>;
-		mpu-debug = <1>;
-	};
-};
-&i2c7 {status = "okay";rtc@51 {
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi
index 83b7560801..da84220e47 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dtsi
@@ -50,7 +50,7 @@vcc_lcd: vcc-lcd {compatible = "regulator-fixed";regulator-name = "vcc_lcd";
-		gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>;
+		//gpio = <&gpio2 26 GPIO_ACTIVE_HIGH>;startup-delay-us = <20000>;enable-active-high;regulator-min-microvolt = <3300000>;
@@ -423,15 +423,15 @@&isp1_mmu {
-	status = "disabled";
+	status = "okay";    // isp 驱动使用了 iommu,所以 isp iommu 也需要打开};
@@ -451,16 +451,45 @@&mipi_dphy_tx1rx1 {
-	status = "disabled";
+	status = "okay";
+
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		port@0 {
+			reg = <0>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			mipi_in_ucam0: endpoint@1 {
+				reg = <1>;
+				remote-endpoint = <&ucam_out0>;	// sensor 端的 port 名
+				data-lanes = <1 2 3 4>;
+			};
+		};
+
+		port@1 {
+			reg = <1>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			dphy_tx1rx1_out: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&isp1_mipi_in>;
+			};
+		};
+	};};&vopb {
@@ -484,19 +513,31 @@&rkisp1_1 {
-	status = "disabled";
+	status = "okay";
+
+	port {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		isp1_mipi_in: endpoint@0 {
+			reg = <0>;
+			remote-endpoint = <&dphy_tx1rx1_out>;   // mipi dphy 端的 port 名
+		};
+	};};&pinctrl {
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
index 5b36e3c56d..ee56830ab5 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
@@ -555,7 +555,7 @@};&i2c4 {
-	status = "disabled";
+	status = "okay";i2c-scl-rising-time-ns = <475>;i2c-scl-falling-time-ns = <26>;@@ -568,6 +568,33 @@vbus-5v-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;status = "disabled";};
+
+	ov13850: ov13850@10 {
+		compatible = "ovti,ov13850";
+		status = "okay";
+		reg = <0x10>;
+		clocks = <&cru SCLK_CIF_OUT>;
+		clock-names = "xvclk";
+
+		/* conflict with csi-ctl-gpios */
+		reset-gpios = <&gpio2 RK_PD2 GPIO_ACTIVE_HIGH>;
+		pwdn-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "rockchip,camera_default";
+		pinctrl-0 = <&cif_clkout>;	// pinctl 设置
+
+		rockchip,camera-module-index = <1>;	// 模组编号,该编号不要重复,因为xml文件中的moduleId="m01",所有设置1
+		rockchip,camera-module-facing = "front";	// 模组朝向,有"back"和"front"
+		rockchip,camera-module-name = "CMK-CT0116";	// 模组名
+		rockchip,camera-module-lens-name = "Largan-50013A1";	// lens 名
+		// 模组名和 lens 名被用来和 IQ xml 文件做匹配,使用的是hardware\rockchip\camera\etc\camera\rkisp1\ov13850_CMK-CT0116_Largan-50013A1.xml文件
+		//lens-focus = <&vm149c>; // vcm 驱动设置,支持 AF 时需要有这个设置
+		port {
+			ucam_out0: endpoint {
+				remote-endpoint = <&mipi_in_ucam0>;	// mipi dphy 端的 port 名
+				data-lanes = <1 2 3 4>;	// mipi lane 数
+			};
+		};
+	};};

相关文章:

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出&#xff0c;我们需要关心的&#xff0c;①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…...

学生个性化成长平台搭建随笔记

1.Vue的自定义指令 在 Vue.js 中&#xff0c;我们可以通过 Vue.directive() 方法来定义自定义指令。具体来说&#xff0c;我们需要传递两个参数&#xff1a; 指令名称&#xff1a;表示我们要定义的指令名称&#xff0c;可以是一个字符串值&#xff0c;例如&#xff1a;has-rol…...

XTuner InternLM-Chat 个人小助手认知微调实践

要解决的问题&#xff1a; 如何让模型知道自己做什么&#xff0c;是什么样身份。是谁创建了他&#xff01;&#xff01;&#xff01; 概述 目标&#xff1a;通过微调&#xff0c;帮助模型认清了解对自己身份弟位 方式&#xff1a;使用XTuner进行微调 微调前&#xff08;回答…...

编程笔记 Golang基础 025 列表

编程笔记 Golang基础 025 列表 一、列表的功能二、示例程序三、注意事项 在 Go 语言中&#xff0c;列表是一种数据结构&#xff0c;用于存储有序的元素集合&#xff0c;允许高效地进行插入和删除操作。Go 标准库中的 container/list 包提供了一个内置的双链表实现&#xff0c;它…...

Rollup + Ts

Rollup Ts RollupTs demo 一、文件配置 | - src | | - utils | | | - .ts | | - .babelrc | | - main.js | | - style.css | - package.json | - rollup.config.js | - tsconfig.json二、插件下载 rollup // rollup 基本的包 typescript // ts 包 rollup/plug…...

5个精美的wordpress中文企业主题模板

元宇宙WordPress主题模板 简洁大气的元宇宙 Metaverse WordPress主题模板&#xff0c;适合元宇宙行业的企业官网使用。 https://www.jianzhanpress.com/?p3292 职业技术培训WordPress主题模板 简洁大气的职业技术培训WordPress主题&#xff0c;适合用于搭建教育培训公司官方…...

【数据分享】2011-2023年我国地级市逐月二手房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现&#xff0c;一个城市的房价越高通常代表这个城市越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01; 本次我们为大家带来的是2011-2023年我国地级市的逐月二手…...

鸿蒙会成为安卓的终结者吗?

随着近期鸿蒙OS系统推送测试版的时间确定&#xff0c;关于鸿蒙系统的讨论再次升温。 作为华为自主研发的操作系统&#xff0c;鸿蒙给人的第一印象是具有颠覆性。 早在几年前&#xff0c;业内就开始流传鸿蒙可能会代替Android的传言。毕竟&#xff0c;Android作为开源系统&…...

Sora横空出世!AI将如何撬动未来?

近日&#xff0c;OpenAI 发布首个视频生成“Sora”模型&#xff0c;该模型通过接收文字指令&#xff0c;即可生成60秒的短视频。 而在2022年末&#xff0c;同样是OpenAI发布的AI语言模型ChatGPT&#xff0c;简化了文本撰写、创意构思以及代码校验等任务。用户仅需输入一个指令&…...

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…...

XGB-11:随机森林

XGBoost通常用于训练梯度提升决策树和其他梯度提升模型。随机森林使用与梯度提升决策树相同的模型表示和推断&#xff0c;但使用不同的训练算法。可以使用XGBoost来训练独立的随机森林&#xff0c;或者将随机森林作为梯度提升的基模型。这里我们专注于训练独立的随机森林。 XG…...

超平面介绍

超平面公式 (1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中&#xff0c;一条直线是一维的&#xff0c;它把平面分成了两部分&#xff1b;三维空间中&#xff0c;一个平面是二维的&#xff0c;它把空间分成了两部分。(2…...

【苍穹外卖】一些开发总结

1、DTO、VO的区别 DTO:如果前端返回的实体类和对应的实体类比较较大差别 使用DTO来封装数据 后面在使用 BeanUtils.copyProperties() 将熟悉复制到对应的实体类中 VO:主要用于展示数据,例如在控制器层和视图层之间。它通常包含一些与显示相关的属性,如标题、描述等。 2…...

Python 3 中,`asynchat`异步通信

在 Python 3 中&#xff0c;asynchat 是基于 asyncore 的一个高层抽象模块&#xff0c;用于处理异步通信协议。它提供了一种简单的方式来创建自定义的异步通信协议&#xff0c;并处理通信中的错误和异常。 asynchat 模块主要作用是将网络数据流分割成消息或者数据包&#xff0…...

RAW 编程接口 TCP 简介

一、LWIP 中 中 RAW API 编程接口中与 TCP 相关的函数 二、LWIP TCP RAW API 函数 三、LwIP_Periodic_Handle函数 LwIP_Periodic_Handle 函数是一个必须被无限循环调用的 LwIP支持函数&#xff0c;一般在 main函数的无限循环中调用&#xff0c;主要功能是为 LwIP各个模块提供…...

Oracle EBS FA折旧回滚的分录追溯

FA模块向子分类账和总账追溯分为两部分&#xff1a;事务表和折旧&#xff0c;但是FA相关表做其实关联计划外折旧的分录会被遗漏的原因&#xff1a; 如果已经当月折旧&#xff0c;运行完成折旧后&#xff0c;又进行了计划外折旧&#xff0c;因为计划折旧时又要区分【是否进行当月…...

sql注入 [极客大挑战 2019]FinalSQL1

打开题目 点击1到5号的结果 1号 2号 3号 4号 5号 这里直接令传入的id6 传入id1^1^1 逻辑符号|会被检测到&#xff0c;而&感觉成了注释符&#xff0c;&之后的内容都被替换掉了。 传入id1|1 直接盲注比较慢&#xff0c;还需要利用二分法来编写脚本 这里利用到大佬的脚…...

持续集成,持续交付和持续部署的概念,以及GitLab CI / CD的介绍

引言&#xff1a;上一期我们部署好了gitlab极狐网页版&#xff0c;今天我们介绍一下GitLabCI / CD 目录 一、为什么要 CI / CD 方法 1、持续集成 2、持续交付 3、持续部署 二、GitLab CI / CD简介 三、GitLab CI / CD 的工作原理 4、基本CI / CD工作流程 5、首次设置 …...

[Java 项目亮点] 三层限流设计

思路来源&#xff1a;bilibili 河北王校长 文章目录 面试官可能会问你能详细介绍一下Nginx的http_limit_req_module模块吗&#xff1f;你能解释一下如何在Nginx中配置http_limit_req_module模块吗&#xff1f;你知道如何调整Nginx的http_limit_req_module模块以适应不同的业务需…...

GPT-SoVITS 快速声音克隆使用案例:webui、api接口

参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...