自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 cortext-A7支持optee问题

通过上面的分析可以说明是IRQ向量引发的data abort,而且data abort后执行的地址是0xFFFF000C,说明optee里初始化的VBAR没有起作用,导致异常向量表在0xFFFF0000处,这里是我们的romcode,FPGA验证阶段的romcode没有设置IRQ的异常向量,导致IRQ发生后程序跑飞出现data abort。然后检查出错后的寄存器可以发现IRQ的R14寄存器正是"出错前的地址+8",所以说明打开IRQ和FIQ后立马进入了IRQ然后才发生的data abort。

2025-05-16 16:08:42 6

原创 linux pcie【5】- ep控制器驱动介绍

addr_space空间主要为outbound使用,717-738行, ep->phys_base保存addr_space的物理地址,其实就是outbound访问的物理基地址,ep->ob_window_map保存outbound访问的虚拟地,ep->outbound_addr用来保存outbound访问实际分配的物理地址。cpu 访问pci上的地址空间时,使用的是ob_window_map虚拟地址,然后转换为outbound_addr物理地址,最后通过outbound寄存器转换为pci总线地址。

2025-05-09 17:36:22 360

原创 linux pcie【4】- msi irq介绍

pp->msi_domain的parent为pp->irq_domain,对应的irq_chip为dw_pcie_msi_irq_chip,但是dw_pcie_msi_irq_chip并没有定义irq_write_msi_msg,这个会在pci_msi_domain_update_chip_ops里被赋值。我们先看一下pp->irq_domain,它的irq_domain_ops为dw_pcie_msi_domain_ops,对应的irq_chip为dw_pci_msi_bottom_irq_chip。

2025-04-29 19:55:06 486 1

原创 linux pcie【3】- device驱动介绍

pci_device_id的定义如下,控制器驱动扫描设备时会读取出设备配置空间里的Vendor ID, Device ID, Subsystem vendor ID, Subsystem device ID 等信息用来和pci_device_id里的对应字段匹配,配置成功后绑定相应的驱动。pci设备驱动使用pci_driver表示一个pci设备驱动。pci_device_id用来匹配一个pci_dev,probe和remove为驱动绑定和解绑的回调。下面介绍一些常用的api接口。

2025-04-24 19:30:47 327

原创 linux pcie【2】- rc控制器驱动介绍

接着来先看一下pci_host_bridge里的 child_ops,这里主要看一下dw_pcie_other_conf_map_bus,这个函数。pci_scan_device里会先读取vendor_id, 然后是调用pci_alloc_dev申请pci_dev设备,最后调用pci_setup_device配置设备。pci_register_host_bridge用来注册host bridge, pci_scan_child_bus用来扫描添加host bridge下的所有bus上的设备。

2025-04-22 18:23:14 1064

原创 linux pcie 【1】- 控制器介绍

主要有两种形式, 一种是IC集成的时候带AXI bridge,一种是不带AXI bridge(Native PCIe controller),一般arm soc集成的时候会配置成带AXI bridge这种形式,这样就就不用再处理控制器内部自定义的总线。本文主要介绍一下新思的PCIE控制器。首先看一下硬件控制器的框图。

2025-04-07 14:38:59 539

原创 Linux usb【4】- gadget configfs介绍

usb_add_config_only主要就是将config_usb_cfg->usb_configuration 结构挂到gadget_info->usb_composite_dev->configs链表上,同时将config_usb_cfg->usb_configuration->usb_composite_dev赋值为gadget_info->usb_composite_dev,并将这个配置描述符里的接口描述符清0。有了这个usb_ep结构,uac2驱动就可以使用它进行数据收发了。

2025-01-22 17:26:20 1617

原创 Linux usb【3】- gadget驱动介绍

在dwc3_gadget_init中主要就是调用dwc3_gadget_init_endpoints初始化ep, 并且申请了usb_gadget数据结构,并初始化里面的usb_gadget_ops回调函数, 然后调用usb_add_gadget。usb device设备对应的驱动是usb_gadget_driver ,这个驱动是在usb_gadget_probe_driver里面根据控制器名字绑定的,usb_gadget_probe_driver何时调用我们会在随后的文章中介绍。

