android 打印kernel log,android8.0 kernel4.9.44 各层log打开
一.問題
平臺android8.0 kernel4.9.44,想加個i2c驅動,打開log都是一件腦瓜疼的事。
二.log總結
android有三種log。
1.kernel下面的,就是driver層log。
2.kernel上面的,init和init.rc啟動的程序的log,應用層
3.kernel上面的,android的log,就是logcat打印的。
三.log打開方式
1.kernel下面的,就是driver層log。
1.1打印log使用printk,printk有如下方式
printk("default,其實等于KERN_WARNING=4");//不加KERN_ERR KERN_DEBUG這些,其實等于KERN_WARNING
printk(KERN_EMERG "====> KERN_EMERG=0");
printk(KERN_ALERT "====> KERN_ALERT=1");
printk(KERN_CRIT "====> KERN_CRIT=2");
printk(KERN_ERR "====> KERN_ERR=3");
printk(KERN_WARNING "====> KERN_WARNING=4");
printk(KERN_NOTICE "====> KERN_NOTICE=5");
printk(KERN_INFO "====> KERN_INFO=6");
printk(KERN_DEBUG "====> KERN_DEBUG=7");
1.2系統啟動后,打印log可以用
1.2.1 dmesg 可以打印所有log
1.2.2 cat /proc/kmsg 可以打印所有log,再次敲命令cat /proc/kmsg只會打印接下來的log,就是說log打印完后會被清除掉
1.2.3 不想敲命令,想在串口看見log,要設置串口log級別。
查看KERN_ERR=3及以下的log,dmesg -n 4或者echo 4 > /proc/sys/kernel/printk
查看KERN_WARNING=4及以下的log,dmesg -n 5或者echo 5 > /proc/sys/kernel/printk
查看KERN_DEBUG=7及以下的log,dmesg -n 8或者echo 8 > /proc/sys/kernel/printk
2.kernel上面的,init和init.rc啟動的程序的log,應用層
2.1 init程序啟動后會重定向文件,串口是看不見log的。
要調試,如果程序可以在串口執行,試試串口執行,或者在init.rc里修改啟動方式
service logwrapper /system/bin/logwrapper /system/bin/hello,用android工具logwrapper 執行服務
3.kernel上面的,android的log,就是logcat打印的。不再贅述。
四、調試kernel雜項
1.編譯燒錄kernel
make bootimage -j44,然后燒錄boot.img,kernel在boot.img分區里面
2. 驅動里module_init函數 log不打印 ,read函數和write函數有log
dmesg緩沖區是有大小限制的,log太多,前面的log已經被清除了。開機后快速dmesg可以得到log的
3.編譯報錯
Unknown symbol __class_create (err 0)
Unknown symbol device_create (err 0)
解決,增加聲明 MODULE_LICENSE(“GPL”);
4. i2c 地址0x18 要左移一位 0x18<<1 =0x30是讀地址,0x31就是寫地址
dts里面寫0x18
總結
以上是生活随笔為你收集整理的android 打印kernel log,android8.0 kernel4.9.44 各层log打开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 21mod,熊猫博士小镇
- 下一篇: 高鸿股份与鸿蒙,高鸿股份(000851)