1

/system がマウントされる前に、dmesg ログに何かを書き込もうとしています。
私の問題は、(Androidの)dmesgに書き込むには、通常のcrossdevアームシステムだけでなく、Android固有のものを使用する必要があることです。
ただ:

__android_log_print(ANDROID_LOG_DEBUG, "libnav", "DEBUG - custom program started");

次のようにコンパイルすれば問題ありません( /var/tmp/android でスタンドアロンのツールチェーンを作成します):

arm-linux-androideabi-gcc --sysroot /var/tmp/android/sysroot -llog -o custom_program custom_program.c

ただし、上記のコマンドは動的にリンクされた実行可能ファイルを作成します。これは、システムがまだ起動していれば正常に実行されます。
「簡単、静的にコンパイルするだけ!」と思いました。
Android ndk にはいくつかのライブラリが付属していますが、liblog は liblog.a ではなく liblog.so のみなので、/system がマウントされる前に dmesg に何かを記録するにはどうすればよいですか?
前もって感謝します。

4

1 に答える 1

0

arm-unknown-gnueabi-gccを使用して、
fopenによって返されるファイル*で/ dev/kmsgとfprintfをfopenします。
androidの実行中にプログラムを実行すると、dmesgに書き込まれますが、初期ブートプロセスの場合は書き込まれません。なぜ?

@auselen私はまだこの静的プログラムを起動するようにinitを変更しました:
init.rcスニペット

on post-fs-data
write /dev/kmsg "launching test"
exec /data/test

dmesgで見るのはこれだけです...

<4>[    6.336816] launching test
<6>[    6.336902] init: command 'write' r=0
<6>[    6.337115] init: command 'exec' r=-1

ここに実行可能なソースコードがあります:http://pastebin.com/Hym1APWx

于 2012-12-28T13:10:51.907 に答える