RK 安卓10/11平臺 HDMI-IN 調試

這篇文章我們介紹一下在安卓9、10、11的版本上,rk平臺的hdmi-in功能是如何實現的,下篇文章我們再介紹安卓12之后的版本有了什么變化。希望對在rk平臺調試hdmi-in功能的朋友有一些幫助。

目錄

(1)概述

(2)基本功能流程實現原理

1.系統功能框圖

2.系統功能流程

2.1 APK工作流程

2.2?熱拔插

2.3 切換分辨率

(3)功能配置說明

1.驅動代碼與配置

1.1 驅動代碼

1.2 config配置

2.DTS配置

2.1 設備配置

2.2 圖像鏈路配置

2.2.1 RK3399

2.2.2 RK3568

3.camera xml注冊設備

3.1 設備名稱與ID

3.2 分辨率配置

3.3 SOC模式

3.4 旋轉角配置

4.APK適配

4.1 獲取APK

4.2 APK 源碼適配

5.EDID配置

(4)調試方法

1.查看設備是否注冊camera

2.查看拓撲結構

3.v4l2抓取數據流

4.v4l2抓圖

5.不同芯片平臺接收能力

6.配置使用ISP CMA內存

7.配置RK3399 ISP超頻

(5)總結

(1)概述

安卓9/10/11等版本一般對應的都是rk比較舊的主控芯片,例如rk3399、rk3568/6等等,這里呢,我們又可以分為兩類,一類是rk3399等較久的主控,一類是RK3566/8兩個平臺。rk3399之類的主控芯片沒有VICAP的圖像模塊,都是通過ISP接收HDMI-IN的圖像數據,RK3566/68的平臺有VICAP(RKCIF)模塊,也有RKISP模塊,可以兩種方式實現。

在RK的主控芯片中只有RK3588擁有獨立的HDMIRX模塊,其他主控芯片都沒有HDMI-RX模塊,想要實現HDMI-IN 的功能只能通過外掛轉接芯片的方式實現。比較常用的轉接芯片有RK628、LT6911系列等等,這篇文章我們就介紹一下這種方式的實現以及調試指南

(2)基本功能流程實現原理

1.系統功能框圖

系統框圖如下圖所示,RK628D作為類camera設備使用,基于V4L2框架實現相關驅動,HDMI信號源通過RK628的HDMIRX接口輸入,經過RK628的內部模塊處理將接收的圖像數據處理為MIPI-CSI信號作為數據輸出,同時圖像格式也統一轉換為YUV422格式輸出,經MIPI lane接入到主控的MIPI接口,由主控接收圖像并對圖像進行處理顯示,從而實現HDMI-IN的功能。

2.系統功能流程

HDMI IN video 部分的軟件實現方案是將 RK628 模擬成一個 MIPI SOC camera 設備,通過 camera 框架接 收video 數據并在 APK 進行顯示,同時基于 HDMI IN 的應用場景需要,增加 HDMI IN 熱拔插和 HDMI IN 分辨率自適應支持。
2.1 APK工作流程

APK預覽工作流程如下圖所示:

2.2?熱拔插

熱拔插中斷處理流程如下圖所示

2.3 切換分辨率

切換分辨率流程如下圖所示:

(3)功能配置說明

1.驅動代碼與配置

1.1 驅動代碼

轉接芯片驅動代碼如下:

drivers/media/i2c/rk628/
drivers/media/i2c/lt6911uxe.c
drivers/media/i2c/lt6911uxc.c
drivers/media/i2c/tc35874x.c
1.2 config配置

kernel的config配置如下:

CONFIG_VIDEO_LT6911UXC=y
CONFIG_VIDEO_LT6911UXE=y
CONFIG_VIDEO_RK628_CSI=y
CONFIG_VIDEO_TC35874X=y

2.DTS配置

以下介紹調試的時候的dts配置。主要有設備配置,鏈路配置,鏈路配置中,由于rk3566/68平臺有兩種場景,因此,我們分別介紹兩種場景的配置。

2.1 設備配置

轉接芯片一般都是i2c設備,需要配置到i2c總線下,參考如下配置:

