最新バージョンの Linux (linux-stable) をカスタマイズされた ARM926TEJ-S ボードに移植しており、初期化フェーズでメッセージを出力したいと考えています。そのため、カーネルの初期化フェーズで uart を機能させるにはどうすればよいかという問題に悩まされています。
init/main.c:start_kernel() で Linux バナーを印刷すると、
最終的printk()
にメッセージを印刷するために呼び出されます。私の質問は、がどのようにprintk()
実装され、どのようにprintk()
出力を uart に送ることができるかです。
そこでは uart のドライバが初期化されていないことがわかっているのでrest_init()
、start_kernel() の最後に呼び出されて初期化されます。rest_init()
その結果、ドライバーを呼び出しdo_initcalls()
、最終的に呼び出します。module_init()
そして、私はputstr("Linux の圧縮を解除しています...");を知っています。解凍フェーズでは、ファイル設定によって実装されたarch/arm/boot/compressed/debug.S
ものを使用して実装されますwaituart/senduart...
CONFIG_DEBUG_LL_INCLUDE