Я только что прочитал, что модули ядра Linux не могут печатать на экране, т.е. printf
не будут работать. Это как-то связано с обработкой прерываний или почему так?
Помню, как я изучал C и ассемблер, которые нельзя было использовать printf
, потому что прерывания были отключены.
решение1
В ядре printf
не работает, потому что не реализовано! Вы используетеprintk
вместо этого (или early_printk
в очень раннем коде, до настройки консоли). printk
кодируется очень тщательно, так что его можно безопасно вызывать откуда угодно и при любых обстоятельствах (в частности, ему не нужно выделять память). Он реализует практически тот же API, что и printf
, с добавлением уровня журнала для указания важности печатаемого сообщения и спецификаторов формата, которыеполезно в ядре.