&i2c5 {status = "okay";rk628_csi: rk628_csi@50 {reg = <0x50>;compatible = "rockchip,rk628-csi-v4l2";status = "okay";power-domains = <&power RK3588_PD_VI>;pinctrl-names = "default";pinctrl-0 = <&rk628_pin>;interrupt-parent = <&gpio2>;interrupts = <RK_PC4 IRQ_TYPE_EDGE_RISING>;enable-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;reset-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;plugin-det-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;continues-clk = <1>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "HDMI-MIPI";rockchip,camera-module-lens-name = "RK628-CSI";port {hdmiin_out0: endpoint {remote-endpoint = <&hdmi_mipi0_in>;data-lanes = <1 2 3 4>;};};};
};
  • interrupt-parent/ interrupts:連接RK628中斷的GPIO引腳;

  • enable-gpios:RK628供電控制GPIO引腳(若為常供電可不配置);

  • reset-gpios:RK628復位控制GPIO引腳

  • rockchip,camera-module相關的都是適配RK的camera框架平臺私有配置,與camera類似。

2.2 圖像鏈路配置

這里具體RK3399以及RK3568為例,RK3399代表的是RK舊的平臺,RK3568代表的是引入VICAP之后的平臺,在RK3568之后的芯片平臺也沒有基于安卓11的版本,都是基于安卓12以后得版本,我們后續在做詳細的介紹。

2.2.1 RK3399

RK339平臺只能使用ISP接收圖像,鏈路我們可以描述為:轉接芯片-->dphy_rx0 -->isp

其中dts配置可以參考如下配置。需要注意的是rk3399有兩個isp,配置對應的是哪一路即可。

