0
点赞
收藏
分享

微信扫一扫

Android系统10 RK3399 init进程启动(四十五) 实战Init.rc脚本中之日志永久化保存


说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

init.rc除了可以做开机启动的事情,还可以做行为控制,主要是可以通过action中的属性作为触发事件,这个功能非常有用,可以让我们做一些异步事件的逻辑控制。

一,属性控制示例讲解

属性是可以对系统中的行为进行控制的, 比如某个时候做特定事情, 或者当个条件达成时做某个事情, 而这个时候, android会利用属性来实现这样的功能,我们把这种称作为属性trigger,比如:system/core/rootdir/init.rc

on property:sys.boot_completed=1
bootchart stop
# Setup per_boot directory so other .rc could start to use it on boot_completed
exec - system system -- /bin/rm -rf /data/per_boot
mkdir /data/per_boot 0700 system system

意思是当属性sys.boot_completed等于1时,其实就是系统启动完毕后,需要执行bootchart stop, rm, 以及mkdir相关命令

system/core/logcat/logcatd.rc

on property:logd.logpersistd.enable=true && property:logd.logpersistd=logcatd
# all exec/services are called with umask(077), so no gain beyond 0700
mkdir /data/misc/logd 0700 logd log
start logcatd

意思是当属性logd.logpersistd.enable等于true,并且属性logd.logpersistd等于logcatd时, 就会执行mkdir, start相关命令。

二,实战操作之系统日志永久化保存

logcat查看的是logd在内存中日志信息,在实际产品中,客户的设备出现问题了, 不一定当场就能马上获取到设备的日志信息,此时可以将日志保存起来,android默认就有logcatd服务,开机就能帮忙保存所有日志。完整的system/core/​​logcat​​/logcatd.rc文件:

#
# init scriptures for logcatd persistent logging.
#
# Make sure any property changes are only performed with /data mounted, after
# post-fs-data state because otherwise behavior is undefined. The exceptions
# are device adjustments for logcatd service properties (persist.* overrides
# notwithstanding) for logd.logpersistd.size and logd.logpersistd.buffer.

# persist to non-persistent trampolines to permit device properties can be
# overridden when /data mounts, or during runtime.
on property:persist.logd.logpersistd.size=256
setprop persist.logd.logpersistd.size ""
setprop logd.logpersistd.size ""

on property:persist.logd.logpersistd.size=*
# expect /init to report failure if property empty (default)
setprop logd.logpersistd.size ${persist.logd.logpersistd.size}

on property:persist.logd.logpersistd.buffer=all
setprop persist.logd.logpersistd.buffer ""
setprop logd.logpersistd.buffer ""

on property:persist.logd.logpersistd.buffer=*
# expect /init to report failure if property empty (default)
setprop logd.logpersistd.buffer ${persist.logd.logpersistd.buffer}

on property:persist.logd.logpersistd=logcatd
setprop logd.logpersistd logcatd

# enable, prep and start logcatd service
on load_persist_props_action
setprop logd.logpersistd.enable true

on property:logd.logpersistd.enable=true && property:logd.logpersistd=logcatd
# all exec/services are called with umask(077), so no gain beyond 0700
mkdir /data/misc/logd 0700 logd log
start logcatd

# stop logcatd service and clear data
on property:logd.logpersistd.enable=true && property:logd.logpersistd=clear
setprop persist.logd.logpersistd ""
stop logcatd
# logd for clear of only our files in /data/misc/logd
exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-256}
setprop logd.logpersistd ""

# stop logcatd service
on property:logd.logpersistd=stop
setprop persist.logd.logpersistd ""
stop logcatd
setprop logd.logpersistd ""

on property:logd.logpersistd.enable=false
stop logcatd

# logcatd service
service logcatd /system/bin/logcatd -L -b ${logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${logd.logpersistd.size:-256} --id=${ro.build.id}
class late_start
disabled
# logd for write to /data/misc/logd, log group for read from log daemon
user logd
group log
writepid /dev/cpuset/system-background/tasks
oom_score_adjust -600

根据以上控制逻辑,可以手动操作来启动logcatd,如下:

qh100_rk3399:/ $ setprop persist.logd.logpersistd.size 20

qh100_rk3399:/ $ setprop persist.logd.logpersistd.buffer main,system,crash,radio,kernel

qh100_rk3399:/ $ setprop logd.logpersistd logcatd

qh100_rk3399:/ $ setprop logd.logpersistd.enable true

qh100_rk3399:/ $ ps -elf | grep logcatd

logd          2943     1 3 12:10:06 ?     00:00:00 logcatd -L -b main,system,crash,radio,kernel -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n 20 --id=QD4A.200805.003

shell         2960  2006 3 12:10:19 pts/0 00:00:00 grep logcatd

/data/misc/logd # su

:/data/misc/logd # ls -l

total 1304

-rw------- 1 logd log       0 2022-03-12 11:52 event-log-tags

-rw------- 1 logd log  247958 2022-12-05 14:40 logcat

-rw------- 1 logd log 1080812 2022-03-12 12:21 logcat.01

-rw------- 1 logd log      15 2022-03-12 12:10 logcat.id

 如果开发板重启后,其实logcatd 是没有开机启动的,其实也是可以做配置进行开机启动的。

举报

相关推荐

0 条评论