自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 Linux socket编程

domain用于指定协议族(PF)或地址族(AF),不过通常两者区别不大,选择其中一种使用即可。经常使用的参数类型有如下几种:type用于指定socket的类型,常见的类型如下:protocol用于指定协议,通常与第二个参数搭配使用,常见的如下:typetypeSOCK_DGRAMtypeSOCK_RAM※注:当protocol参数设置为 0 时,系统会根据domain(地址族)和type(套接字类型)参数自动选择一个合适的默认协议。

2025-02-28 09:39:09 688

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(八)

还记得前面QNX将收到的msg->name从“test”修改为“txdone”么,修改以后使用。函数来获取buffer,获取以后我们将msg结构体打印出来看看是不是我们想要的数据。虽然驱动我们创建了两个vq分别用来发送和收取,这里我们实际只是用其中一个来演示。,这里的结构与QNX驱动中定义的结构是一样的,保证他们之间可以正常解析数据。我们可以通过log来看看是不是按照我们设计的进行的数据收发。到此基本的数据收发就可以完成,虽然没有使用rx的回调函数。消息,然后就可以执行对应的处理从vq中拿到数据并解析。

2024-12-27 11:11:05 400

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(七)

完成find操作以后,可以将找到的vq分别放到我们的priv结构体中保存,tx_vq使用的就是vqs[0],rx_vq使用的就是vqs[1]。函数中,首先我们定义了两个virtqueue的name分别是“test_tx”和“test_rx”;为了测试,这里启动一个工作队列,然后持续发送数据到BE,接下来的数据收发我们详细讲解。所以当安卓驱动准备好后,QNX也会收到对应OK的消息,保证双方状态一致。没错,这里对应的就是QNX驱动中vio_vwrite函数中。这里没什么说的,首先申请驱动自己的结构体。

2024-12-27 11:10:26 57

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(六)

【代码】基于Qcom虚拟化平台vdev virtio的EF BE实现(六)

2024-12-27 11:09:18 58

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(五)

首先是设备地址:1c900000,这个地址与QNX我们定义的地址是一个,需要与之匹配。按照makefile,我们将编译出virtio_test.ko这一驱动模块。首先在Android.mk文件中仿照其他模块添加我们自己定义的模块。,也就是QNX配置的device id,这里注意需要与QNX匹配。接着是compatible属性,使用的是。,通常虚拟设备都是挂在mmio驱动下的。号中断(76 + 32 = 108)。修改kbuild将文件夹添加进去。将模块名称添加到dlkm文件中。,也就是QNX我们配置的。

2024-12-27 11:06:43 50

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(四)

其次是。

2024-12-27 11:05:24 70

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(三)

code代码比较多,单独放一章节,后续对这些代码进行讲解。

2024-12-27 11:04:27 57

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(二)

这里简单说一下,vdev后面加的就是你需要启动的二进制文件,对应的我们的驱动文件;loc后面填写使用的地址,与我们前面设备树配置的地址保持一致;intr后面填写使用的中断号,同样与设备树配置的一致;根据上面的配置我们的文件就可以正常启动加载了,另外如果命令没有包含intr等参数,会导致驱动无法正常加载,所以需要尽可能保持完整。在上面的路径中,包含很多vdev虚拟设备驱动,这里就包括了可能需要的虚拟regulator、虚拟i2c等。完成上面的配置内容以后,我们还需要通过配置文件让他能够正常启动。

2024-12-27 11:03:29 85

原创 基于Qcom虚拟化平台vdev virtio的EF BE实现(一)

基于Qcom虚拟化架构我们知道,QNX作为Host端,Android作为Geust端。因此在安卓侧使用某些资源时,而对应的资源在QNX侧控制,这就需要vdev来进行交互。这里以regulator模块作为例子简单讲解一下:如果是通常的Android系统,当某一个设备驱动控制电源时,就需要使用regulator驱动进行控制。但是当安卓作为虚拟机时,而regulator控制又在QNX侧,此时就像上图,需要使用驱动。与QNX的之间进行交互,实际操作由完成。

2024-12-27 11:00:42 676

原创 Qcom QNX系统下中断使用

为了能将gpio端子作为中断使用,需要先对选定端子号,对其进行中断配置,例如触发方式等。需要使用的接口函数以及流程如下:打开gpio设备文件使用fd对需要配置的端子进行中断设置gpio_number是需要配置的端子号,比如需要使用第100个端子,gpio_number即为100。在函数中,会根据gpio中断配置表找到对应端子的配置并获取下来,包括中断号之类的。表在中会被初始化,其中端子对应的中断号会以两种方式进行初始化:首先会通过函数,查找direct表。

2024-11-27 17:11:08 670

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(七)

