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

RK3288 Android11 mini-pcie接口 4G模组EC200A适配(含自适应功能)

这里写目录标题

  • 1、修改驱动内核配置
    • ①使能USBNET功能
    • ②使能 USB 串口 GSM、CDMA 驱动
    • ③使能 USB 的 CDC ACM模式
    • ④使能PPP功能
  • 2、使用lsusb命令查看是否识别到usb接口的“EC200A”4G模组
  • 3、在drivers/usb/serial/option.c添加VID和PID信息
    • ①添加VID和PID定义
    • ②在option_ids 数组中添加
    • ③支持 ECM 接口,可以通过 ECM 接口轻松联网,在option_probe 函数添加如下
    • ④添加休眠后唤醒接口,在option_1port_device 结构体变量里面添加如下
  • 4、在drivers/usb/serial/usb_wwan.c 文件中的usb_wwan_setup_urb函数中添加零包处理代码
  • 5、插入EC200A模块,查看日志是否虚拟出USB接口,现象如下
  • 6、关闭SELINUX,路径:a\device\rockchip\common\BoardConfig.mk
  • 7、开启BOARD_HAVE_DONGLE和BOARD_HAS_RK_4G_MODEM,路径与第6点一样
  • 8、无自适应功能的适配方法,也就是不会动态加载RIL库,而是写死的方法,如下
    • ①将ril拷贝到对应的系统路径,创建adevice\rockchip\rk3288\rk3288_Android11\modify.mk文件,内容如下:
    • ②设置vendor.rild.libpath属性
    • ③设置rild.libpath属性
    • ④修改开启rild服务,加载libreference-ril-QUECTEL.so库文件
  • 9、自适应功能的适配方法,也就是会动态加载RIL库,如下
  • 10、添加权限,在a\device\rockchip\common\ueventd.rockchip.rc文件下添加如下
  • 11、查看库是否有和加载库是否正确及日志
  • 12、ping百度是否能上网
  • 13、PATCH补丁文件和需要添加的文件

1、修改驱动内核配置

①使能USBNET功能

-> Device Drivers -> -*- Network device support -> USB Network Adapters -> -*- Multi-purpose USB Networking Framework

②使能 USB 串口 GSM、CDMA 驱动

Device Drivers  --->[*] USB support  ---><*> USB Serial Converter support[*] USB Generic Serail Driver[*] USB Driver for GSM and CMDA modems

③使能 USB 的 CDC ACM模式

-> Device Drivers -> [*] USB support -> <*> Support for Host-side USB-> <*> USB Modem (CDC ACM) support

④使能PPP功能

Device Drivers  --->[*] Network device support  ---><*> PPP (point-to-point protocol) support<*> PPP support for async serial ports<*> PPP support for sync tty ports<*> PPP Deflate compression

2、使用lsusb命令查看是否识别到usb接口的“EC200A”4G模组

rk3288_Android10:/ $ lsusb
Bus 001 Device 005: ID 2c7c:6005

  这里解释一下信息,“2c7c”指的是VID,“6005”指的是PID。

3、在drivers/usb/serial/option.c添加VID和PID信息

①添加VID和PID定义

#define QUECTEL_VENDOR_ID		0x2c7c	/* VID */
#define QUECTEL_PRODUCT_EC200A_CN       0x6005	/* PID */

②在option_ids 数组中添加

{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200A_CN) },	/* Quectel EC200A */

③支持 ECM 接口,可以通过 ECM 接口轻松联网,在option_probe 函数添加如下

#if 1 //Added by Quectel  //Quectel UC20's interface 4 can be used as USB Network device  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003)  && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)  return -ENODEV;  //Quectel EC20(MDM9215)'s interface 4 can be used as USB Network device  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215)  && serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)  return -ENODEV;  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {  __u16 idProduct = le16_to_cpu(serial->dev->descriptor.idProduct);  struct usb_interface_descriptor *intf = &serial->interface->cur_altsetting->desc;  if (intf->bInterfaceClass != 0xFF || intf->bInterfaceSubClass == 0x42) {  //ECM, RNDIS, NCM, MBIM, ACM, UAC, ADB  return -ENODEV;  }  if ((idProduct&0xF000) == 0x0000) {  //MDM interface 4 is QMI  if (intf->bInterfaceNumber == 4 && intf->bNumEndpoints == 3  && intf->bInterfaceSubClass == 0xFF && intf->bInterfaceProtocol == 0xFF)  return -ENODEV;  }  }  
#endif 

