自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 xhci_event_ring_init 初始化& U盘数据传输

hcd 传输数据给storage 驱动。设置complete 回调函数。

2024-06-11 17:48:24 520

原创 USB HOST DWC3 初始化

如果dr_mode为device,则初始化gadget。如果dr_mode为host,需要初始化xHCI驱动。在dwc3_host_init函数的最后调用platform_device_add(xhci)添加platform device(xhci-hcd),用于匹配xHCI driver(xHCI driver为platform driver),参照第3节。

2024-06-04 19:20:47 1386

原创 dwc3 DR_MODE 处理初始化 OTG gadget

>usb_add_function //配置 usb_function config 将function 添加到config->function上,->usb_get_function //调用usb_function_register注册的alloc_func接口,获取usb_function。将usb_composite_driver 的gadge_driver->pending 添加到gadget_driver_pending_list。set vbus 为false。

2024-05-29 14:32:28 1200

原创 usb 的event 和 io 信息的enqueue & deuqueue

dpdk在ip分片的实现中,采用了一种称作零拷贝的技术。而这种实现方式的底层,正是由scatter-gather DMA支撑的。dpdk的分片包采用了链式管理,同一个数据包的数据,分散存储在不连续的块中(mbuf结构)。传统的block DMA 一次只能传输物理上连续的一个块的数据, 完成传输后发起中断。而scatter-gather DMA允许一次传输多个物理上不连续的块,完成传输后只发起一次中断。这样做的好处是直观的,大大减少了中断的次数,提高了数据传输的效率。

2024-05-24 11:25:07 875

原创 usb enqueue dequeue

该函数会根据DMA缓冲区的使用形式做不同的处理,若DMA支持Scatter-gather,则调用dwc3_prepare_one_trb_sg函数,否则调用dwc3_prepare_one_trb_linear函数,最终都是通过dwc3_prepare_one_trb将TRB和request绑定。端点是否忙碌通过DWC3_EP_BUSY标志判断。usb_ep_queue向非端点0提交USB请求的过程如下图所示,最终通过__dwc3_gadget_ep_queue函数提交。

2024-05-22 16:28:03 1029

转载 pci 总线注册& pcie 设备枚举

这个ops 一般实在pci_mcfg_match_quirks 中根据bios传递过来的mcfg_oem_id/mcfg_oem_table_id/mcfg_oem_revision 来决定。1. 设备的扫描从pci_scan_root_bus_bridge开始,首先需要先向系统注册一个host bridge,在注册的过程中需要创建一个root bus,也就是bus 0,在pci_register_host_bridge函数中,主要是一系列的初始化和注册工作,此外还为总线分配资源,包括地址空间等;

2024-05-09 19:14:17 183

转载 VirtIO实现原理——virtblk设备初始化

传统磁盘因其工作原理随机访问比顺序访问性能低很多,内核块设备IO系统设计之初针对这种情况的主要优化手段是缓存用户态IO请求并尽可能合并,保证IO请求顺序访问磁盘。在实现时设计单队列存储用户态对块设备的IO请求,一把锁保护该队列上的IO请求数据结构。传统磁盘IO性能瓶颈在于硬件,跨分区访问,随机访问的速度远远没法和磁盘软件栈的处理速度匹配。

2024-05-08 10:51:18 402

原创 NVME Doorbell 寄存器& 数据请求时doorbell 处理

3.NVMe寄存器配置3.1 寄存器定义NVMe寄存器主要分为两部分,一部分定义了Controller整体属性,一部分用来存放每组队列的头尾DB寄存器。CAP——控制器能力,定义了内存页大小的最大最小值、支持的I/O指令集、DB寄存器步长、等待时间界限、仲裁机制、队列是否物理上连续、队列大小;VS——版本号,定义了控制器实现NVMe协议的版本号;INTMS——中断掩码,每个bit对应一个中断向量,使用MSI-X中断时,此寄存器无效;

2024-05-07 21:34:10 772

转载 NVME 初始化驱动分析&NVMe SQ/CQ/DB

