【Linux驱动篇】4.19内核移植logcat

Linux-4.19移植logcat

由于4.x内核去掉了logcat,所以只能从3.x内核移植相应的文件,本文讲述从3.4内核移植logcat到4.19内核的方法

  1. linux-3.4/drivers/staging/android目录下,复制logger.c和logger.h到linux-4.19驱动对应目录下,并做一些修改,才能编译通过
# diff linux-4.19/kernel/drivers/staging/android/logger.c linux-3.4/drivers/staging/android/logger.c
28,30d27
< #include <linux/sched/signal.h>
< #include <linux/cred.h>
< #include <linux/uio.h>
297c294
<                       reader->r_off, current_euid().val);
---
>                       reader->r_off, current_euid());
449c446,447
< ssize_t logger_aio_write(struct kiocb *iocb, struct iov_iter *iter)
---
> ssize_t logger_aio_write(struct kiocb *iocb, const struct iovec *iov,
>                        unsigned long nr_segs, loff_t ppos)
463,464c461,462
<       header.euid = current_euid().val;
<       header.len = min_t(size_t, iter->count, LOGGER_ENTRY_MAX_PAYLOAD);
---
>       header.euid = current_euid();
>       header.len = min_t(size_t, iocb->ki_left, LOGGER_ENTRY_MAX_PAYLOAD);
483c481
<       while (iter->nr_segs-- > 0) {
---
>       while (nr_segs-- > 0) {
488c486
<               len = min_t(size_t, iter->iov->iov_len, header.len - ret);
---
>               len = min_t(size_t, iov->iov_len, header.len - ret);
491c489
<               nr = do_write_log_from_user(log, iter->iov->iov_base, len);
---
>               nr = do_write_log_from_user(log, iov->iov_base, len);
498c496
<               iter->iov++;
---
>               iov++;
603c601
<                       reader->r_off, current_euid().val);
---
>                       reader->r_off, current_euid());
658c656
<                               reader->r_off, current_euid().val);
---
>                               reader->r_off, current_euid());
671c669
<               if (!(in_egroup_p(file_inode(file)->i_gid) ||
---
>               if (!(in_egroup_p(file->f_dentry->d_inode->i_gid) ||
707c705
<       .write_iter = logger_aio_write,
---
>       .aio_write = logger_aio_write,
  1. 修改驱动linux-4.19/kernel/drivers/staging/android/Makefile文件,增加对logger.c的编译,可以直接使能,不用宏定义
obj-y		+= logger.o
  1. 重新编译kernel,烧录到机器上启动,查看/dev/log,包含以下五个节点,代表logcat驱动移植成功
[root@Soky:~]# ls /dev/log
log         log_events  log_main    log_radio   log_system
  1. 步骤3确认了五个节点生成后,还需要应用编译logcat源码,可下拉相应的github项目: linux-logcat项目源码,自行完成编译。

  2. 步骤4生成相应的so和logcat进程,应用链接so,包含头文件include/android/log.h即可使用__android_log_print函数打印。

  3. logcat -v time命令可实时打印日志

No pains, no gains.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值