④添加休眠后唤醒接口,在option_1port_device 结构体变量里面添加如下

.reset_resume = usb_wwan_resume,

4、在drivers/usb/serial/usb_wwan.c 文件中的usb_wwan_setup_urb函数中添加零包处理代码

#if 1 //Added by Quectel for Zero Packet  if (dir == USB_DIR_OUT) {  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9090))  urb->transfer_flags |= URB_ZERO_PACKET;  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9003))  urb->transfer_flags |= URB_ZERO_PACKET;  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x05C6) && serial->dev->descriptor.idProduct == cpu_to_le16(0x9215))  urb->transfer_flags |= URB_ZERO_PACKET;  if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C))  urb->transfer_flags |= URB_ZERO_PACKET;  }  
#endif

5、插入EC200A模块,查看日志是否虚拟出USB接口,现象如下

[ 2537.919546] option 1-1.4:1.2: GSM modem (1-port) converter detected
[ 2537.920339] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0
[ 2537.921527] option 1-1.4:1.3: GSM modem (1-port) converter detected
[ 2537.922340] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 2537.923486] option 1-1.4:1.4: GSM modem (1-port) converter detected
[ 2537.924214] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2

  再使用ls /dev/ttyUSB*命令查看,如下:

rk3288_Android10:/ $ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2

6、关闭SELINUX,路径:a\device\rockchip\common\BoardConfig.mk

BOARD_SELINUX_ENFORCING ?= false

  当BOARD_SELINUX_ENFORCING设置为1时,表示SELinux处于强制执行模式;当设置为0时,表示SELinux处于宽松模式。在强制执行模式下,SELinux会严格限制应用程序和系统服务的权限,确保它们只能访问其被授权的资源。

7、开启BOARD_HAVE_DONGLE和BOARD_HAS_RK_4G_MODEM,路径与第6点一样

  如果编译时报android.hardware.radio.deprecated这个错误,那么就是BOARD_HAS_RK_4G_MODEM引起的错误。
  解决方法:

a\device\rockchip\common\manifest.xml<hal format="hidl"><name>android.hardware.radio</name><transport>hwbinder</transport><fqname>@1.1::IRadio/slot1</fqname><fqname>@1.1::IRadio/slot2</fqname><fqname>@1.2::ISap/slot1</fqname></hal>
-     <hal format="hidl">
-         <name>android.hardware.radio.deprecated</name>
-         <transport>hwbinder</transport>
-         <version>1.0</version>
-         <interface>
-             <name>IOemHook</name>
-             <instance>slot1</instance>
-         </interface>
-     </hal>
-     <kernel target-level="5"/></manifest>	a\device\rockchip\common\4g_modem\manifest.xml
<manifest version="1.0" type="device"><hal format="hidl"><name>android.hardware.radio</name><transport>hwbinder</transport><fqname>@1.1::IRadio/slot1</fqname><fqname>@1.1::IRadio/slot2</fqname><fqname>@1.2::ISap/slot1</fqname></hal><hal format="hidl"><name>android.hardware.radio.deprecated</name><transport>hwbinder</transport><version>1.0</version><interface><name>IOemHook</name><instance>slot1</instance></interface></hal><hal format="hidl">
-        <name>android.hardware.radio.config</name>
+        <name>android.hardware.radio</name><transport>hwbinder</transport><version>1.0</version><interface>
-            <name>IRadioConfig</name>
+            <name>IRadio</name>
-            <instance>default</instance>
+            <instance>slot1</instance></interface></hal>
</manifest>

  如果报的错误是FAILED: out/target/product/rk3568_r/obj/EXECUTABLES/usb_dongle_intermediates/Misc.o
  解决方法:

\external\usb_modeswitch\usb_dongle\Android.mk
- common_local_tidy_flags := -warnings-as-errors=clang-analyzer-security*,cert-*
+ #common_local_tidy_flags := -warnings-as-errors=clang-analyzer-security*,cert-*

