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的完美打印控制。