На самом деле нет ничего, что было бы выполнено до вашего init. Перечисление шины выполняется при загрузке, если это происходит без заминки, самой ранней причиной замораживания должно быть что-то в вашем драйвере init AFAIK.
Вы должны быть в состоянии видеть printk
s, поскольку они напечатаны, они не буферизованы и не должны затеряться. Это применимо только в ситуациях, когда вы можете напрямую видеть вывод ядра, например, на текстовой консоли или через последовательную линию. Если на этом пути есть какое-то другое приложение, например, отображение журналов ядра в терминале в X11 или поверх ssh, у него может не быть возможности читать и отображать журналы до того, как компьютер зависает.
Если по каким-либо другим причинам printk
s все еще не работает для вас, вы можете вместо этого вернуть функцию init. Просто проверьте и переместите возврат позже в init, пока не найдете точку, где он сработает.
Трудно сказать, что вызывает зависание, но прерывания - одна из тех вещей, на которые я бы посмотрел в первую очередь. Убедитесь, что устройство действительно не сигнализирует прерывания до тех пор, пока драйвер не включит их (включая сброс прерываний при перезагрузке системы) и включите их в драйвере только после регистрации всех обработчиков (кроме того, сбросьте состояние прерывания до включения прерываний).
Вторая вещь, на которую нужно обратить внимание, это передача магистральных шин, то же самое: убедитесь, что устройство ничего не делает до тех пор, пока его не попросят, и дайте драйверу убедиться, что никакие передачи busmaster не активны, прежде чем включить функцию busmastering на устройстве уровень.
вы можете увидеть напечатанные сообщения в/вар/сообщения журнала /. –
Как это отличается от просмотра dmesg при этом insmod? – yonigo
Я не думаю, что есть какая-то разница между ними. Я думал, что ты не сделал do dmesg. –