Linux驱动入门笔记
笔记
- Linux驱动可以动态加载和卸载。这样的好处是使内核不用太大,坏处就是要为每个设备都保存一份驱动代码。
- 驱动程序都是运行在内核态的。它们是可以被打断的。即是说,需要考虑在多核的情况下,并行执行到驱动程序内部也不会出问题。
参考资料
- Writing a Linux Kernel Module — Part 1: Introduction
- Linux Driver Tutorial: How to Write a Simple Linux Device Driver 介绍一个最简单的驱动程序,有完整的例子和编译Makefile。里面只有打印。不过文章说明了很多源文件中Lisene等等相关的内容。
- Writing a Linux Kernel Module — Part 2: A Character Device
- 详细介绍了如何写一个字符设备驱动程序。
- 如何写一个udev的rule,来改变驱动对应/dev/ebbchar的权限,使普通用户对他也有读写权限。
- 解释了权限位的最后一位,sticky位。如果此位置为t,表示对该文件有写入权限,并不意味着对它有删除权限。 比如/tmp/目录,每个用户都可以在这个目录创建文件,但是用户A不能随变删除用户B的文件。
- 使用了锁,解决了多进程同时和该驱动程序通信的问题。
- Writing a Linux Kernel Module — Part 3: Buttons and LEDs
- 一个例子是在用户空间直接设置GPIO。
- 一个例子是通过驱动程序在内核空间设置GPIO。通过中断(这里应该是按下开关产生的硬件中断)来设置GPIO。 GPIO115是input状态,用于读开关状态。 GPIO49是output状态,用于设置led灯。开关按下提起会导致该GPIO产生中断,调到中断处理函数中,处理函数通过设置GPIO49就能控制led灯的亮和灭。
- 关于本文中介绍的GPIO,可以参考 GPIO in the kernel: an introduction 这篇文章。
- 最后一个例子,是在内核空间中使用kthread来演示内核态中的多线程。
- 大概讲了一下kobject,我没搞太懂。
如果你觉得本文不错,欢迎 donate