Android11 init.rc添加开机自启动service

         因项目需要,在开机启动的时候需要执行can初始化命令,但是在init.rc里面又不能直接执行shell命令,所以就需要添加一个service在开机的时候执行。

        在device路径下添加可执行的命令并且编译出来,添加main.cpp和Android.mk:

        main.cpp

#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <dirent.h>

#include <sys/socket.h>
#include <arpa/inet.h>
#include <utils/Log.h>


#include <fcntl.h>
#include <assert.h>
#include <termios.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <errno.h>

int main(){
	//ALOGD("%s: function is runing",__FUNCTION__);
	system("su root ip link set can0 down");
	system("su root ip link set can0 type can bitrate 500000");
	system("su root ip link set can0 up");
	system("su root ip link set can1 down");
	system("su root ip link set can1 type can bitrate 500000");
	system("su root ip link set can1 up");
	//ALOGD("%s: ============= set can0 and can1 up",__FUNCTION__);
	return 0;
}

         Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := main.cpp
LOCAL_MODULE := can_init
LOCAL_MODULE_TAGS := optional
#LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/
#LOCAL_CFLAGS := -O2 -g -W -Wall
LOCAL_SHARED_LIBRARIES := \
    libcutils \
    liblog

include $(BUILD_EXECUTABLE)

        在device.mk下添加编译规则,将之编译出来

#add can_init
PRODUCT_PACKAGES += can_init

        然后在init.rc里面添加service,开机时自启动:

 on property:sys.boot_completed=1
+    start canstream



+service  canstream   /system/bin/can_init
+    class core
+    disabled
+    oneshot

        添加完之后发现开机时未执行,是因为未添加selinux相关的权限,添加代码如下:

        新建一个can_init.te(具体的selinux权限路径根据你的代码来添加):

--- /dev/null
+++ b/sepolicy/vendor/can_init.te
+type can_init, domain, coredomain;
+type can_init_exec, exec_type, file_type, system_file_type;
+init_daemon_domain(can_init)

        在file_contexts添加(file_contexts路径根据你的项目生效的file_contexts文件添加)

--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts

+/system/bin/can_init                    u:object_r:can_init_exec:s0

至此,开机时添加的service就完成啦,开机时打印如下

06-12 09:00:48.919  1338  1338 D can_init: main: function is runing
06-12 09:00:49.068  1338  1338 D can_init: main:============= set can0 and can1 up

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值