如何开始编写驱动程序?


21

我有一台想扔出去的廉价廉价笔记本电脑,Thinkpad SL 500。

让我困扰的是两个LED,一个用于无线连接,一个用于休眠,尽管它们可以正常工作,但它们根本不亮,我已经在Windows上尝试过了。

因此,我想为他们编写一个内核驱动程序,没什么大不了,使用内核看起来像是一个好主意。

我的问题是,我应该系统地遵循哪种方法来找出哪些设备负责这些指示灯(通常,不一定是我的硬件所特有的),哪些驱动程序负责工作的其他两个指示灯,蓝牙和电池指示器?

当我说方法论时,我真的是在逐步地讲讲方法论,并指出每一步的原因,就像我在这里给别人的答案一样:&&在无效* p = && abc;中是什么意思?

我精通使用静态代码分析器&co来查找大型代码存储库,但是我认为我对硬件的了解不足,使我无法解决此问题。

PS:我使用的是ArchLinux,所以几乎是最新的内核版本。


您是否尝试过在内核中启用CONFIG_IDEAPAD_LAPTOP?
帕维尔Rumian

@gorkypl:不,我为什么要这么做?问题不是解决问题,而是解决自己(作为程序员)用来解决问题的策略。
Flavius 2012年

3
好,我误会了你。无论如何,由于IDEAPAD_LAPTOP内核模块负责SL系列Thinkpad中的此类事情,因此您可以从查看其源代码开始。此外,您可能感兴趣的一些阅读,例如在kernelnewbies:kernelnewbies.org/KernelHacking或LKH写了一本伟大的书:kroah.com/lkn另外两个好来源,我想起有:lwn.net/Kernel/ LDD3amazon.com/dp/0596005652/?tag=stackoverfl08-20
帕维尔Rumian

Answers:


5

我应该系统地遵循哪种方法来找出哪些设备负责这些LED?

理想情况下,您应该找到(开放的)笔记本电脑LED可以在其上运行的内核OS的源,然后可以逐个注释一部分内核,直到找到负责LED的代码为止(并冻结了一些系统,但这是有趣的部分)。

如果LED在Linux上不起作用,并且您不知道其他操作系统上的LED是由哪些硬件驱动的,您如何看待编写驱动程序?

恐怕这是任何人都可以给出的最佳答案,这使您(几乎)没有比以前更聪明的了。只是指出您,您需要准确地找到拥有的硬件,才能执行更多操作。

需要更多帮助的有两个指针:

  1. Intel的ICHX或ICHXr系列(ICH5,ICH6,ICH7 ...或ICH6R,ICH7R等)是常用的IDE或SATA芯片之一。

  2. Linux内核目录,该源代码位于控制许多LED的源代码中

我也会给您第三个指针,但是正如上面这个笨拙的文章所述,我可以重复一遍:Linux设备驱动程序,第3版,PDF,免费。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.