摘要: 一、设备树platform_driver示例 设备树中需要定义一个设备节点,包含设备的相关信息和属性。例如,假设有一个名为 "my_device" 的设备,其设备树节点可能如下所示: /dts-v1/; / { compatible = "example,my_device"; my_device 阅读全文
posted @ 2024-03-25 23:37 lethe1203 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 异步通知: 驱动程序中的异步通知是指驱动程序可以向应用程序发送通知,告知应用程序发生了某种事件。这种通知是异步的,即应用程序可以继续执行其他操作,而不需要主动轮询或等待事件的发生。 在Linux内核中,实现驱动异步通知的一种常见方式是使用fasync机制。这个机制的核心是利用fasync_helpe 阅读全文
posted @ 2024-03-25 23:19 lethe1203 阅读(12) 评论(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 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 在Linux内核中,timer_list和hrtimer都是用于实现定时器功能的机制,但它们有一些区别和不同的特点: timer_list: timer_list是Linux内核提供的传统定时器机制,精度一般为毫秒级别。 timer_list使用struct timer_list结构表示一个定时器, 阅读全文
posted @ 2024-03-25 21:44 lethe1203 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 参考资料: 《正点原子Linux驱动教程》 定时器是一个很常用的功能,需要周期性处理的工作都要用到定时器。Linux 内核定时器采用系统时钟来实现,也就是arch timer。Linux 内核使用 timer_list 结构体表示内核定时器,timer_list 定义在文件 include/linu 阅读全文
posted @ 2024-03-25 21:35 lethe1203 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 资料参考: 《宋宝华 Linux设备驱动开发详解》 spinlock和mutex选用方法如下: 1、当锁不能被获取到时,使用互斥体的开销仅仅是上下文切换,使用自旋锁的开销是等待获取自旋锁(由临界区的执行时间决定)。若临界区比较小,适合使用自旋锁。若临界区较大,适合使用互斥锁 2、互斥锁所保护的临界区 阅读全文
posted @ 2024-03-25 21:27 lethe1203 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 将信号量的值设置为 1 就可以使用信号量进行互斥访问了,虽然可以通过信号量实现互斥,但是 Linux 提供了一个比信号量更专业的机制来进行互斥,它就是互斥体—mutex。互斥访问表示一次只有一个线程可以访问共享资源, 阅读全文
posted @ 2024-03-25 21:20 lethe1203 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 信号量是操作系统中最典型的用于同步与互斥的手段,信号量的值可以是0,1或者n。信号量与操作系统中经典概念PV操作相对应 Linux驱动中信号量的操作如下: struct semaphore sem; // 定义信号量 void sema_init(struct semaphore *sem, int 阅读全文
posted @ 2024-03-25 20:59 lethe1203 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 参考资料: 《正点原子Linux驱动教程》 《宋宝华 Linux设备驱动开发详解》 原子操作只能对整型变量或者bit位进行保护,但是实际使用中,不可能只有整型变量或者bit位等临界区 自旋锁spinlock也是一种典型的对临界资源进行互斥访问的手段,其名称来源自它的工作方式。 当一个线程要访问某个共 阅读全文
posted @ 2024-03-25 20:32 lethe1203 阅读(11) 评论(0) 推荐(0) 编辑
摘要: tmpfs 是 Linux 内核中的一个虚拟文件系统,它将数据存储在内存中而不是硬盘上。使用 tmpfs 可以快速访问数据,因为数据存储在 RAM 中,而不需要进行实际的磁盘 I/O 操作。 快速创建一个tmpfs挂载节点: mkdir /mnt/tmpfs // 创建一个挂载点 mount -t 阅读全文
posted @ 2024-03-25 17:46 lethe1203 阅读(42) 评论(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 阅读(21) 评论(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 阅读(39) 评论(0) 推荐(0) 编辑
摘要: module license 'unspecified' taints kernel. Disabling lock debugging due to kernel taint 内核加载了一个未指定许可证的模块,这可能导致内核被污染(taint)。在 Linux 内核中,当加载了一些未经授权或不受信 阅读全文
posted @ 2024-03-25 16:44 lethe1203 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 参考资料:https://blog.csdn.net/qq_29023095/article/details/123164953 用户空间和内核空间交互方式有:文件I/O,ioctl、procfs、debugfs、sysfs等 procfs 是 Linux 内核中的一个虚拟文件系统,通常挂载在 /p 阅读全文
posted @ 2024-03-25 14:34 lethe1203 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 可用下列的命令查看已经挂载的文件系统: mount // 查看当前系统中已挂载的文件系统 cat /etc/fstab // 了解系统中所有定义的文件系统 lsblk // 显示系统中的块设备信息 df -h // 显示文件系统的磁盘空间使用情况,并包含已挂载的文件系统信息 命令在imx6ull上显 阅读全文
posted @ 2024-03-25 13:26 lethe1203 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 参考资料: https://blog.csdn.net/weixin_45264425/article/details/128233119 VFS(Virtual File System,虚拟文件系统)是操作系统内核中的一个重要组成部分,它提供了一个抽象层,用于统一管理不同类型的文件系统和存储设备。 阅读全文
posted @ 2024-03-25 13:24 lethe1203 阅读(127) 评论(0) 推荐(0) 编辑