往recovery添加应用程序
背景
项目有个心跳功能,在正常模式下5s一个心跳,超过30s未收到心跳系统强制重启。但是进入recovery升级模式后,没有心跳功能,造成升级失败,需要添加心跳的应用程序。添加过程如下。
打开串口log
Recovery的日志是调试的关键,默认会在cache/recovery下面看到,但是里面是空的,没查到原因。遂把串口log等级跳到7,也可以看到日志。
修改启动参数(dts里面,dts编译下载后会放在一个固定位置,uboot和kernel都可以访问):
bootargs = "earlycon=sprd_serial,0x70100000,115200n8 console=ttyS1,115200n8 loglevel=7 init=/init root=/dev/ram0 rw androidboot.hardware=sl8541e_1h10_go vmalloc=360M";
静态编译应用程序
修改应用程序的Android.mk,修改后应用程序实现静态编译,会大一点,主要是因为recovery模式下库文件很少,防止应用程序运行出错,都会用静态编译。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS :=optional
LOCAL_C_INCLUDES := $(KERNEL_HEADERS)
LOCAL_STATIC_LIBRARIES := libcutils liblog
LOCAL_MODULE:= spitest
LOCAL_SRC_FILES:=spidev_test.c events.c
LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS := -Wno-unused-parameter
#标志该模块需要强制静态链接
LOCAL_FORCE_STATIC_EXECUTABLE := true
include $(BUILD_EXECUTABLE)
添加recovery模式自动运行应用程序
修改init.rc(device/sprd/sharkle/common / recovery/init.rc)
service spi0daemon /sbin/spitest
class recovery
seclabel u:r:recovery:s0
on property:ro.bootmode=recovery
chmod 666 /sbin/spitest
class_start recovery
trigger adb_enable
spi0daemon 会在recovery class启动时候开启。
拷贝应用程序到recovery根文件系统/sbin下
这个拷贝过程可以通过参考recovery 根文件系统中有个adbd,然后仿照添加拷贝指令:
修改build /make/core/Makefile
# Copy adbd from system/bin to recovery/root/sbin
$(hide) cp -f $(TARGET_OUT_EXECUTABLES)/adbd $(TARGET_RECOVERY_ROOT_OUT)/sbin/adbd
$(hide) cp -f $(TARGET_OUT_EXECUTABLES)/spitest $(TARGET_RECOVERY_ROOT_OUT)/sbin/spitest
$(hide) chmod 777 $(TARGET_RECOVERY_ROOT_OUT)/sbin/spitest
关掉selinux
Reboot recovery后发现日志里面应用程序运行没有selinux权限,增加权限太麻烦,干错关闭。修改recovery下的init.rc(device/sprd/sharkle/common / recovery/init.rc)
on property:ro.bootmode=recovery
chmod 666 /sbin/spitest
chmod 0666 /sys/fs/selinux/enforce
chown system system /sys/fs/selinux/enforce
write /sys/fs/selinux/enforce 0
setenforce 0
class_start recovery
trigger adb_enable
注意操作enforce 时候可能也需要selinux权限,要简单加一个读写enforce 的权限。
#add for setenforce 0
/sys/fs/selinux/enforce u:object_r:file_enforce:s0
type file_enforce, fs_type, sysfs_type;
allow init file_enforce:file {open read write};
allow init kernel:security {setenforce};
neverallow * kernel:security setenforce;
neverallow { domain -kernel } kernel:security setcheckreqprot;
往recovery添加应用程序相关推荐
- 公众号群发文章支持添加小程序
微信小程序深夜凌晨放大招,公众号群发文章支持添加小程序,以下是微信公众平台的公告:为了方便用户在阅读文章时使用公众号提供的服务,公众号群发文章支持添加小程序. 公众号可将已关联的小程序添加到群发文章的 ...
- [图]为C# Windows服务添加安装程序
最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈哈,扯远了,今天讲一下那个怎么给Windows服务做个安 ...
- 如何为windows服务添加安装程序(转)
1.将写好的windows服务切换到设计视图,右键-添加安装程序 2.切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Accoun ...
- 在WINCE5.0开始菜单中添加应用程序
首先这篇文章主要参考http://blog.csdn.net/nanjianhui/archive/2009/07/01/4313044.aspx来写的,主要是想深入理解和自己实践一下. 在WinCE ...
- 为C# Windows服务添加安装程序
首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留言问我),然后要给服务"添加安装程序",如图1所示:(这一步和自己用InstallUtil注册 ...
- 让软件不在添加删除程序_功能强大却鲜为人知的四款软件,一但发现就无法自拔...
Uninstall Tool Uninstall Tool是一款专业且实用的卸载软件. 电脑上流氓软件很多,有时候你想卸载,却无法卸载,那么你可以试试它,它比Windows自带的"添加/删除 ...
- c语言编程微信公众号图片直播,如何以图片的形式在微信公众号文章中添加小程序...
如何以图片的形式在微信公众号文章中添加小程序 微信公众号中想要将自己的小程序也放进去,宣传宣传,该怎么添加?下面百分网小编带大家一起来看看详细操作教程,感兴趣的朋友一起学习吧!!!想了解更多相关信息请 ...
- C#发布程序添加其他程序文件
注:程序发布文件,默认只发布自身程序直接引用的相关文件(A程序). 如果需要添加其他程序(不同的应用程序B)文件,操作方法如下: 第一步:将B程序文件复制到A程序 第二步:将B程序文件右键--> ...
- WinCE控制面板添加应用程序
WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序.WinCE系统的控制面板由Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中C ...
最新文章
- V神再为BCH发声!
- Stuts2的struts.devMode设置成true后,不起作用,仍需要重启tomcat
- EMNLP 2020 | 通过Contrast Set评估模型的局部决策边界
- zookeeper 的安装配置及简单使用
- UDT协议实现分析——bind、listen与accept
- 「BJOI2019」奥术神杖(AC自动机+DP)
- 计算机二级旅游推广ppt,计算机二级PPT真题:制作旅游产品推广PPT
- C# 读取EXCEL文件的三种经典方法
- js获取图片原始大小
- 8/7排位赛,codeforces501
- Disable STRICT_TRANS_TABLES @Mysql 5.7
- java循环判断要点_Java 循环条件判断好题锦集
- SpringBoot整合Atomikos实现2PC二阶段分布式事务
- 从源码分析HashSet集合
- mysql数据库可视化_MySql数据库教程 - 4.可视化操作数据库
- WIN8转WIN7的两三事
- 安装jdk在linux(2)
- 机器人社社长事迹_社团先进个人事迹材料
- 近期关于 WWDC22 上各大新系统的一些传闻
- icp光谱仪的工作原理_ICP2060T ICP光谱仪工作原理