随笔分类 -  Linux 内核 && 驱动

Linux内核 && 驱动知识
摘要:参考资料:韦东山第三期 进程、线程、中断的核心:栈 ARM处理器程序运行的过程: ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它采用的指令比较简单,有以下特点: 1、对内存只有读写指令 2、对于数据的运算是在CPU内部实现的 3、使 阅读全文
posted @ 2024-03-26 07:48 lethe1203 阅读(436) 评论(0) 推荐(0)
摘要:参考资料: 韦东山第三期 《正点原子Linux驱动开发指南》 可参考:https://www.cnblogs.com/lethe1203/p/18077992 ARM系统中中断和异常是如何影响CPU: 中断处理的流程: 1、保存现场(各种寄存器) 2、处理异常(中断属于一种异常) 3、恢复现场 AR 阅读全文
posted @ 2024-03-26 05:41 lethe1203 阅读(25) 评论(0) 推荐(0)
摘要:一、设备树platform_driver示例 设备树中需要定义一个设备节点,包含设备的相关信息和属性。例如,假设有一个名为 "my_device" 的设备,其设备树节点可能如下所示: /dts-v1/; / { compatible = "example,my_device"; my_device 阅读全文
posted @ 2024-03-25 23:37 lethe1203 阅读(1231) 评论(0) 推荐(0)
摘要:异步通知: 驱动程序中的异步通知是指驱动程序可以向应用程序发送通知,告知应用程序发生了某种事件。这种通知是异步的,即应用程序可以继续执行其他操作,而不需要主动轮询或等待事件的发生。 在Linux内核中,实现驱动异步通知的一种常见方式是使用fasync机制。这个机制的核心是利用fasync_helpe 阅读全文
posted @ 2024-03-25 23:19 lethe1203 阅读(140) 评论(0) 推荐(0)
摘要:参考资料: 《正点原子Linux驱动教程》 等待队列可参考:https://www.cnblogs.com/lethe1203/p/18092974 阻塞IO: 阻塞IO简单理解:用户进程通过read函数读取内核相应设备的file_operations.read函数,举个例子: 1 #include 阅读全文
posted @ 2024-03-25 22:45 lethe1203 阅读(73) 评论(0) 推荐(0)
摘要:在Linux内核中,timer_list和hrtimer都是用于实现定时器功能的机制,但它们有一些区别和不同的特点: timer_list: timer_list是Linux内核提供的传统定时器机制,精度一般为毫秒级别。 timer_list使用struct timer_list结构表示一个定时器, 阅读全文
posted @ 2024-03-25 21:44 lethe1203 阅读(236) 评论(0) 推荐(0)
摘要:参考资料: 《正点原子Linux驱动教程》 定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。Linux 内核定时器采用系统时钟来实现,也就是arch timer。Linux 内核使用 timer_list 结构体表示内核定时器,timer_list 定义在文件 include/linu 阅读全文
posted @ 2024-03-25 21:35 lethe1203 阅读(149) 评论(0) 推荐(0)
摘要:资料参考: 《宋宝华 Linux设备驱动开发详解》 spinlock和mutex选用方法如下: 1、当锁不能被获取到时,使用互斥体的开销仅仅是上下文切换,使用自旋锁的开销是等待获取自旋锁(由临界区的执行时间决定)。若临界区比较小,适合使用自旋锁。若临界区较大,适合使用互斥锁 2、互斥锁所保护的临界区 阅读全文
posted @ 2024-03-25 21:27 lethe1203 阅读(45) 评论(0) 推荐(0)
摘要:参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 将信号量的值设置为 1 就可以使用信号量进行互斥访问了,虽然可以通过信号量实现互斥,但是 Linux 提供了一个比信号量更专业的机制来进行互斥,它就是互斥体—mutex。互斥访问表示一次只有一个线程可以访问共享资源, 阅读全文
posted @ 2024-03-25 21:20 lethe1203 阅读(80) 评论(0) 推荐(0)
摘要:信号量是操作系统中最典型的用于同步与互斥的手段,信号量的值可以是0,1或者n。信号量与操作系统中经典概念PV操作相对应 Linux驱动中信号量的操作如下: struct semaphore sem; // 定义信号量 void sema_init(struct semaphore *sem, int 阅读全文
posted @ 2024-03-25 20:59 lethe1203 阅读(75) 评论(0) 推荐(0)
摘要:参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 原子操作只能对整型变量或者bit位进行保护,但是实际使用中,不可能只有整型变量或者bit位等临界区 自旋锁spinlock也是一种典型的对临界资源进行互斥访问的手段,其名称来源自它的工作方式。 当一个线程要访问某个共 阅读全文
posted @ 2024-03-25 20:32 lethe1203 阅读(134) 评论(0) 推荐(0)
摘要:参考博客: Linux 驱动属性文件添加、DEVICE_ATTR宏、device_create_file()及sysfs_create_group()_面朝大海0902的博客-CSDN博客 Linux-DEVICE_ATTR()介绍及使用示例_Wang20122013的博客-CSDN博客 https 阅读全文
posted @ 2024-03-25 17:36 lethe1203 阅读(258) 评论(0) 推荐(0)
摘要:参考资料:https://blog.csdn.net/rikeyone/article/details/103586453 seq_file系列函数是为了方便内核导出信息到sysfs、debugfs、procfs实现的。 seq_file的相关接口函数如下: int seq_open(struct 阅读全文
posted @ 2024-03-25 17:11 lethe1203 阅读(159) 评论(0) 推荐(0)
摘要:module license 'unspecified' taints kernel. Disabling lock debugging due to kernel taint 内核加载了一个未指定许可证的模块,这可能导致内核被污染(taint)。在 Linux 内核中,当加载了一些未经授权或不受信 阅读全文
posted @ 2024-03-25 16:44 lethe1203 阅读(407) 评论(0) 推荐(0)