8、无自适应功能的适配方法,也就是不会动态加载RIL库,而是写死的方法,如下

①将ril拷贝到对应的系统路径,创建adevice\rockchip\rk3288\rk3288_Android11\modify.mk文件,内容如下:

PRODUCT_PACKAGES += rild
PRODUCT_COPY_FILES += \device/rockchip/rk3288/rk3288_Android11/modify/xG_module/libquectel-ril/armeabi/libreference-ril-QUECTEL.so:vendor/lib/libreference-ril-QUECTEL.so \device/rockchip/rk3288/rk3288_Android11/modify/xG_module/libquectel-ril/armeabi/chat:system/bin/chat \device/rockchip/rk3288/rk3288_Android11/modify/xG_module/libquectel-ril/armeabi/ip-up:system/bin/ip-up \device/rockchip/rk3288/rk3288_Android11/modify/xG_module/libquectel-ril/armeabi/ip-down:system/bin/ip-down \device/rockchip/rk3288/rk3288_Android11/apns-conf.xml:system/etc/apns-conf.xml
然后a\device\rockchip\rk3288\device.mk文件下添加如下:
include $(LOCAL_PATH)/rk3288_Android11/modify.mk

②设置vendor.rild.libpath属性

a\device\rockchip\common\device.mk
ifeq ($(strip $(BOARD_HAS_RK_4G_MODEM)),true)
PRODUCT_PACKAGES += \CarrierDefaultApp \CarrierConfig \rild \
-   librk-ril \
+   libreference-ril-QUECTEL.so \dhcpcdPRODUCT_COPY_FILES += vendor/rockchip/common/phone/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xmlPRODUCT_PACKAGES += \android.hardware.radio@1.2-radio-service \android.hardware.radio.config@1.0-servicePRODUCT_PROPERTY_OVERRIDES += \ro.boot.noril=false \ro.telephony.default_network=9ifeq ($(strip $(TARGET_ARCH)), arm64)
PRODUCT_PROPERTY_OVERRIDES += \
-        vendor.rild.libpath=/vendor/lib64/librk-ril.so
+		 vendor.rild.libpath=/vendor/lib64/libreference-ril-QUECTEL.soPRODUCT_COPY_FILES += \$(LOCAL_PATH)/4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \$(LOCAL_PATH)/4g_modem/lib64/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/librk-ril.so
else
PRODUCT_PROPERTY_OVERRIDES += \
-		vendor.rild.libpath=/vendor/lib/librk-ril.so
+		vendor.rild.libpath=/vendor/lib/libreference-ril-QUECTEL.soPRODUCT_COPY_FILES += \$(LOCAL_PATH)/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \$(LOCAL_PATH)/4g_modem/lib32/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/librk-ril.soendif
endif

③设置rild.libpath属性

a\device\rockchip\rk3288\device.mk
PRODUCT_PROPERTY_OVERRIDES += \ro.ril.ecclist=112,911 \ro.opengles.version=196610 \wifi.interface=wlan0 \
+		ro.telephony.default_network=9 \
+		rild.libpath=/vendor/lib64/libreference-ril-QUECTEL.so \
+		rild.libargs=-d /dev/ttyUSB2 \ro.audio.monitorOrientation=true \debug.nfc.fw_download=false \debug.nfc.se=false \vendor.hwc.compose_policy=1 \sys.wallpaper.rgb565=0 \sf.power.control=2073600 \sys.rkadb.root=0 \ro.sf.fakerotation=false \ro.tether.denied=false \sys.resolution.changed=false \ro.default.size=100 \ro.product.usbfactory=rockchip_usb \wifi.supplicant_scan_interval=15 \ro.factory.tool=0 \ro.kernel.android.checkjni=0 \ro.build.shutdown_timeout=6 \persist.enable_task_snapshots=false \ro.vendor.frameratelock=true

④修改开启rild服务,加载libreference-ril-QUECTEL.so库文件