前面整体流程大概过了一遍,这里做一个结构图和时序图总结吧,由于qnx库文件封装的缘故,时序图不一定准确,大概帮助理解即可。

2024-10-24 10:16:14 94

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(六)

前面说的都是android侧FE的处理,现在来看看BE端,也就是qnx侧。但是由于都是以库形式,不能分析代码,就以log来简单看看处理流程吧。

2024-10-24 10:12:52 100

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(五)

前面说的都是ethqos-thin驱动的基本功能实现,这篇就看看驱动中重要的emac_fe_ev_wq工作队列,emac_fe_ev_wq负责收取cmd通知,来判断当前的网卡状态,并基于不同的状态对驱动做出不同的处理。同时emac_ctrl_fe_virtio驱动负责与BE端通信,获取的cmd发送到emac_fe_ev_wq队列中处理。

2024-10-24 10:10:36 152

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(四)

probe函数完成了驱动的初始化流程,并且成功创建网络设备,网络设备就必然会有网络接口的注册,再来看看网络接口中打开网络设备时以及数据传输的接口实现。

2024-10-24 10:01:37 78

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(三)

前面看过了ethqos-thin的设备树,接下来看看驱动具体的实现内容。

2024-10-24 09:56:59 116

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(二)

前面提到了qnx侧的网卡驱动对应的设备是emac0,android侧通过virtio-net创建虚拟网络设备节点eth0,两者之间进行通信,接下来就从设备树来看看ethqos-thin驱动的设备信息。

2024-10-24 09:54:47 102

原创 基于Qcom A14虚拟化平台的qcom-ethqos-thin驱动的分析(一)

io-pkt就是qnx微内核的网络管理模块(network manager),这是一个kernel空间以外的进程,运行在app空间。同时它也支持TCP/IP(TCP、UDP、IPv4、IPv6)。你可以使用以下方式动态的加载驱动:当启动io-pkt时当io-pkt运行时io-sock就是qnx微内核的网络管理模块(network manager),这是一个kernel空间以外的进程,运行在app空间。同时它也支持TCP/IP(TCP、UDP、IPv4、IPv6)。

2024-10-23 17:54:22 886

原创 Linux电源管理STR以及STD详解

即指说系统处于低电源供应状态,在 windows or BIOS 中可设定萤幕讯号输出关闭、 硬碟停止运转进入待命状态、电源灯号处于闪烁状态。此时动一动滑鼠、按键盘任一键均可叫醒电脑。和 S1 几乎是一样。即是把 windows 现在存在记忆体中的所有资料保存不动,然后进入「假关机」。此时除了记忆体需要电源来保持资料以外,其它的设备、装置全部停止供电。也就是说,理论上可以把 CPU, PCI, AGP device 拿掉又插回去,电脑也可能正常完成开机及运作,只要不动到记忆体和电源的部份。

2024-10-18 15:21:27 1195

原创 基于Qcom QNX虚拟化平台的Android14与QNX间的Vlan通信配置

VLAN(Virtual Local Area Network),即虚拟局域网,他可以将物理的LAN在逻辑上划分为多个广播域的技术。VLAN内主机之间可以相互通信,VLAN与VLAN之间无法通信。当以太网中主机数量过多时,会导致性能下降等问题,此时可以将整个局域网划分为多个VLAN,从而降低维护成本。

2024-10-17 15:00:54 1305 1

原创 QNX系统下虚拟I2C

在①中的描述,只需要按照qnx侧配置使用即可;②的描述就是所谓的透传(passthrough),将硬件控制权从qnx透传到gvm侧,gvm按照普通的设备使用即可;③就需要使用VirtIO-i2c,gvm侧需要使用virtio设备和驱动,经过virtio最终由qnx侧的驱动来执行相应的控制。

2024-10-12 11:24:42 961

原创 Qcom底层WIFI驱动recovery复归详解(一)

CNSS除了提供基本的接口打包,芯片制御,还包含了复归子系统用于对硬件等部分进行复归。

2024-09-25 11:04:39 269

原创 Qcom底层WIFI驱动STR详解(一)

下面针对str的动作流程进行简要分析。

2024-09-24 18:21:34 396

原创 Qcom底层WIFI驱动启动详解(二)

前面说完了cnss驱动的基本流程处理,这里大概看一下qcacld驱动的启动处理。

2024-09-24 17:32:34 587

原创 Qcom底层WIFI驱动启动详解(一)

前面简单介绍了qcom wifi驱动的组成,今天详细讲讲驱动的初始化以及启动流程。

2024-09-24 16:18:16 616

原创 Qcom底层WIFI驱动简介(一)

