摘要:
参考资料: 韦东山第三期 《正点原子Linux驱动开发指南》 可参考:https://www.cnblogs.com/lethe1203/p/18077992 ARM系统中中断和异常是如何影响CPU: 中断处理的流程: 1、保存现场(各种寄存器) 2、处理异常(中断属于一种异常) 3、恢复现场 AR 阅读全文
摘要:
一、设备树platform_driver示例 设备树中需要定义一个设备节点,包含设备的相关信息和属性。例如,假设有一个名为 "my_device" 的设备,其设备树节点可能如下所示: /dts-v1/; / { compatible = "example,my_device"; my_device 阅读全文
摘要:
异步通知: 驱动程序中的异步通知是指驱动程序可以向应用程序发送通知,告知应用程序发生了某种事件。这种通知是异步的,即应用程序可以继续执行其他操作,而不需要主动轮询或等待事件的发生。 在Linux内核中,实现驱动异步通知的一种常见方式是使用fasync机制。这个机制的核心是利用fasync_helpe 阅读全文
摘要:
参考资料: 《正点原子Linux驱动教程》 等待队列可参考:https://www.cnblogs.com/lethe1203/p/18092974 阻塞IO: 阻塞IO简单理解:用户进程通过read函数读取内核相应设备的file_operations.read函数,举个例子: 1 #include 阅读全文
摘要:
在Linux内核中,timer_list和hrtimer都是用于实现定时器功能的机制,但它们有一些区别和不同的特点: timer_list: timer_list是Linux内核提供的传统定时器机制,精度一般为毫秒级别。 timer_list使用struct timer_list结构表示一个定时器, 阅读全文
摘要:
参考资料: 《正点原子Linux驱动教程》 定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。Linux 内核定时器采用系统时钟来实现,也就是arch timer。Linux 内核使用 timer_list 结构体表示内核定时器,timer_list 定义在文件 include/linu 阅读全文
摘要:
资料参考: 《宋宝华 Linux设备驱动开发详解》 spinlock和mutex选用方法如下: 1、当锁不能被获取到时,使用互斥体的开销仅仅是上下文切换,使用自旋锁的开销是等待获取自旋锁(由临界区的执行时间决定)。若临界区比较小,适合使用自旋锁。若临界区较大,适合使用互斥锁 2、互斥锁所保护的临界区 阅读全文
摘要:
参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 将信号量的值设置为 1 就可以使用信号量进行互斥访问了,虽然可以通过信号量实现互斥,但是 Linux 提供了一个比信号量更专业的机制来进行互斥,它就是互斥体—mutex。互斥访问表示一次只有一个线程可以访问共享资源, 阅读全文
摘要:
信号量是操作系统中最典型的用于同步与互斥的手段,信号量的值可以是0,1或者n。信号量与操作系统中经典概念PV操作相对应 Linux驱动中信号量的操作如下: struct semaphore sem; // 定义信号量 void sema_init(struct semaphore *sem, int 阅读全文
摘要:
参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 原子操作只能对整型变量或者bit位进行保护,但是实际使用中,不可能只有整型变量或者bit位等临界区 自旋锁spinlock也是一种典型的对临界资源进行互斥访问的手段,其名称来源自它的工作方式。 当一个线程要访问某个共 阅读全文