Как начать писать драйверы?

21

У меня есть недорогой дешевый ноутбук Thinkpad SL 500.

Что меня беспокоит, так это два светодиода, один для беспроводного подключения, и другой для режима гибернации, которые вообще не загораются, хотя они работают, я попробовал это на окнах.

Поэтому я хотел бы написать для них драйвер ядра, ничего особенного, это просто хорошая идея поиграться с ядром.

Мой вопрос заключается в том, какой методологии я должен систематически следовать, чтобы выяснить, какие устройства отвечают за эти светодиоды (в общем, не обязательно специфичные для моего оборудования), и какие драйверы отвечают за два других работающих светодиода, Bluetooth и индикатор батареи?

И когда я говорю «методология», я действительно имею в виду методологию, шаг за шагом, с причинами для каждого шага, как в ответе, который я дал кому-то еще здесь: Что означает && в void * p = && abc;

Я хорошо разбираюсь в больших репозиториях кода, использую статические анализаторы кода и другие, но думаю, что мое отсутствие знаний об оборудовании мешает мне решить эту проблему.

PS: я использую ArchLinux, так что почти последняя версия ядра.

Флавий
источник
Вы пытались включить CONFIG_IDEAPAD_LAPTOP в ядре?
Павел Румиан
@gorkypl: нет, с чего бы я? Вопрос не в решении проблемы, а в стратегии, используемой для ее решения самостоятельно (как программист).
Флавий
3
ОК, я вас неправильно понял. В любом случае, поскольку модуль ядра IDEAPAD_LAPTOP отвечает за такие вещи в серии ThinkPad SL, вы можете начать с просмотра его исходного кода. Также вас может заинтересовать чтение, например, kernelnewbies: kernelnewbies.org/KernelHacking или отличная книга, написанная LKH: kroah.com/lkn Два других хороших источника, которые приходят мне в голову: lwn.net/Kernel/ LDD3 и amazon.com/dp/0596005652/?tag=stackoverfl08-20
Павел Румиан

Ответы:

5

Какой методологии я должен следовать систематически, чтобы выяснить, какие устройства отвечают за эти светодиоды?

В идеале вы должны найти (открыть) исходный код операционной системы ядра, на которой работают светодиоды вашего ноутбука, затем вы можете просто закомментировать часть ядра, пока не найдете код, который отвечает за светодиоды (и при этом несколько зависаний системы делают это, но это самое интересное).

Если в Linux не работают светодиоды, и вы не знаете, какое оборудование управляет ими в других ОС, как вы думаете, как написать драйвер?

Боюсь, это лучший ответ, который может дать любой, и это делает вас (почти) не более умным, чем раньше. Просто указывает на то, что вам нужно выяснить, какое именно оборудование у вас есть, чтобы иметь возможность делать что-то большее.

Чтобы быть более полезным, два указателя:

  1. Одним из часто используемых чипов IDE или SATA является серия Intel ICHX или ICHXr (ICH5, ICH6, ICH7 ... или ICH6R, ICH7R, ...).

  2. Каталог ядра Linux, в котором находится исходный код для управления множеством светодиодов

Я бы также дал вам 3-й указатель, но, как уже писал выше этот gorkypy, я могу просто повторить: драйверы для устройств Linux, 3-е издание , в формате PDF, бесплатно.

stemd
источник