- 博客(6)
- 收藏
- 关注
转载 MMIO由于需要将设备寄存器映射到内存地址空间,那么真的要预留这块内存空间么?
**特性** | **MMIO 访问** | **真实内存访问(RAM)** |- **驱动程序使用 `ioremap()` 和 `readl()/writel()` 访问 MMIO**,确保正确访问设备寄存器。- **MMIO 区域**:只是一段 **地址范围**,访问时会被总线(如 PCIe、AXI)重定向到设备寄存器,而不是 RAM。
2025-06-08 11:42:44
40
转载 通过MMIO访问设备寄存器的详细过程
**设备寄存器映射**:在系统初始化时,BIOS或操作系统将设备的控制寄存器映射到特定的物理内存地址范围。1. **指令执行**:CPU执行一条内存访问指令(如MOV、LDR、STR等),目标是MMIO映射区域。- **页表设置**:操作系统在页表中将这些物理地址映射到进程的虚拟地址空间(如果允许用户空间访问)// 读32位寄存器。- **TLB填充**:当首次访问这些地址时,TLB(转换后备缓冲区)会被填充相应的地址转换条目。3. **总线仲裁**:CPU通过总线仲裁机制获得总线控制权。
2025-06-07 08:22:53
19
原创 Linux UIO驱动框架几个核心问题
1、用户态提供的主要是 open、mmap、read、write 系统调用2、DTS文件中需要定义UIO设备节点,分为内存、中断两类,比如DTS中对于中断,就定义了相关的硬件中断号3、内核部分uio驱动采用的是platform框架,负责基于DTS设备树,创建UIO设备节点。uio核心层完成了字符设备注册,以及类的创建。
2024-10-20 18:43:28
469
原创 假如没有任何的用户态进程或任务,linux内核在做什么事情?
【声明】答案来自豆包。不过没有关系,豆包的回答会更多的唤醒我心中的疑问,促进我进一步学习。等待新的进程或任务的到来。
2024-10-20 16:34:48
412
原创 linux platform驱动介绍
wq:等待队列头,用于在ADC转换完成时唤醒等待的线程。condition:一个标志,用于指示ADC转换是否完成。arg:传递给中断处理程序的参数(在这个例子中,实际上并未在中断处理函数中使用)。文章的精华在于介绍了 device、driver 分别由内核移植人员、驱动开发人员分别开发,虽然实际上可能并不区分,但是通过作者的划分,更能明白各自的重点。Linux —— 驱动——platform平台总线_linux platform总线-优快云博客。
2024-10-07 17:01:01
369
原创 linux内核编译2.6.36&系统调用添加的实验
三、重新编译内核,在 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 下载了 linux-2.6.36.tar.gz 源码。4、cd linux-2.6.36 后,cp /boot/config-2.6.35-22-generic .config 目的是拷贝一份原有的config,改名为.config。9、在linux-2.6.36目录,sudo mkinitramfs -o /boot/initrd.img-2.6.36。
2024-10-01 16:24:27
596
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人