![如何开始编写驱动程序?](https://linux22.com/image/43569/%E5%A6%82%E4%BD%95%E5%BC%80%E5%A7%8B%E7%BC%96%E5%86%99%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我有一台废弃的廉价笔记本电脑,我想摆弄一下,它是 Thinkpad SL 500。
令我困扰的是两个 LED,一个用于无线连接,一个用于休眠,虽然它们可以正常工作,但根本不亮,我已经在 Windows 上尝试过了。
所以我想为它们编写一个内核驱动程序,没什么大不了的,只是看起来是一个玩弄内核的好主意。
我的问题是我应该系统地遵循什么方法来找出哪些设备负责这些 LED(一般来说,不一定特定于我的硬件),哪些驱动程序负责另外两个工作的 led,蓝牙和电池指示器?
当我说方法论时,我真正指的是方法论,一步一步,每一步都有原因,就像我在这里给其他人的答案一样:void *p = &&abc; 中 && 是什么意思?
我擅长使用静态代码分析器等通过大型代码存储库进行 fgrepping,但我认为我缺乏硬件知识阻碍了我解决这个问题。
PS:我使用的是ArchLinux,所以几乎是最新的内核版本。
答案1
我应该系统地遵循什么方法来找出哪些设备负责这些 LED?
理想情况下,您应该找到您的笔记本电脑 LED 正在其上工作的内核操作系统的(开放)源代码,然后您可以将内核的一部分注释掉,直到找到负责 LED 的代码(并且有一些系统会冻结这样做,但这是有趣的部分)。
如果 LED 在 Linux 上不起作用,并且您不知道在其他操作系统上哪个硬件正在驱动它们,您认为如何编写驱动程序?
恐怕这是任何人都能给出的最佳答案,而这使你(几乎)并不比以前更聪明。只是指出您需要准确找出您拥有哪些硬件,以便能够做更多事情。
为了获得更多帮助,有两点:
常用的 IDE 或 SATA 芯片之一是 Intel 的 ICHX 或 ICHXr 系列(ICH5、ICH6、ICH7...或 ICH6R、ICH7R...)。
我也会给你第三个指针,但是正如这个高尔基皮已经在上面写的那样,我可以重复一遍:Linux 设备驱动程序,第 3 版,PDF 格式,免费。