rk3288 android7.1.2 can功能调试二

添加can启动服务

can设备在linux系统下默认加载成网络设备节点,默认系统启动时,是不去启动can设备的,所以需要在系统服务中添加一个can启动服务。

1、编写can服务脚本

vendor/rockchip/common/can/can.sh
    +#!/system/bin/sh
+
+min=0
+max=3
+
+sleep 3
+while [ $min -le $max ]
+do
+	ip link set can0 up type can bitrate 500000
+	if [ $? -eq 0 ]; then
+		echo "set can bitrate success!"
+		break
+	echo
+		echo "set can bitrate failed!"
+		min=`expr $min + 1`
+	fi
+done
+
+min=0
+max=3
+sleep 1
+while [ $min -le $max ]
+do
+	ifconfig can0 up
+	if [ $? -eq 0 ]; then
+		echo "set can net device success!"
+		break
+	echo
+		echo "set can net device failed!"
+		min=`expr $min + 1`
+	fi
+done
+

2、添加服务编译并拷贝服务到/system/bin目录下

vendor/rockchip/common/can/Android.mk

    +LOCAL_PATH := $(call my-dir)
    +
    +include $(CLEAR_VARS)
    +LOCAL_MODULE := can.sh
    +LOCAL_MODULE_TAGS := eng
    +LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
    +LOCAL_MODULE_CLASS := EXECUTABLES
    +LOCAL_SRC_FILES := can.sh
    +include $(BUILD_PREBUILT)
vendor/rockchip/common/device-vendor.mk
    +$(call inherit-product-if-exists, vendor/rockchip/common/can/can.mk)
vendor/rockchip/common/can/can.mk
    +PRODUCT_PACKAGES += \
    +
    +PRODUCT_COPY_FILES += \
    +    vendor/rockchip/common/can/can.sh:system/bin/can.sh \

3、添加服务启动

device/rockchip/common/init.rk30board.rc
    +service can_sh /system/bin/can.sh
    +    class main
    +	oneshot

4、处理服务权限

对于在android系统下添加服务,服务启动时需要获取一下运行权限,关于服务权限问题,可参考Android系统下SELinux权限处理。

device/rockchip/common/sepolicy/file_contexts
    +/system/bin/can.sh                     u:object_r:can_sh_exec:s0
device/rockchip/common/sepolicy/init.te
    +domain_trans(init, can_sh_exec, can_sh)
device/rockchip/common/sepolicy/can_sh.te
    +type can_sh, domain, mlstrustedsubject;
    +type can_sh_exec, exec_type, file_type;
    +
    +init_daemon_domain(can_sh)
    +allow can_sh shell_exec:file { getattr read};
    +allow can_sh system_file:file { execute_no_trans };
    +allow can_sh can_sh:netlink_route_socket { create setopt bind write nlmsg_write    getattr read};
    +allow can_sh can_sh:capability { net_admin net_raw sys_module };
    +allow can_sh can_sh:udp_socket { ioctl create };
    +allow can_sh kernel:system { module_request };
    +allow can_sh toolbox_exec:file { getattr execute read open execute_no_trans };
    +

猜你喜欢

转载自blog.csdn.net/qq_32645109/article/details/121266961
今日推荐