先从串口看一下编译出来的模块,在...通过lsmod不难看出,编译出来的文件主要是cnss2模块以及qca不同型号对应的模块,实际会根据具体芯片加载具体的qca驱动。比如qca6490就是硬件对应使用的驱动,那么cnss2后面信息是记载的used by内容,也就是cnss2是被qca6490所使用的。因此从上面信息可以看出来cnss应该是qca驱动的一个子模块,或者子系统。为了更好的理解,再来看看官方的解释:CNSS2为qcom的wlan驱动(qca)的一个子系统。

2024-09-24 14:18:29 1076

原创 Android14 Qcom 从Framework到Driver带你连接WIFI(三)

前面讲到了从L2状态转到了L3状态,进入网络层相关处理,继续看看后续是如何启动DHCP的。

2024-09-20 16:02:35 315

原创 Android14 Qcom 从Framework到Driver带你连接WIFI(二)

上文讲到了连接过程中mac地址的配置,今天继续往下看后续的连接动作处理。

2024-09-20 15:33:03 377

原创 Android14 Qcom 从Framework到Driver带你连接WIFI(一)

前面已经讲完了WIFI打开的流程,那么通过UI这时候是可以选择需要连接的网络进行连接。从这里开始我们看连接的流程。

2024-09-20 13:38:15 401

原创 Android14 Qcom 从Framework到Driver带你打开WIFI(四)

上一章讲到了底层驱动是如何打开网卡设备的,当我们通过UI界面打开WIFI以后,可以看到界面会自动扫描周围的设备,并准备后续的连接动作了。接下来还得回到framework层继续分析,在打开设备以后是如何进行扫描的。

2024-09-19 18:22:25 222

原创 Android14 Qcom 从Framework到Driver带你打开WIFI(三)

上一章讲到了如何通过上层逐步调用到底层ndo_open接口的,这章就以驱动视角分析ndo_open具体做了什么吧。

2024-09-19 16:57:56 401

原创 Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

2024-09-19 15:46:33 377

原创 Android14 Qcom 从Framework到Driver带你打开WIFI(一)

当通过安卓UI界面打开WIFI时,我们直观的能看到WIFI被打开并且开始了扫描。这其中当然包含了一些我们看不到的流程,包括加载驱动、打开设备、扫描等等动作。而这些动作也离不开底层驱动的处理,那么我们就以底层的视角去看看上层是如何一步步最终调用到底层驱动的吧。

2024-09-19 13:38:58 1674

原创 Qcom GKI修改添加模块

通用内核映像 (GKI), 产品内核(也称为设备内核或 OEM 内核)是指您的设备上搭载的内核。在 GKI 之前,产品内核衍生自一系列上游内核变更。下图显示了内核补充功能如何生成产品内核(OEM/设备内核):①就是内核发布的版本②在谷歌发布中会取入对应的版本,并基于谷歌添加自己的修改后发布③就是可以理解为一些厂商,比如qcom,qcom基于谷歌的安卓按照自己的平台添加自己的东西进行定制化④就是制造商,比如一些车厂或手机购买了qcom平台的支持,再加入自己的定制内容。

2024-08-06 17:35:02 2297

原创 FreeRtos消息队列实现

#define CXPI_QUEUE_TASK_STK_SIZE 256#define MSG_QUEUE_MAXSIZE 50#define BUFF_HEAD 0#define BUFF_LEN 15static uint8 TxQueue_a[MSG_QUEUE_MAXSIZE][BUFF_LEN];static uint8 TxQueueFront;static uint8 TxQueueRear;static uint8 RxQueue_a[MSG_QUEUE_MAX

2021-12-02 11:11:52 321

原创 蓝牙协议

http://www.wowotech.net/bluetooth/bt_overview.htmlhttp://www.wowotech.net/bluetooth/bt_protocol_arch.htmlhttp://www.wowotech.net/bluetooth/ble_stack_overview.html转发出处。蜗窝科技,www.wowotech.net。

2021-05-06 11:39:06 192

原创 BLE蓝牙协议

https://www.cnblogs.com/iini/p/8969828.html

2021-05-06 10:38:13 180

转载 MHI

https://www.linaro.org/blog/mhi-bus-support-gets-added-to-the-linux-kernel/

2021-02-26 17:38:27 434

原创 字符设备驱动实现

#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/uaccess.h>#include <linux/cdev.h>#include <linux/device.h>#include <linux/io.h>#define MA

2021-02-20 14:30:05 203 1

转载 mpu6050(IIC + cdev)

https://www.cnblogs.com/linfeng-learning/p/9532338.html

2021-02-08 17:55:01 150

转载 Linux字符设备驱动实现

https://www.cnblogs.com/yueshangzuo/p/8078687.html

2021-01-22 10:08:34 120

scrcpy-win64-v2.1.1-allcodec工具

修改了工具codec输出内容,可以输出完整的codec 使用scrcpy --list-encoder命令即可获取完整的encoder和decoder

2023-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除