SSD在取指的时候,是偷偷进行的,Host对此毫不知情。对一个CQ来说,刚好相反,生产者是SSD,因为它往CQ的Tail写入命令完成信息,消费者则是Host,它从CQ的Head取出命令完成信息。之后,nvmeq->irqname表示的是注册中断时的名字,从nvme%dq%d可以看到,就是最后生成的nvme0q0和nvme0q1,一个是给admin queue的,一个是给io queue的。SQ与CQ的关系,可以是一对一的关系,也可以是多对一的关系,但不管怎样,他们是成对的:有因就有果,有SQ就必然有CQ。

2024-05-07 18:05:00 177

转载 设备穿透之IOMMU分组

iommu_map会调用domain->ops->map即调用的struct iommu_ops arm_smmu_ops中定义的.map函数,即arm_smmu_map。arm下调用的就是arm_smmu_device_group,然后根据设备是否是PCI,分别调用generic_device_group或pci_device_group。如在intel下这里的add_device调动的就是intel_iommu_add_device,在arm下调用的就是arm_smmu_add_device。

2024-04-09 18:24:43 632

原创 Ais client LA8295 camx &KMD enqueue & dequeue

初始化mapping_info的值,将mapping_info 添加到。获取dma-buf,通过dma-buf 获取对应设备的sg物理地址。

2024-04-07 11:13:17 1127

转载 高通camera camx & kmd驱动架构

