
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
Normal memory有三种,常用的是MT_NORMAL和MT_NORMAL_NC,MT_NORMAL内存属性读写都有Cache,MT_NORMAL_NC内存属性读写直接访问内存,不经过Cache。使用dma_alloc_coherent分配内存的内存属性在X86和RISC-V架构上为pgprot_noncached,即X86上对应内存属性_PAGE_CACHE_MODE_UC_MINUS,R

Linux内核中USB设备信息及拓扑结构可以从/sys/kernel/debug/usb/devices和/sys/bus/usb/devices中获取,下面介绍这些信息如何解读。

USB Hub提供了连接USB主机和USB设备的电气接口。USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。良好的扩展性电源管理探测设备连接和断开连接总线错误探测和修复支持USB1.0、USB1.1、USB2.0、USB3

ftrace追踪USB设备驱动工作过程
1.概述在Linux内核开发中,我们会经常遇到访问空指针导致内核Oops或panic。遇到这种问题,需要先定位出是哪一个函数、哪一个变量导致的异常。通常情况下,Linux内核会打印出异常时的栈、模块、CPU寄存器等信息,但某些情况下,栈被破环,只能输出寄存器信息(U-Boot发生异常时只会输出寄存器信息),那我们只能根据寄存器信息还原出发生异常时的现场。2,实例如下图所示,内核明确的出了异常原因-
1.概述在usb gadget configfs引入到内核之前,内核都使用硬编码的方式实现复合设备,无法在用户空间动态修改和绑定不同的function驱动,若要修改,则需要修改内核代码,重新编码,非常不方便。目前这部分代码在被放到drivers/usb/gadget/legacy/目录下。被编译成内核模块时,名称以g开头,如音频设备g_audio.ko、串口设备g_serial.ko、CDC设备及
1.IS_ERR_VALUELinux内核中,最大错误码的值为MAX_ERRNO,错误码为负数,负数以补码的形式存储。Arm32位系统错误码的补码范围为0xFFFFF000 - 0xFFFFFFFF。Arm64系统错误码的补码范围为0xFFFFFFFFFFFFF000- 0xFFFFFFFFFFFFFFFF。Arm32位系统Linux内核的虚拟地址范围:0xC0000000 - 0xFFFFFFF
1.概述早期的CPU中断数量较少,中断系统简单,Linux内核可以将硬件中断号直接映射为软件中断号。但随着CPU支持的中断数量越来越多,中断系统也被设计的越来越复杂,一个CPU内部可能包含多个中断控制器,某些中断控制器还存在级联的可能。因此,Linux内核引入了虚拟中断号的概念,使用irq_domain进行管理,支持多个中断控制器及中断控制器级联的情况。Linux内核的虚拟中断号与中断控制器的硬件
1.概述在第一章《Linux中断系统介绍及底层中断处理源代码分析》中,Linux对中断的高层处理,最终调用的是handle_arch_irq或arch_irq_handler_default函数。以zynq7k为例,其采用的是GIC pl390中断控制器,在第二章《中断控制器介绍及初始化源代码分析》中,gic初始化的时候调用set_handle_irq函数,将handle_arch_irq函数指针
1.概述硬件的中断处理函数处于中断上半部分,在CPU关中断的状态下执行,中断线程、软中断(softirq)及小任务(tasklet)属于中断的下半部分(bottom half),在CPU开中断的状态下执行。小任务基于软中断实现,实质是对软中断的进一步封装, 在实际使用中应尽量使用小任务 。软中断及小任务的执行时机通常是中断上半部分返回(中断服务函数还未完全退出)的时候,其执行的上下文环境也处于(软







