NIDS拨号
4G上网卡一般为双对外通讯口,一个是串口、一个是USB。
但是基于串口的常用波特率为115200,速度过于底下,所以大多使用USB。
1)一般来说常用ppp拨号方式,ppp拨号方式分为应用层pppd与驱动层pppk。
驱动层pppk通讯主要接口为ppp_async_send与tty->ldisc->receive_buf,并调用tty驱动,而tty驱动转为USB则需要针对GSM/CDMA的usb_wwan、option驱动,而usb_wwan驱动又依赖于usb-serial基础转换。此时驱动已经将通讯转换为USB。
应用层pppd主要以option脚本、chat脚本、ppp应用,进行发送AT命令,拨号上网。
2)当不使用ppp拨号方式,而是使用NDIS拨号,那么ppp软件没有了,就需要替代他的东西,这时候,需要三样东西:Rmnet驱动 + dhclient + minicom/echo命令。当然Rmnet驱动也是USB总线驱动。而由于发送AT命令是以串口发送,所以依旧需要usb-serial、usb_wwan、option驱动进行串口USB转换。
值此特别声明:USB设备驱动架构:分为HID、CDC、mass storage,而Rmnet是非标准的Rmnet驱动。NDIS是windows提出的网络驱动接口规范,linux下并没有。
以下就是USB总线方式的Rmnet驱动流程:
- 注册驱动 :module_init(NDIS_Init);
- 创建类 :Rmnet_class= class_create( THIS_MODULE, "Rmnet_class" );
- 注册USB设备:usb_register(&usb_drv_Rmnet);
- 定义 :static struct usb_driver usb_drv_Rmnet{...};
- 探针函数
int Rmnet_Probe( struct usb_interface * usb_interf, const struct usb_device_id * usb_devid)
- 获取端点信息
- cur_altsetting->desc.bInterfaceNumber
- cur_altsetting->desc.bNumEndpoints
- cur_altsetting->endpoint
- 获取端点信息
未完待续....
好记性不如烂笔头
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)