-	service ril-daemon /vendor/bin/hw/rild
+	service ril-daemon /vendor/bin/hw/rild -l /vendor/lib/libreference-ril-QUECTEL.sosocket rild stream 660 root radiosocket rild-debug stream 660 radio systemclass mainuser radiogroup radio cache inet misc audio log readproc wakelockcapabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

9、自适应功能的适配方法,也就是会动态加载RIL库,如下

参考博客链接👈

10、添加权限,在a\device\rockchip\common\ueventd.rockchip.rc文件下添加如下

#quectel port
/dev/ttyUSB*              0660   radio      radio
/dev/ttyACM*              0660   radio      radio
/dev/cdc-wdm*             0660   radio      radio
/dev/qcqmi*               0660   radio      radio
/dev/cdc-acm*             0660   radio      radio

11、查看库是否有和加载库是否正确及日志

①查看库是否存在:cd vendor/lib/
②查看加载库:getprop | grep rild
③应用日志:logcat -b radio

12、ping百度是否能上网

在这里插入图片描述

13、PATCH补丁文件和需要添加的文件

文件链接👈

相关文章:

RK3288 Android11 mini-pcie接口 4G模组EC200A适配(含自适应功能)

这里写目录标题 1、修改驱动内核配置①使能USBNET功能②使能 USB 串口 GSM、CDMA 驱动③使能 USB 的 CDC ACM模式④使能PPP功能 2、使用lsusb命令查看是否识别到usb接口的“EC200A”4G模组3、在drivers/usb/serial/option.c添加VID和PID信息①添加VID和PID定义②在option_ids 数…...

Windows安装Jenkins

JDK 11 以上 https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.20%2B8/OpenJDK11U-jdk_x64_windows_hotspot_11.0.20_8.msi https://www.jenkins.io/download/ 下载windows安装版本 授权用户administrator logon as services windows(server)安装…...

计算属性,侦听属性,方法区别及例子

计算属性、监听属性和方法都是Vue中的重要概念&#xff0c;但它们在功能和使用上有所不同&#xff1a; 计算属性&#xff1a;计算属性是基于依赖进行缓存的属性&#xff0c;可以根据其他数据动态计算得出。计算属性会根据依赖自动更新&#xff0c;但是只有在其所依赖的数据发生…...

Windows工业三防平板全功能NFC近距离感应一维/二维扫描

Windows系统工业三防平板电脑是一种在智慧工厂仓储物流、MES数采、车载设备、设备检测、自动化控制等领域广泛应用的先进设备。此外&#xff0c;它还在公共服务领域&#xff0c;如高速交通、物流运输、电力检测、公务执法、银行金融、船舶装备、户外勘测、建筑工程、汽车检测、…...

git远端协同开发、解决冲突、分支合并、gitlab使用、远程仓库回滚、为开源项目贡献代码、git工作流,git pull和git fetch,变基

协同开发 避免冲突 张三&#xff1a;改了 settings.py 第一行&#xff0c;提交了 李四&#xff1a;改了 settings.py 第二行&#xff0c;提交了 你也在改setting.py ,没有拉取代码&#xff0c;不知道他们提交了&#xff0c;动了第二行&#xff0c;但是跟李四代码不一样 你要…...

ims-go项目搭建

通过集成开发工具Goland创建项目 整合Gin框架&#xff0c;在终端中输入如下命令&#xff1a; go get -u github.com/gin-gonic/gin 整合Gorm&#xff0c;安装命令如下&#xff1a; go get -u gorm.io/gorm 安装sqlserver驱动&#xff0c;安装命令如下&#xff1a; go get -u…...

2022最新版-李宏毅机器学习深度学习课程-P26 Recurrent Neural Network

RNN 应用场景&#xff1a;填满信息 把每个单词表示成一个向量的方法&#xff1a;独热向量 还有其他方法&#xff0c;比如&#xff1a;Word hashing 单词哈希 输入&#xff1a;单词输出&#xff1a;该单词属于哪一类的概率分布 由于输入是文字序列&#xff0c;这就产生了一个问…...

【Qt控件之QButtonGroup】概述及使用

概述 QButtonGroup 类提供了一个容器来组织一组按钮部件。 QButtonGroup 提供了一个抽象容器&#xff0c;可以将按钮部件放置其中。它不提供此容器的可视表示&#xff08;请参见 QGroupBox&#xff0c;用于容器部件&#xff09;&#xff0c;而是管理组中每个按钮的状态。 一个…...

