因项目需要,在开机启动的时候需要执行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文件添加)文章来源:https://www.toymoban.com/news/detail-615176.html
--- a/sepolicy/vendor/file_contexts
+++ b/sepolicy/vendor/file_contexts
+/system/bin/can_init u:object_r:can_init_exec:s0
至此,开机时添加的service就完成啦,开机时打印如下文章来源地址https://www.toymoban.com/news/detail-615176.html
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
到了这里,关于Android11 init.rc添加开机自启动service的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!