Вопрос Методология взлома ядра - как узнать, где взломать Linux-ядро


У меня есть дешевый ноутбук, с которым я бы хотел пообщаться, Thinkpad SL 500.

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

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

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

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

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

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


5
2017-09-07 06:48


происхождения


Я не могу ответить на ваш вопрос, но могу посоветовать вам взглянуть на FAQ на kernelnewbies.org, если вам не повезло здесь :-) - invert
Если они работают в Windows, я бы очень осторожно зашел в Window Device Manager - вы могли бы найти адрес или идентификатор устройства, которые могли бы сэкономить вам часы проб и ошибок. - ckhan
@ckhan Не могли бы вы рассказать о частичке? - Flavius
Если его мозговой блок, thinkwiki может быть хорошим началом. - Journeyman Geek♦


ответы:


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

Тогда давайте начнем с основ. Светодиоды индикаторов можно контролировать несколькими способами:

  • Светодиод управляется непосредственно периферийным чипом / устройством. В этой ситуации процессор и драйвер ядра не будут контролировать светодиод. Обычно это относится к светодиодам «активность» и «скорость связи» на гнезде Ethernet RJ-45; эти светодиоды будут находиться под прямым / исключительным контролем устройства Ethernet PHY.

  • Светодиод управляется выводом GPIO (общий ввод / вывод) общего назначения CPU или SoC.

  • Светодиод - это выход внешней логики (например, микросхемы FPGA).

  • Светодиод - это выход на периферийном чипе.

Последние три ситуации не могут быть различимы в исходном коде. Один бит в порту или устройстве регистр включит или выключит светодиод. Проверьте файл заголовка на то, что будут контролировать другие биты в регистре. Регистр будет считываться / записываться с использованием инструкций ввода / вывода или инструкций по извлечению / хранению памяти в зависимости от архитектуры процессора.

Обратите внимание, что светодиод часто является токовым приемником и привязан к логическому высоковольтному напряжению, поэтому светодиод включается заземлением штыря, 0 бит. И наоборот, светодиод обычно отключается, записывая 1 бит. Поскольку изменяется только один бит регистра, обычно требуется чтение всего регистра до изменения бита. Сам регистр может быть критическим регионом, что потребует получения (и освобождения) мьютекса или спин-замка для защиты всей операции.

Проверка исходного кода

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

Вы указали четыре показателя:

  • беспроводная связь
  • зимняя спячка
  • подключение Bluetooth
  • аккумулятор

Получите вывод lsmod команда, в которой будут перечислены модули времени выполнения, добавленные к ядру. Из списка модулей вам необходимо определить, какие драйверы соответствуют функциям этих светодиодов, например. беспроводная сеть, питание и т. д. Предполагая, что этот ThinkPad имеет чип контроллера беспроводной сети Intel, вам нужно будет посмотреть в drivers/net/wireless/iwlwifi каталог. Осмотрите Kconfig а также Makefile файлы в этом каталоге драйверов для корреляции между фактическим именем устройства HW, символами конфигурации, .ko модуль (ы) и соответствующий исходный код.

Просмотрите исходный код драйвера для управления индикатором. Если операция не прокомментирована, вам придется искать битную операцию, макрос или вызов процедуры. Существует множество способов организовать этот код в зависимости от модульности кода или при использовании методов ООП, и эти светодиодные операции инкапсулируются в процедуры в каком-то другом драйвере. Остерегайтесь текста (исполняемого кода) в макросах (т. #define) и в заголовочных файлах. То есть, рассматривая только .c файлы были бы ошибкой. Также будьте осторожны, что некоторые коды устройств могут arch/xxx/platform или arch/xxx/machine, особенно для встроенных одноплатных компьютеров.


3
2017-09-07 09:11



Определенно полезно, спасибо, +1 - Flavius