Bagaimana cara memulai menulis driver?

21

Saya memiliki laptop murah yang ingin saya gunakan, Thinkpad SL 500.

Yang mengganggu saya adalah dua leds, satu untuk konektivitas nirkabel, dan satu lagi untuk hibernasi, yang tidak menyala sama sekali, meskipun mereka berfungsi, saya sudah mencobanya di windows.

Jadi saya ingin menulis driver kernel untuk mereka, tidak ada yang besar, sepertinya ide yang bagus untuk bermain-main dengan kernel.

Pertanyaan saya adalah metodologi apa yang harus saya ikuti secara sistematis untuk mencari tahu perangkat apa yang bertanggung jawab atas led (secara umum, belum tentu spesifik untuk perangkat keras saya), dan driver apa yang bertanggung jawab untuk dua led lain yang berfungsi, bluetooth dan indikator baterai?

Dan ketika saya mengatakan metodologi, saya benar-benar bermaksud metodologi, langkah demi langkah, dengan alasan untuk setiap langkah, seperti dalam jawaban yang saya berikan kepada orang lain di sini: Apa yang dimaksud dengan && dalam kekosongan * p = && abc;

Saya mahir dalam merapikan melalui repositori kode besar, menggunakan analisa kode & co statis, tapi saya pikir kurangnya pengetahuan perangkat keras saya menghalangi saya pada masalah ini.

PS: Saya menggunakan ArchLinux, jadi hampir versi kernel terbaru.

Flavius
sumber
Sudahkah Anda mencoba mengaktifkan CONFIG_IDEAPAD_LAPTOP di kernel?
Paweł Rumian
@ gorkypl: tidak, mengapa saya harus melakukannya? Pertanyaannya bukan tentang menyelesaikan masalah, ini tentang strategi yang digunakan untuk menyelesaikan masalah sendiri (sebagai seorang programmer).
Flavius
3
Oke, saya salah paham dengan Anda. Pokoknya, karena modul kernel IDEAPAD_LAPTOP bertanggung jawab untuk hal-hal seperti itu di seri SL Thinkpads, Anda dapat mulai dari melihat kode sumbernya. Juga, Anda mungkin tertarik pada beberapa bacaan, misalnya pada kernelnewbies: kernelnewbies.org/KernelHacking atau buku hebat yang ditulis oleh LKH: kroah.com/lkn Dua sumber bagus lain yang terlintas dalam pikiran saya adalah: lwn.net/Kernel/ LDD3 dan amazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

Jawaban:

5

Metodologi apa yang harus saya ikuti secara sistematis untuk mencari tahu perangkat apa yang bertanggung jawab untuk LED itu?

Idealnya, Anda harus menemukan sumber (terbuka) OS kernel di mana LED laptop Anda bekerja, maka Anda bisa mengomentari bagian demi bagian dari kernel sampai Anda menemukan kode yang bertanggung jawab untuk LED (dan memiliki beberapa sistem membeku melakukan itu, tapi itu bagian yang menyenangkan).

Jika LED tidak berfungsi di Linux dan Anda tidak tahu perangkat keras mana yang mendorongnya pada OS lain, bagaimana menurut Anda Anda akan menulis driver?

Itu jawaban terbaik yang bisa diberikan siapa pun, saya khawatir, dan itu membuat Anda (hampir) tidak lebih pintar dari sebelumnya. Hanya menunjukkan kepada Anda bahwa Anda perlu mencari tahu perangkat keras mana yang Anda miliki, untuk dapat melakukan sesuatu yang lebih.

Untuk lebih membantu, dua petunjuk:

  1. Salah satu chip IDE atau SATA yang sering digunakan adalah seri Intel ICHX atau ICHXr (ICH5, ICH6, ICH7 ... atau ICH6R, ICH7R, ...).

  2. Direktori kernel Linux di mana terletak kode sumber untuk mengendalikan banyak LED

Saya akan memberi Anda pointer ke-3 juga, tetapi karena gorkypy ini sudah menulis di atas, saya hanya bisa mengulang: driver perangkat Linux, edisi ke-3 , dalam PDF, gratis.

batang
sumber