andriod的logcat工具很好用,可以將其移植到linux上,方便程序調試。logcat在linux上分爲兩部分:logcat工具和內核驅動logger。logger驅動在3.x內核中位於/drivers/staging/andriod中,如果使用內核版本是3.x,直接編譯即可。如果內核版本使用4.x,會編譯報錯,主要是4.x內核的部分結構體進行了調整,所以需要修改logger.c。本想直接使用4.x內核中的logger.c,不過很遺憾,從4.0開始logger被移除了staging,所以只能修改3.x中的logger.c。我使用的logger.c是3.14.12中的,其它版本下的應該大同小異吧。主要修改點如下:
- 包含頭文件:#include <uio.h>
- 修改函數logger_aio_write:
入參改爲struct kiocb *iocb和struct iov_iter *iter; //根據4.x內核file_operations中write_iter原型定義修改
iocb->ki_nbytes改爲iter->count //4.0內核無ki_nbytes字段,替換字段爲iter->count
nr_segs、iov移到iter結構中,前面加iter->即可
3. file_operations中異步接口改爲write_iter
經過上面三處修改應該就能編譯了,生成ko文件insmod試試吧,體驗logcat的完美打印控制。