&i2c4 {clock-frequency = <400000>;status = "okay";rk628_csi_v4l2: rk628_csi_v4l2@50 {reg = <0x50>;compatible = "rockchip,rk628-csi-v4l2";interrupt-parent = <&gpio2>;interrupts = <2 IRQ_TYPE_LEVEL_HIGH>;//enable-gpios = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;reset-gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_LOW>;plugin-det-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_LOW>;//power-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "RK628-CSI";rockchip,camera-module-lens-name = "NC";port {hdmiin_out0: endpoint {remote-endpoint = <&mipi_in>;data-lanes = <1 2 3 4>;};};};
};&mipi_dphy_rx0 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_in: endpoint@1 {reg = <1>;remote-endpoint = <&hdmiin_out0>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;dphy_rx_out: endpoint@0 {reg = <0>;remote-endpoint = <&isp_mipi_in>;};};};
};&isp0 {status = "okay";port {#address-cells = <1>;#size-cells = <0>;isp_mipi_in: endpoint@0 {reg = <0>;remote-endpoint = <&dphy_rx_out>;};};
};&isp0_mmu {status = "okay";
};
2.2.2 RK3568

RK3568則有兩種情況,一是使用isp接收,二是使用vicap模塊接收圖像,我們分別進行介紹。

rk3568使用isp的場景,對應的圖像鏈路為:

對應的dts配置為:

&csi2_dphy_hw {status = "okay";
};&csi2_dphy0 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_in: endpoint@1 {reg = <1>;remote-endpoint = <&hdmiin_out0>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;csidphy_out: endpoint@0 {reg = <0>;remote-endpoint = <&isp0_in>;};};};
};&i2c4 {clock-frequency = <400000>;status = "okay";rk628_csi_v4l2: rk628_csi_v4l2@50 {reg = <0x50>;compatible = "rockchip,rk628-csi-v4l2";interrupt-parent = <&gpio2>;interrupts = <2 IRQ_TYPE_LEVEL_HIGH>;//enable-gpios = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>;reset-gpios = <&gpio2 RK_PA3 GPIO_ACTIVE_LOW>;plugin-det-gpios = <&gpio2 RK_PA4 GPIO_ACTIVE_LOW>;//power-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "RK628-CSI";rockchip,camera-module-lens-name = "NC";port {hdmiin_out0: endpoint {remote-endpoint = <&mipi_in>;data-lanes = <1 2 3 4>;};};};
};&rkisp {status = "okay";
};&rkisp_mmu {status = "okay";
};&rkisp_vir0 {status = "okay";port {#address-cells = <1>;#size-cells = <0>;isp0_in: endpoint@0 {reg = <0>;remote-endpoint = <&csidphy_out>;};};
};

RK3568使用VICap的場景,圖像鏈路為:

對應的dts配置參考為:

&csi2_dphy_hw {status = "okay";
};&csi2_dphy0 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;hdmi_to_mipi_in: endpoint@1 {reg = <1>;remote-endpoint = <&lt6911uxc_out>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;csidphy_out: endpoint@1 {reg = <1>;remote-endpoint = <&mipi_csi2_input>;data-lanes = <1 2 3 4>;};};};
};&i2c3 {status = "okay";lt6911uxc: lt6911uxc@2b {status = "okay";reg = <0x2b>;compatible = "lontium,lt6911uxc";clocks = <&ext_cam_clk>;clock-names = "xvclk";interrupt-parent = <&gpio4>;interrupts = <16 IRQ_TYPE_LEVEL_LOW>;power-gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;reset-gpios = <&gpio4 26 GPIO_ACTIVE_LOW>;plugin-det-gpios = <&gpio0 30 GPIO_ACTIVE_LOW>;hpd-ctl-gpios = <&gpio3 27 GPIO_ACTIVE_LOW>;rockchip,camera-module-index = <0>;rockchip,camera-module-facing = "back";rockchip,camera-module-name = "LT6911UXC";rockchip,camera-module-lens-name = "NC";port {lt6911uxc_out: endpoint {remote-endpoint = <&hdmi_to_mipi_in>;data-lanes = <1 2 3 4>;};};};
};&mipi_csi2 {status = "okay";ports {#address-cells = <1>;#size-cells = <0>;port@0 {reg = <0>;#address-cells = <1>;#size-cells = <0>;mipi_csi2_input: endpoint@1 {reg = <1>;remote-endpoint = <&csidphy_out>;data-lanes = <1 2 3 4>;};};port@1 {reg = <1>;#address-cells = <1>;#size-cells = <0>;mipi_csi2_output: endpoint@0 {reg = <0>;remote-endpoint = <&cif_mipi_in>;data-lanes = <1 2 3 4>;};};};
};&rkcif_mipi_lvds {status = "okay";port {cif_mipi_in: endpoint {remote-endpoint = <&mipi_csi2_output>;data-lanes = <1 2 3 4>;};};
};&rkcif_mmu {status = "okay";
};&rkcif {status = "okay";
};
3.camera xml注冊設備

camera3_profiles.xml文件對應SDK目錄下具體芯片平臺的文件:

hardware/rockchip/camera/etc/camera/camera3_profiles_rk3xxx.xml

在設備上的路徑為:

/vendor/etc/camera/camera3_profiles.xml

若是臨時調試,可以采用adb替換文件的形式,但需要注意文件路徑與文件名的正確性。

xml增加配置的時候可以參考其他已有的sensor,后續僅介紹關鍵的幾個修改點。

3.1 設備名稱與ID

xml中name參數與moduleid參數取決定著能否成功注冊安卓camera設備,若該兩項屬性配置異常,則會導致

  • name:需要與驅動名稱一致,有大小寫區別;

  • moduleId:需要與驅動dts中配置的index一致;

3.2 分辨率配置

scaler.availableStreamConfigurations/scaler.availableMinFrameDurations/ scaler.availableStallDurations:需要正確配置預預覽支持的分辨率以及幀率,此處的分辨率不能大于驅動實際輸出的分辨率大小,如下所示:

            <scaler.availableStreamConfigurations value="BLOB,1920x1080,OUTPUT,BLOB,176x144,OUTPUT,YCbCr_420_888,1920x1080,OUTPUT,YCbCr_420_888,176x144,OUTPUT,IMPLEMENTATION_DEFINED,1920x1080,OUTPUT,IMPLEMENTATION_DEFINED,176x144,OUTPUT"/><scaler.availableMinFrameDurations value="BLOB,1920x1080,33333333,BLOB,176x144,33333333,YCbCr_420_888,1920x1080,33333333,YCbCr_420_888,176x144,33333333,IMPLEMENTATION_DEFINED,1920x1080,33333333,IMPLEMENTATION_DEFINED,176x144,33333333" /><scaler.availableStallDurations value="BLOB,1920x1080,33333333,
3.3 SOC模式

在<Sensor_info_RKISP1>中需要配置sensorType,一般SOC為YUVsensor,即不啟動3A,RAW為RAW sensor,啟動3A,HDMI-IN都是YUV的圖像,因此需要設置為SOC模式。

<sensorType value="SENSOR_TYPE_SOC"/> <!-- SENSOR_TYPE_SOC or SENSOR_TYPE_RAW -->
3.4 旋轉角配置
<sensor. Orientation value="0"/>

4.APK適配

4.1 獲取APK

APK源碼地址:

RKDocs/common/hdmi-in/apk/rkCamera2_based_on_CameraHal3_V1.3.tar.gz
4.2 APK 源碼適配
APK 通過 ioctl 的方式訪問 RK628D 設備節點,獲取當前的連接狀態和分辨率。 RK628D 設備節點在
isp1/isp2/vicap 鏈路上可能會差異。需要根據實際情況修改 APK 源碼。
rkCamera2/jni/native.cpp

獲取連接狀態和分辨率的位置:

于在 APK 訪問了設備節點,所以需要確認是否關閉了 selinux ,可通過 getenforce 命令查看:

5.EDID配置

若需要修改分辨率支持,可直接在驅動代碼中修改 EDID。

(4)調試方法

1.查看設備是否注冊camera

使用如下命令查看是否成功注冊cameraID

dumpsys media.camera

2.查看拓撲結構

HDMI2MIPI驅動框架類似camera,需要保證pipeline的完整才可以正常工作,使用media-ctl查看pipeline,同時也可以查看轉接芯片對應的subdev節點,以便于apk那邊適配修改。

media-ctl -d /dev/mediaX -p      //X=0123...

3.v4l2抓取數據流

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=3840,height=2160,pixelformat='NV12' --stream-mmap=4

4.v4l2抓圖

v4l2-ctl --verbose -d /dev/video0 --set-fmt-video=width=3840,height=2160,pixelformat='NV12' --stream-mmap=3 --stream-skip=4 --stream-to=/data/3840x2160_nv12.yuv --stream-count=5 --stream-poll

5.不同芯片平臺接收能力

由于各個芯片平臺isp/vicap的性能不同,對圖像的最大接收能力也不同。可參考下表

芯片平臺控制器支持分辨率
RK3288/RK3326ISP1080P60
RK3399ISP4K30 超頻
RK3568/6ISP/VICAP

ISP:1080P60

VICAP:4K30

6.配置使用ISP CMA內存

部分平臺HDMI IN接收圖像數據時,根據實際系統負載,可能會存在帶寬不足導致丟幀或MIPI接收異常等問題。此時需要提高DDR頻率,若仍無改善,可給ISP預留使用CMA內存,以改善解決此問題。

  • rockchip_defconfig 配置預留 CMA 內存 128MB
CONFIG_CMA=y
CONFIG_CMA_SIZE_MBYTES=128
  • 在dts配置ISP關閉IOMMU,使用CMA內存
&rkisp_mmu {status = "disabled";
};

7.配置RK3399 ISP超頻

配置RK3399超頻625M,實現接收4K30圖像。

diff --git a/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi
index 5ed8dac..e8f259d 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-vop-clk-set.dtsi
@@ -148,7 +148,7 @@<50000000>, <100000000>,<75000000>, <75000000>,<816000000>, <816000000>,
-			 <600000000>, <200000000>,
+			 <625000000>, <200000000>,<800000000>, <150000000>,<75000000>, <37500000>,<300000000>, <100000000>,
diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c
index 4e548f0..5aa9e13 100644
--- a/drivers/media/platform/rockchip/isp1/dev.c
+++ b/drivers/media/platform/rockchip/isp1/dev.c
@@ -757,7 +757,7 @@ static const unsigned int rk3368_isp_clk_rate[] = {/* isp clock adjustment table (MHz) */static const unsigned int rk3399_isp_clk_rate[] = {
-	300, 400, 600
+	300, 400, 625};static struct isp_irqs_data rk1808_isp_irqs[] = {

(5)總結

本文較長基本詳細介紹了安卓9/10/11等平臺hdmi-in功能的開發,可以看到hdmi-in與camera最大的不同在于增加了切換分辨率與熱拔插的功能,而目前在安卓11的版本上面,都是使用apk輪詢的方式實現的,而在安卓12之后的版本中,對這一方式有所優化,并且也增加了低延時送顯示的應用框架,不再完全依賴于camera框架,后續我們在做介紹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85303.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB學習記錄(快速入門)

MongoDB核心 基礎概念 數據庫 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。在內存中運行的&#xff0c;一旦程序運行結束或者計算機斷電&#xff0c;程序運行中的數據都會丟失。我們需要將一些程序運行的數據持久化到硬盤之中&#xff0c;以確保數據的安全性。數據庫…

阿里一面:微服務拆分需要考慮什么因素?

要拆分微服務&#xff0c;首先我們要了解微服務拆了會有什么問題&#xff1f;怎么合理拆服務&#xff1f; 拆分服務會帶來什么問題&#xff1f; 舉個電商系統下單扣庫存的例子。 對于單體應用&#xff0c;通訊在進程內部進行&#xff0c;下單方法調用扣庫存方法&#xff0c;…

3D高斯潑濺和4D高斯

1.高斯函數 想象你往平靜的湖水里扔一塊石頭&#xff0c;水波會以石頭落點為中心向外擴散&#xff0c;形成一個逐漸衰減的圓形波紋。高斯函數的形狀就和這個波紋類似&#xff1a; 中心最高&#xff08;石頭落點&#xff0c;波峰最強&#xff09;。越往外&#xff0c;高度&…

comfyui插件和comfyui mac安裝

mac comfyui安裝包 ComfyUI.zip&#xff0c;官方最新0.3.40&#xff0c;如果后續官方有迭代&#xff0c;可以直接通過git更新源碼升級 comfyui插件下載&#xff0c;解壓放到custom_nodes目錄下&#xff0c;包含 comfyui-animatediff-evolved&#xff08;視頻插件&#xff09; 和…

面試題SpringCloud

SpringCloud有哪些特征&#xff1f; 分布式/版本化配置服務注冊與發現路由服務到服務的調用負載均衡斷路器領導選舉和集群狀態分布式消息傳遞 SpringCloud核心組件&#xff1f; Eureka 注冊中心Ribbon 客戶端負載均衡Hystrix&#xff1a; 服務容錯處理Feign:聲明式Rest客戶端Zu…

ASR-PRO語音識別可能出現的問題

ASR-PRO語音識別可能出現的問題 4月份有一天刷到牢大/愛麗絲語音自開關燈設備&#xff0c;心血來潮&#xff0c;博主也是淺嘗了一下&#xff0c;由此也總結一下&#xff0c;實現此項目會出現的問題。 在實現愛麗絲開關燈模塊時ASRPRO語音識別可能出現的問題如下&#xff1a; …

蒼穹外賣--緩存菜品Spring Cache

Spring Cache是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單地加一個注解&#xff0c;就能實現緩存功能。 Spring Cache提供了一層抽象&#xff0c;底層可以切換不同的緩存實現&#xff0c;例如&#xff1a; ①EHCache ②Caffeine ③Redis 常用注解…

個人簡歷制作MarkDown模板

MarkDown制作個人簡歷的模板放在了github上&#xff0c;大家如有需求&#xff0c;請自取&#xff1a; https://github.com/QQQQQQBY/ResumeTemplate 介紹一下此模板的特點&#xff1a; &#x1f338;個人面試期間使用的、整理的簡歷格式&#xff0c;現在分享給大家。 ?簡歷采…

【MySQL數據庫 | 第五篇】DDL操作2

文章目錄 當前數據庫student的數據數據表操作 - 修改&刪除&#x1f4d6;修改操作增加字段&#x1f44f;案例&#xff1a;向數據表student中添加字段 id修改字段的數據類型【只能修改字段的屬性】&#x1f44f;案例&#xff1a;將student表中字段age的屬性由tinyint unsigne…

【瀏覽器插件】如何開發一個Chrome瀏覽器插件

這篇文章來介紹一下,如何開發一個自己的Chrome瀏覽器插件程序。 Chrome瀏覽器插件,其實是讓瀏覽器替我們執行我們自己寫的代碼,既然要讓瀏覽器執行代碼,那么首先,就需要定義一個規范,也就是說,需要讓Chrome瀏覽器知道,你寫的程序是一個插件。 這就需要介紹一下插件中…

詳細講解Redis為什么被設計成單線程

Redis 被設計成單線程的原因主要有以下幾點&#xff0c;這些原因涉及性能優化、復雜性控制、數據一致性以及適用場景等多個方面&#xff1a; 1. 簡化設計與實現 避免鎖競爭&#xff1a;多線程環境下&#xff0c;多個線程訪問共享資源時需要加鎖來保證數據一致性。鎖的使用會增…

Hive 邏輯優化器

Optimizer PointLookupOptimizer 作用&#xff1a;把符合條件的 OR 表達式轉為 IN。 參數hive.optimize.point.lookup 設置是否開啟 PointLookupOptimizer&#xff0c;默認為 true. 參數 hive.optimize.point.lookup.min 控制多少個 OR 表達式轉為 IN&#xff0c;默認 31。 例…

ZYNQ Petalinux實戰:PCIe直通NVMe固態硬盤,解鎖存儲性能新極限!

突破SD卡和SATA的速度枷鎖!本文將手把手教你如何在ZYNQ平臺上通過PCIe接口驅動NVMe固態硬盤。從硬件設計、Linux內核配置到創新性的DMA零拷貝優化,實現2000MB/s+ 的存儲性能飛躍,附完整代碼解析和性能實測對比。 一、為什么選擇PCIe NVMe?存儲性能革命 ZYNQ傳統存儲方案面…

05-mcp-server案例分享-用豆包大模型 1.6 手搓文生圖視頻 MCP-server發布到PyPI官網

1前言 上期給大家介紹過mcp-server案例分享-用豆包大模型 1.6 手搓文生圖視頻 MCP-server。當時部署的方式使用了一個私有云SSE的部署。當時缺少一個本地部署的方式&#xff0c;有的小伙伴給我留言能不能有一個本地話部署方式了。今天就給大家帶來一個本地化部署的方案。 話不…

MCP Parameters 增加描述

場景&#xff1a;本地MCP開發完后是否發現CLINE上顯示的Parameters 顯示No description 方法1 &#xff1a;使用參數元數據 (Annotated) 可以使用 Pydantic 的with 類提供有關參數的其他元數據Annotated。這種方法更受歡迎&#xff0c;因為它更現代&#xff0c;并且將類型提示…

STM32 GPIO 寄存器開發

&#x1f527; ?一、核心寄存器概覽? ?寄存器??功能??位寬??關鍵位域??GPIOx_CRL/CRH?配置引腳模式&#xff08;輸入/輸出/復用/模擬&#xff09;和輸出參數32位每4位控制1個引腳&#xff1a;CNF[1:0]&#xff08;模式&#xff09; MODE[1:0]&#xff08;速度&am…

powershell 獲取 用戶及進程列表

在PowerShell中獲取用戶的進程列表&#xff0c;可以通過幾種方法實現。以下是一些常見的方法&#xff1a; 方法1&#xff1a;使用Get-WmiObject Get-WmiObject命令可以用來查詢Windows Management Instrumentation (WMI)數據庫&#xff0c;從而獲取關于進程和用戶的信息。 # …

量化面試綠皮書:15. 假幣一

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 15. 假幣一 有 10個袋子&#xff0c;每個袋子里有 100個相同的硬幣。 在除一個以外的所有袋子中&#xff0c;每枚硬幣重10 克。 然而&#x…

Java求職者面試:Spring AI、MCP、RAG、向量數據庫與Embedding模型技術解析

Java求職者面試&#xff1a;Spring AI、MCP、RAG、向量數據庫與Embedding模型技術解析 第一輪&#xff1a;基礎概念問題 1. 請解釋Spring AI是什么&#xff1f;它與傳統Spring框架有何不同&#xff1f; Spring AI是Spring生態系統的一部分&#xff0c;專注于人工智能和機器學…

tp框架導出excel的時候報錯:unexcepted identifier “Closure“,excepting variable

記錄一個簡單的錯誤。 背景 用的是PhpOffice/PhpSpreadsheet 在本地環境下是可以正常導出excel的。但是線上就不行。 就會報錯unexcepted identifier “Closure”&#xff0c;好像是不能用匿名函數。 首先 本地可以正常導出&#xff0c;然后服務器上不可以。看了各種日志。ph…