参考文档:第1讲 Camera KMD ISP子系统课程介绍|极客笔记CPAS(Camera Peripherals and Support)CDM(Camera Data Mover)TFE(Thin Front End)IFE(Image Front End)OPE(Offline Processing Engine)BPS(Bayer Processing Segment)SFE(Sensor Front End)LRME(Low Resolution Motion Estimation)CSID(C

2024-04-07 10:33:18 957

转载 ION to SMMU

ops->map_sg()回调函数指向iommu_dma_map_sg()函数,ops在drivers/iommu/dma-iommu.c文件中初始化为iommu_dma_ops;iommu_domain->ops指向&arm_smmu_ops,初始化流程为: arm_smmu_add_device ----> iommu_group_get_for_dev ----> __iommu_domain_alloc ----> domain->ops = bus->iommu_ops。在ion.c中初始化。

2024-03-08 15:26:14 137

原创 Autochip rtos videoin enqueue&dequeue

初始化mipi 获取分辨率分配buff。初始创建mipi 初始化线程。

2024-02-22 20:42:07 639

原创 autochip RVC

发送RVC_IPC_KEY_ARM2_NOTIFY给arm1 ap 侧。dtsi 中配置的gpio 用于触发RVC。触发倒车eBCStartEvent。

2024-02-04 14:56:36 486

原创 autochip videoin 驱动

/分配流式DMA空间地址 p_dma_buf->dma_address p_dma_buf->y_virt。分配流式DMA空间地址 p_dma_buf->dma_address p_dma_buf->y_virt。调用mipi_buffer_done_handler将buf_info 插入到vis_list_buf。调用mipi_buffer_request从vis_list_buf 获取 buf_info。将buf 插入到vis_output_hal[ch_id].vis_list_buf。

2024-01-18 18:01:40 931

原创 8051 autochip camera 代码分析

根据VideoinDevice channel port配置DevStaticInfo 将info.devNameStr 与/dev/videox 绑定。根据获取驱动的图像的format info.devConfigInfo.input_fmt配置camera的分辨率。解析atc_camera_config.xml camera 的mipi channel StreamNum。info.devSrcFmtMZIdx 与metazone的format flag绑定。初始化camera 的分辨率和帧率。

2023-12-29 18:26:54 447

转载 V4L2框架解析

在操作之前,还有一个准备工作需要做,那就是需要找到哪些是我们所需要的设备,而它的设备节点是什么,此时便可以通过打开media设备节点,并且通过ioctl注入MEDIA_IOC_ENUM_ENTITIES参数来获取v4l2_device下的video设备节点,该操作会调用到内核中的media_device_ioctl方法,而之后根据传入的命令,进而调用到media_device_enum_entities方法来枚举所有的设备。

2023-12-22 17:22:06 194

转载 virtio over MMIO

采用PCI总线实现的好处首先是通用,其次可以具备PCI设备的很多优势,如热插拔,最后如果我们使用物理设备实现virtio也是可以采PCI总线的,换句话说虚拟机内部感知不到这个virtio设备是一个虚拟设备还是一个物理设备。换句话说,virtio协议可以基于多种不同的总线协议来实现。虚拟化场景中,主要采用PCI总线协议和MMIO总线协议:采用PCI总线协议的virtio设备叫virtio-pci设备,它可以支持virtio设备的热插拔特性(基于PCI总线的设备热插拔机制),并可应用于真实物理外设;

2023-12-21 16:03:44 343

原创 hab_virtio hypervisor 虚拟化

获取数据给LA 进行处理完成42 {4748 while (!p->stop) {//等到msg_list不为空 表示qnx 有消息发送到LA侧51!5864 //调用hab_msg_recv接收消息将msg 挂到rx_list75 }7679 }8082 }86 }

2023-12-20 20:57:35 1590

原创 Qnx wfd_be & wfd_fe Android 通讯

在android 侧和 qnx 侧都指定mmid 使用创建通讯channel使用user_os_utils_send_recv完成消息的发送和接收qnx channel_map配置linux 中的配置virtio_devicehab 中配置的 mmid信息。

2023-12-20 14:36:44 1269

原创 Hypervisor Display架构

7,根据数据包中的命令类型调用不同的openwfd接口,需要注意的是,这里的接口是做了一层转换的,举个例子wfdEnumerateDevices_Host,这个接口会进行转换之后真正调用wfdEnumerateDevices函数。4,libdrm库调用open/ioctl等函数会经过lib_drm_fe库的转接,当然lib_drm_fe会做很多其他适配的工作。5,lib_drm_fe会调用内核HGSL驱动中的hab通信接口与QNX侧的wfd_be服务进行通信。

2023-12-19 16:33:18 1628

原创 HQX System Performance Troubleshooting Overview

【代码】HQX System Performance Troubleshooting Overview。

2023-12-19 16:19:39 461

原创 hypervisor display显卡节点card0生成过程

3,驱动加载时,msm-cfg模块会先加载,然后带起msm-hyp-legacy模块,本质上他们是一个模块,目的是创建android系统需要的drm设备card0 和renderD128,驱动实现中,这两个节点只提供非常有限的文件操作功能,比如open/close,ioctl则几乎不实现。1,前面提到的需要分析的代码中,其实只有红框部分代码有用(msm-cfg&msm-hyp-legacy),绿框中的代码在内核驱动加载的时候只会运行register,而根本不会执行probe函数。

2023-12-18 20:38:44 813

原创 qnx str-ctl

suspend resume 流程debug 节点。

2023-12-11 20:07:02 716 4

原创 HQX Customization Guide

Filepp sdm-host_la.dts target/filesets/dtsi/8540.dtsi 预处理生成host.dts dtc 编译生成host.dtb。最后还会反编译生成apps/qnx_ap/target/hypervisor/host/fdt_config/dtb/out/merged_host.dts。load linux-la.img 加载dtb。在vmm_service中进行启动 qvm。qnx 启动qvm cmdline 配置。方便确认配置信息是否正确生成。

2023-12-05 20:09:05 665

原创 qnx hypervisor load qvm

/解析dts 获取node qcom_gvms参考博客:https://blog.csdn.net/liaochaoyun/article/details/127427719。

2023-12-05 19:59:13 869

原创 Qnx boot workflow

使用apps/qnx_ap/target/hypervisor/host/startupmgr/src/script.c。apps/qnx_ap/target/hypervisor/host/startupmgr/8540_la 目录不存在。create_variant_images.sh log输出。startupmgr 调用时机。编译后生成的startup脚本。

2023-12-05 19:41:24 1605

转载 Android Codec2框架分析

转载:Codec2.0在Android12需要进行对接,本文以AOSP源码分析,简单分析其运行逻辑,具体代码可参考进行查阅。Codec2的Android架构可如下图所示:其中Framework层要使用Codec2可通过MediaCodec或者MediaPlayer(使用NuPlayer),Omx在Android12后已弃用,Codec层可分为Android原生的软件编解码和硬件编解码,本文只涉及Android原生代码。

2023-09-19 11:11:36 3136 3

原创 SA8650 camx pipeline node xml 配置信息

调用各类平台的cdk_qcx/oem/qcom/chiusecase/(platform)/chxusecaseselector.cpp。DefaultMatchingUsecaseSelection根据pStreamConfig的分辨率 、格式 operation_mode选择对应支持的usecase。在UsecaseAuto::Initialize 解析UsecaseAuto_pipelines是初始化获取的。2)、初始化pPipeline->m_pPipelineName = pName;

2023-09-09 14:46:46 1877 1

原创 SA8650 camera UsecaseId UsecaseAuto

4)、QHDR(Quad HDR,四像素HDR)2)、Staggered HDR 行交织 HD。解析ChiNode 中的node info 信息。1)、采用三曝光实现实时HDR预览。3)、MFHDR 多帧 HDR。