【开源分享】基于Html开发的房贷计算器,模仿新浪财经

房贷计算器是一种房贷计算的在线计算Web应用&#xff0c;按用户选择的贷款类型、贷款金额、期限、利率可计算得出每月月供参考、支付利息、还款总额这些信息。本文模仿新浪财经开发的房贷计算器。 作品预览 https://fangdai.gitapp.cn 源码地址 https://github.com/geeeeeee…...

ftp文件上传缓慢问题

问题描述 某环境下&#xff0c;通过vsftp上传文件缓慢。 问题分析 这个问题是由于服务器DNS导致&#xff0c;如果在内网机器中&#xff0c;配置了公网的DNS或者其他不能链接的DNS&#xff0c;会导致上传缓慢。 解决方案 目前有两种解决方式&#xff0c;任选其一即可&#…...

【周末闲谈】VR新视界,“眼”见未来

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 系列目录前言虚拟现实(VR)技术虚拟现实技术的原理虚拟现实技术发…...

CSRF和XSS是什么?

CSRF&#xff08;Cross-site request forgery&#xff09;&#xff1a;跨站请求伪造。 用户是网站A的注册用户&#xff0c;且登录进去&#xff0c;于是网站A就给用户下发cookie。 满足条件&#xff1a; &#xff08;1&#xff09;登录受信任网站A&#xff0c;并在本地生成Cook…...

【Machine Learning】01-Supervised learning

01-Supervised learning 1. 机器学习入门1.1 What is Machine Learning?1.2 Supervised learning1.3 Unsupervised learning 2. Supervised learning2.1 单元线性回归模型2.1.1 Linear Regression Model&#xff08;线性回归模型&#xff09;2.1.2 Cost Function&#xff08;代…...

《视觉 SLAM 十四讲》V2 第 8 讲 视觉里程计2 【如何根据图像 估计 相机运动】【光流 —> 直接法】

OpenCV关于 光流的教程 文章目录 第 8 讲 视觉里程计 28.2 光流8.3 实践&#xff1a; LK 光流 【Code】本讲 CMakeLists.txt 8.4 直接法8.5 实践&#xff1a; 双目的稀疏直接法 【Code】8.5.4 直接法的优缺点 习题 8√ 题1 光流方法题2题3题4题5 第 8 讲 视觉里程计 2 P205 …...

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念&#xff0c;方便大家上手学习掌握Unity DOTS开发。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; System是迭代计算与处理World中的…...

IDEA使用内置database数据库连接mysql报错:javax.net.ssl.SSLHandshakeException

参考一些博客的方式&#xff1a; 使用idea内置database连接数据库报错javax.net.ssl.SSLHandshakeException: No appropriate protocol_idea database ssl_你当像山的博客-CSDN博客 他们的方式是&#xff1a;在url后添加useSSLfalse 介绍另外一种方式&#xff1a; 点击datab…...

从Flink的Kafka消费者看算子联合列表状态的使用

背景 算子的联合列表状态是平时使用的比较少的一种状态&#xff0c;本文通过kafka的消费者实现来看一下怎么使用算子列表联合状态 算子联合列表状态 首先我们看一下算子联合列表状态的在进行故障恢复或者从某个保存点进行扩缩容启动应用时状态的恢复情况 算子联合列表状态主…...

CSS3 按钮

创建 CSS3 按钮可以通过组合样式属性和伪类来实现 <!DOCTYPE html> <html> <head><link rel"stylesheet" type"text/css" href"styles.css"> </head> <body><button class"basic-button">…...

STM32 BootLoader设置

编写bootloader程序&#xff1a; 直接复制下面代码到自己程序中。 typedef void (*iapfun)(void); //定义一个函数类型的参数. iapfun jump2app; //设置栈顶地址 //addr:栈顶地址 __asm void MSR_MSP(u32 addr) {MSR MSP, r0 //set Main Stack valueBX r14 }//跳转到…...

django REST framework-使用与不使用的区别?

