init.rc文件中执行shell命令

本文详细介绍了在嵌入式设备中实现ADB重启的机制,包括如何通过修改板级配置文件、添加shell脚本、设置SELinux权限等步骤来实现。通过监听特定属性的变化,如vendor.reboot和vendor.reboot.adb.event,可以触发设备的ADB重启。

device/fsl/imx8q/etc/reboot_adb
device/fsl/imx8q/mek_8q/BoardConfig.mk
device/fsl/imx8q/mek_8q/init_car.rc
device/fsl/imx8q/sepolicy_car/file_contexts
device/fsl/imx8q/sepolicy_car/reboot_adb.te
system/core/init/init.cpp

shell文件中,执行的shell命令:
device/fsl/imx8q/etc/reboot_adb

#!/bin/sh
#show log
echo "init.rc adb reboot"
am broadcast -a android.intent.action.REBOOT -n com.ad.carcontrol/com.ad.carcontrol.StaticBroadcastReceiver
#chown system:system /sys/devices/platform/5b0d0000.usb/ci_hdrc.0/driver/ci_hdrc.0/role
#setenforce 0
#ip addr add 10.10.10.10/24 dev eth0
#ip rule add from all lookup main pref 9999
#chmod 0777 /vendor/etc/wifi/* -R
#chmod 0777 /data/misc/wifi/* -R
#chown wifi:wifi /vendor/etc/wifi/*
#chown wifi:wifi /sys/module/bcmdhd/parameters
#chown wifi:wifi /sys/module/bcmdhd/parameters/firmware_path
#chown wifi:wifi /sys/module/bcmdhd/parameters/nvram_path
#chown system:system /sys/class/backlight/lvds_backlight@1/brightness
#chmod 777 /sys/class/backlight/lvds_backlight@1
#chown wifi:wifi /data/misc/wifi/* -R
#sleep 1
#
<think>嗯,用户想在init.rc文件中添加或查看日志输出。首先,我需要回忆一下Android的init系统是如何处理日志的。记得init.rc是Android初始化语言的一部分,用于定义系统启动时的服务和动作。默认情况下,init的日志输出级别可能比较低,所以用户可能看不到所有信息。 首先,用户可能需要调整init的日志级别。我记得在Android中,可以通过在init.rc中添加loglevel命令来设置。例如,loglevel 7会将日志级别设置为DEBUG,这样就能看到更详细的输出。不过需要确认这个命令的正确性,是不是在init.rc中有效。 然后,用户可能需要添加自己的日志输出。在init.rc中,可以使用exec命令执行log命令。比如,在某个service或者on section里,添加exec /system/bin/log -p d -t "INIT_DEBUG" "Log message here"。不过要注意,log工具的位置是否正确,以及权限是否允许。可能需要使用绝对路径,比如/system/bin/log或者/vendor/bin/log,具体取决于设备的分区结构。 另外,用户可能想查看这些日志。通常,可以通过logcat来查看,但需要知道正确的tag或者过滤条件。例如,使用logcat -s INIT_DEBUG来过滤特定的tag。需要提醒用户使用正确的tag来查看他们的日志信息。 还有一个问题,高版本的Android可能限制init.rc中的某些操作,尤其是涉及到SELinux策略的情况。可能需要检查SELinux上下文是否正确,或者是否有权限问题导致日志命令无法执行。这时候可能需要修改sepolicy,添加相应的允许规则。 用户还可能遇到重启后修改无效的问题,因为init.rc可能在系统分区,需要重新刷写或者有系统权限才能修改。如果是这样,用户可能需要解锁bootloader,或者使用root权限来修改系统分区中的init.rc文件。不过这也可能因设备而异,需要具体情况具体分析。 此外,Android 8及以上版本使用了Treble架构,系统分区和vendor分区分离,可能需要修改vendor目录下的init.rc文件,而不是系统的。用户需要确认他们的设备结构和正确的文件位置。 最后,要确保所有步骤的正确性,比如语法是否正确,命令是否存在,权限是否足够。可能需要建议用户先在adb shell中手动执行log命令,测试是否能生成日志,再写入init.rc中,避免语法错误导致启动问题。</think>在Android系统初始化过程中,通过修改$init.rc$文件配置日志输出需要遵循以下步骤: ### 方法一:调整日志输出级别 1. 在$init.rc$文件中添加: ```bash on early-init # 设置内核日志级别为7(DEBUG级别) loglevel 7 ``` 2. 通过$adb logcat -b kernel$查看内核日志[^1] ### 方法二:添加自定义日志输出 1. 在服务/事件块中添加: ```bash service myservice /system/bin/myservice class main user root # 使用Android log工具输出 exec /system/bin/log -p d -t "INIT_DEBUG" "Service started" ``` 2. 查看输出: ```bash adb logcat -s INIT_DEBUG ``` ### 方法三:重定向服务输出 ```bash service myservice /system/bin/myservice class main user root # 同时输出到kernel log和Android log console logwrapper /system/bin/myservice ``` ### 验证配置 1. 重新启动设备 2. 使用命令查看日志: ```bash adb logcat -b all | grep "INIT_DEBUG" ``` 相关问题
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值