2023-09-09 10:46:46 928

原创 camx camera initial

qnx 平台中的camera hal 接口。

2023-09-08 21:08:05 511

原创 Camera 信号波形状态及同步方式

在这种方式下,主平台连接解串器(Deserializer)和串行器(Serializer)是不可行的。只能将主平台直接连接四颗 Sensor ,选择一个 Sensor 作为主 Sensor (master)产生帧同步信号 (FrameSync)传递给剩下的三颗从 Sensor (slave),此时主从两种 Sensor 的配置不同。解串器产生帧同步信号 (FrameSync)传递给串行器,再传递给 Sensor,此时四颗 Sensor 的配置均为 slave 模式。方式一:解串器发出同步信号。

2023-09-08 16:44:18 1146

原创 SM8650 qcxserver.c STRM_Initialize

/初始化SensorLibDeviceConfig_t中解串器GPIO的配置信息。//GPTP_ENABLE_KEY未进行配置不会初始化gptpInit。//获取xml中的camera 对应的解串器的i2c num配置。//获取GPTP_ENABLE_KEY的value。//配置解串器的index rang 0-3。//匹配解串器型号配置 解串器地址mode。//配置解串器numdevices id。//调用解串器open函数接口进行初始化。//配置devIdx解串器信息。

2023-08-08 22:26:21 1048 2

原创 SA8650 camera messagedispatcher

通过senderIpcHndl发送pClientCtxt->senderQ.hQueue 的msg 信息。初始化cmdthread。

2023-08-08 21:57:49 381

原创 SA8450 camera 源码分析

/创建IEF event pCtxt->hEventQueue 事件队列和中断队列pCtxt->hISTQueue。注册中断回调函数VFEProcessIST CSIDProcessIST。创建四个队列进行图像数据的数据获取。

2023-08-08 21:23:16 376

原创 MediaCodec创建对应解码器

通过JNI调用到MediaCodec.cpp。

2023-08-08 20:37:56 306

原创 MediaCodec创建对应解码器

转载:传送门通过JNI调用到MediaCodec.cpp。

2023-08-08 20:35:04 600

原创 偷懒mark高质量博客

愉快周末摸鱼mark

2022-10-22 15:48:35 451 1

原创 ret2shellcode 的泄露puts@got表

现在rip在main+4处没执行puts,执行puts 后可以看到puts_got=> 0X601018里保存的是0X7FFDAA4E5430,可以使用ni si 进行调试看是否前后值有变化。手动设置栈上的值 发现 pop_rdi_ret设置的值 变换为0x4006f3 =》0x7fff004006f3(原因不明)发现read@got.pltb保存了read函数的blic中的地址。call read—> read的plt表 —>read的got表。jmp到的其实这是plt表对应函数的got表。

2022-10-08 23:25:14 1149

空空如也

空空如也

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

TA关注的人

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