天天看点

4.移植msensor(Android 7.0)

本文以移植qmcX983d地磁传感器为例,讲述移植步骤和问题解决。

1.驱动移植

drivers/misc/mediatek/magnetometer/

$(project)/ProjectConfig.mk CUSTOM_HAL_MSENSORLIB

2.添加sepolicy相关及服务(device目录)

a) device/mediatek/mt6735/init.mt6735.rc 添加sever

service qmcX983d /vendor/bin/qmcX983d

disabled

user system

group system

class main

oneshot

b) mediatek/common/sepolicy/basic/file_contexts 添加

/(system\/vendor|vendor)/bin/qmcX983d u:object_r:qmcX983d_exec:s0

c) mediatek/common/sepolicy/basic/qmcX983d.te 新增文件内容为:

# ==============================================
# Type Declaration
# ==============================================

type qmcX983d_exec , exec_type, file_type;
type qmcX983d ,domain;

#permissive qmcX983d;
init_daemon_domain(qmcX983d)
#unconfined_domain(qmcX983d)

#add permission
allow qmcX983d gsensor_device:chr_file {open ioctl read write};
allow qmcX983d msensor_device:chr_file {open ioctl read write};
allow qmcX983d sysfs:file {open read write};

# Operate data partation directly, need modify later,e.g. use "data/misc/sensor".
file_type_auto_trans(qmcX983d, system_data_file, msensor_data_file)
allow qmcX983d system_data_file:dir { write add_name create setattr };
allow qmcX983d msensor_data_file:file { open write read create setattr};

#allow qmcX983d sysfs_bus_msensor_file:dir { search };
#allow qmcX983d sysfs_bus_msensor_file:file { open write read create setattr };
           

d) mediatek/common/sepolicy/basic/property.te 添加

type ctl_qmcX983d_prop, property_type;

e) mediatek/common/sepolicy/basic/msensord.te 添加

set_prop(msensord, ctl_qmcX983d_prop)

f) mediatek/common/sepolicy/basic/property_contexts 添加

ctl.qmcX983d u:object_r:ctl_qmcX983d_prop:s0

g) mediatek/mt6735/device.mk 添加

PRODUCT_PACKAGES += qmcX983d

3.添加相关库文件(vender目录)

a)添加 jrdchz/libs/qmcX983/Android.mk

LOCAL_PATH := (callmy−dir)include ( c a l l m y − d i r ) i n c l u d e (CLEAR_VARS)

LOCAL_MODULE = qmcX983d

LOCAL_MODULE_CLASS = EXECUTABLES

LOCAL_MODULE_OWNER = mtk

LOCAL_PROPRIETARY_MODULE = true

LOCAL_SHARED_LIBRARIES = libc++

LOCAL_MULTILIB = 32

LOCAL_SRC_FILES_32 = arm/qmcX983d

include $(BUILD_PREBUILT)

b) 添加库 jrdchz/libs/qmcX983/arm/qmcX983d

4.验证

原则上修改SELinux的问题需要全编译,为了节省时间可以使用以下方法调试

1.编译bootimage

2.烧录bootimage

3.执行adb root,adb remount

4.执行adb shell restorecon system/bin/xxx

5.重启手机,查看开机 log中是否成功启动qmcX983d服务