- 博客(13)
- 收藏
- 关注
原创 第十二章 Linux设备驱动中的软件架构思想
注册完成globalfifo对应的platform_driver后,会发现 /sys/bus/plaform/drivers 目录下多出一个 globalfifo 的子目录。将platform_driver注册进系统。
2023-07-27 11:15:03
173
1
原创 第十一章 内存与IO访问
dma_alloc_xxx()函数虽然是以dma_alloc_开头的,但是其申请的区域不一定在DMA区域里面。slab在底层依然依赖于__get_free_pages(),slab在底层每次申请1页和多页,之后再分隔这些页为更小的单元进行管理,节省了内存,提高了slab缓冲对象的访问效率。如果设备要求较大的DMA缓冲区,在其支持SG模式的情况下,申请多个相对较小的不连续的DMA缓冲区通常是防止申请太大的连续物理空间的方法。VMA结构体描述的虚拟地址介于vm_start到vm_end之间。
2023-07-27 11:13:02
513
1
原创 第九章 Linux设备驱动中的异步通知和异步IO
9.1 异步通知的概念和作用异步通知:设备通知用户自身可以访问,之后用户再进行I/O处理。一旦设备就绪,则主动通知应用程序。(类似于中断) 阻塞、非阻塞IO、异步通知的区别:9.2 Linux异步通知编程信号可以进行进程间通信(IPC),Linux中使用信号实现异步通知。除SIGSTOP(19) 和 SIGKILL(9) 以外,进程可以忽略或者捕获其他全部信号。 用户程序中,使用signal() 函数进行信号的捕捉,来设置对应的信号处理函数: 第一个参数为信号的值(宏),第二个参数为信
2023-07-27 11:07:06
87
1
原创 第八章 Linux设备驱动中的阻塞与非阻塞I/O
8.1 阻塞与非阻塞I/O阻塞与非阻塞: 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。 非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。 处理打开文件可以指定阻塞和非阻塞方式,文件打开后,也可以通过ioctl()和fcntl()改变读写的方式,进行阻塞和非阻塞之间的变更。8.1.1 等待队列定义等待队列头(结构体w
2023-07-27 11:05:12
121
1
原创 第七章 Linux设备驱动中的并发控制
RCU(读-复制-更新):RCU的读端没有锁、内存屏障、原子指令类的开销,几乎可以认为是直接读(只是简单地标明读开始和读结束),而RCU的写执行单元在访问它的共享资源前首先复制一个副本,然后对副本进行修改,最后使用一个回调机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据,这个时机就是所有引用该数据的CPU都退出对共享数据读操作的时候。等待适当时机的这一时期称为宽限期。
2023-07-27 11:02:45
50
1
原创 第六章 字符设备驱动
当询问的条件未触发时,用户空间进行select()和poll()系统调用将引起进程的阻塞。内核中预定义了一些I/O控制命令,如果某设备驱动中包含了与预定义命令一样的命令码,这些命令会作为预定义命令被内核处理而不是被设备驱动处理。与open()函数对应的是release()函数。aio_read()和aio_write()函数分别对与文件描述符对应的设备进行异步读、写操作。read()函数用来从设备中读取数据,成功时函数返回读取的字节数。write()函数向设备发送数据,成功时该函数返回写入的字节数。
2023-07-27 11:01:19
139
1
原创 第五章 Linux文件系统与设备文件
5.3 devfs(设备文件系统)5.4 udev用户空间设备管理。5.1 Linux文件操作。5.2 Linux文件系统。
2023-07-27 10:59:37
81
1
原创 第四章 Linux内核模块学习
4.2 Linux内核模块程序结构。4.1 Linux内核模块简介。4.7 模块声明与描述。4.3 模块加载函数。4.4 模块卸载函数。4.8 模块使用计数。
2023-07-27 10:57:41
116
1
原创 第三章 Linux内核及内核编程
3.2 Linux 2.6后的内核特点。3.1 Linux内核的发展与演变。3.4 Linux内核的编译及加载。3.3 Linux内核的组成。3.5 Linux编程风格。
2023-07-27 10:53:08
226
1
原创 u-boot常用命令和启动流程
函数 board_init_f_alloc_reserve 主要是留出早期的 malloc 内存区域和 gd 内存区域,其中 CONFIG_SYS_MALLOC_F_LEN=0X2000( 在文件 include/generated/autoconf.h 中定义 )调用用函数 board_init_f_alloc_reserve,此函数有一个参数,参数为 r0 中的值,此函数定义在文件 common/init/board_init.c 中。bootz 命令用于启动 zImage 镜像文件。
2023-07-26 15:09:05
1757
1
原创 Linux设备驱动开发详解读书笔记----第一章 Linux设备驱动概述及开发环境构建
驱动:驱使硬件设备行动。驱动程序负责硬件和软件之间的沟通。
2023-07-26 11:33:11
201
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人