2025-01-20 18:05:23 733

原创 Linux usb【2】- hub 驱动介绍

然后调用kick_hub_wq,用来处理刚上电时hub的端口状态。hub_probe里主要就是分配了一个usb_hub结构,并且注册了一个events工作队列和一个rq_urb_retry定时器,events工作队列主要用来出来hub的一些插拔事件,rq_urb_retry用来向hub发送hub->urb失败后通过定时器回调重新发送。再看下hub_irq,它除了调用kick_hub_wq,还会调用hub_resubmit_irq_urb,再次发送hub->urb用来轮询hub状态。

2025-01-03 17:25:02 806

原创 Linux usb【1】- host驱动介绍

本文基于新思的dwc3 usb控制器,介绍usb的host驱动,kernel版本为5.15

2024-12-25 19:03:11 270

原创 armv7支持optee

本文主要介绍如何在armv7 arch的cpu上支持optee

2024-12-13 19:19:18 457

原创 zephyr介绍

这样的线程成为了当前线程后,它可以在任何时刻被协作式线程或者优先级更高(或相等)的抢占式线程替代。同一个内存片上面的所有内存块的尺寸是固定(相同)的,这样做的好处是可以高效地分配和释放,避免了内存碎片问题。基于单链表实现的异步传输。消息队列(message queue) 是一个内核对象,它实现了一个简单的消息队列,允许线程和 ISR 异步地发送和接收大小固定的数据项。用户之间的memory是隔离的, 加到同一个memory domain的线程才可以共享同一domain的memory partition。

2024-11-27 15:16:30 127

原创 linux DMA框架【3】-DMA map操作

当我们希望通过DMA访问DDR时,就要考虑两个问题,一就是DMA访问DDR的地址是什么,还有就是DMA访问的这块DDR空间CPU也会访问时,如何做缓存一致性。linux kernel抽象出dma map操作就是用来解决这两个问题的。为了提高性能cpu或者某些高速设备会使用cache,由于会存在cpu和设备访问同一个DDR空间的可能,这就会引入cache一致性问题,所以kernel使用dma map操作来解决这个问题,屏蔽底层的差异。

2024-11-18 17:14:12 1598

原创 linux crypto框架

crypto_alg,定义了一个crypto所有支持算法的基类, 所有算法结构除了定义自己特殊的一些成员,都会包含crypto_alg这个结构, alg其实就是对应的具体算法的现,它会对应到cipher engine内的一个算法实体,这个实体驱动就是通过实现alg里的回调来实现的。cypto_queue的list就用用来挂载所有的request的,如果所有的requet的数量大于max_qlen, 新提交的request会从第一个开始,被backlog记录下来,并返回一个-EBUSY错误。

2024-11-15 17:02:04 1351

原创 linux dma框架【2】-peripheral和dma request id的绑定

client申请channel时直接使用dma_request_channel来申请一个channel, 它在参数里需要一个filter回调来帮助选择一个合适的channel,然后通过dmaengine_slave_config配置这个channel时,将dma_slave_config里的slave_id成员设置为对应的request id,这当然需要dma控制器驱动的支持。of_dma_controller_register就是用来注册of_dma结构的,它被挂到of_dma_list全局链表里。

2024-11-04 18:46:54 617 2

原创 linux dma框架【1】-硬件控制器介绍

基于新思控制器讲解linux的dma框架

2024-11-04 14:56:46 389

原创 arm的barrier指令介绍

本问主要介绍arm barrier指令出现的背景以及都有哪些barrier指令,它们如何使用。

2024-11-01 18:42:05 587

原创 arm处理器的shareable domain介绍

本文主要介绍arm shareble domain的概念,包括这个概念出现的初衷和应用。

2024-11-01 16:44:11 296

汇编语言程序设计 基于ARM体系结构下载

汇编语言程序设计 基于ARM体系结构下载

2015-03-06

空空如也

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

TA关注的人

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