首先&#xff0c;来回顾一下传统的基于模板引擎的 django 开发工作流&#xff1a; 绑定 URL 和视图函数。当用户访问某个 URL 时&#xff0c;调用绑定的视图函数进行处理。 编写视图函数的逻辑。视图中通常涉及数据库的操作。 在视图中渲染 HTML 模板&#xff0c;返回 HTTP 响应…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面

在开发鸿蒙应用时&#xff0c;你是否也曾为一个页面的布局反复调整&#xff1f;是否还在为查 API、写模板代码而浪费大量时间&#xff1f;今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie&#xff08;代码精灵&#xff09; &#xff0c;如何从 0 到 1 快速构建一个…...

SOC-ESP32S3部分:31-ESP-LCD控制器库

飞书文档https://x509p6c8to.feishu.cn/wiki/Syy3wsqHLiIiQJkC6PucEJ7Snib ESP 系列芯片可以支持市场上常见的 LCD&#xff08;如 SPI LCD、I2C LCD、并行 LCD (Intel 8080)、RGB/SRGB LCD、MIPI DSI LCD 等&#xff09;所需的各种时序。esp_lcd 控制器为上述各类 LCD 提供了一…...

# 从底层架构到应用实践:为何部分大模型在越狱攻击下失守?

从底层架构到应用实践&#xff1a;为何部分大模型在越狱攻击下失守&#xff1f; 引言 近期&#xff0c;我们对多个主流大语言模型&#xff08;LLM&#xff09;进行了安全性测试&#xff0c;使用了极具诱导性的越狱提示词&#xff0c;试图绕过其内容安全机制。测试结果显示&am…...

大模型模型部署和暴露接口

创建环境 激活案件 安装相关依赖 conda create -n fastApi python3.10 conda activate fastApi conda install -c conda-forge fastapi uvicorn transformers pytorch pip install safetensors sentencepiece protobuf 新建文件夹 mkdir App cd App touch main.py 复制代码…...

Deepseek/cherry studio中的Latex公式复制到word中

需要将Deepseek/cherry studio中公式复制到word中&#xff0c;但是deepseek输出Latex公式&#xff0c;比如以下Latex代码段&#xff0c;需要通过Mathtype翻译才能在word中编辑。 $$\begin{aligned}H_1(k1) & H_1(k) \frac{1}{A_1} \left( Q_1 u_1(k) Q_{i1} - Q_2 u_2(k…...

C++.OpenGL (7/64)摄像机(Camera)

摄像机(Camera) 摄像机系统核心组件 #mermaid-svg-lmysTXAyyzKytiOC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lmysTXAyyzKytiOC .error-icon{fill:#552222;}#mermaid-svg-lmysTXAyyzKytiOC .error-text{fi…...

什么是权威解析服务器?权威解析服务器哪些作用?

域名系统&#xff08;DNS&#xff09;是互联网的核心基础设施之一&#xff0c;它将易于记忆的域名转换为计算机能够识别的IP地址。DNS服务器在这一过程中扮演着至关重要的角色&#xff0c;它们可以分为以下几种类型: 根DNS服务器 根DNS服务器位于DNS层级结构的最顶端&#xf…...

Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab

Cilium动手实验室: 精通之旅---4.Cilium Gateway API - Lab 1. 环境准备2. API 网关--HTTP2.1 部署应用2.2 部署网关2.3 HTTP路径匹配2.4 HTTP头匹配 3. API网关--HTTPS3.1 创建TLS证书和私钥3.2 部署HTTPS网关3.3 HTTPS请求测试 4. API网关--TLS 路由4.1 部署应用4.2 部署网关…...

【芯片设计- RTL 数字逻辑设计入门 4.2 -- 组合逻辑赋值 + 时序逻辑状态保持】

文章目录 Overview原语句分析变量含义假设(根据命名推测)状态更新逻辑详解状态转移逻辑举个实际例子小结Overview 本文将详细介绍 verilog rtl 中 assign reg_halt_mode_nx = halt_taken | (reg_halt_mode & ~halt_return);的作用,以及这里为何要使用 reg_halt_mode,…...

Python训练第四十六天

DAY 46 通道注意力(SE注意力) 知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通…...