ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android通过rc文件控制GPIO口启动车载功放

2021-05-31 23:02:11  阅读:270  来源: 互联网

标签:功放 vendor 33 rc init sh GPIO gpio


自制的车载导航连接到功放,在系统启动期间,主板未初始化完成,音频口输出的噪音直接输出到功放上,非常影响感知,解决的方法就是在系统启动完成后再开启功放。

因为车载功放是带启动端口(REM)的,只要给这个端口12V供电,就可以开启功放。所以在系统启动完成后,通过主板的GPIO口控制继电器闭合,给功放的控制口加12V电压,启动功放,就可以解决启动过程中的噪声问题了。

所用的开源主板带的安卓系统底层已经有GPIO驱动了,所需要作的就是编写脚本控制系统在系统启动完成后将指定的GPIO口电平从0变成1就好了。

我用的主板是Orange Pi 4(RK3399芯片),Android 8.1系统。

大致步骤如下:

1.编写GPIO口控制脚本,命名为setup_gpio.sh

#!/system/bin/sh 
echo 33 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio33/direction
echo 1 > /sys/class/gpio/gpio33/value

上面33号GPIO口对应我的主板是GPIO1_A1,用跳线接到继电器的输入口。

2.编写rc文件

修改device/rockchip/common/init.rockchip.rc,在末尾添加如下脚本:

on property:sys.boot_completed=1  
	chmod 0777 /system/vendor/bin/setup_gpio.sh
	start init_gpio_33

#init gpio33
service init_gpio_33 /system/vendor/bin/setup_gpio.sh
    user root
    group root
    disabled
    oneshot
	seclabel u:r:init_gpio_33:s0

把setup_gpio.sh作为一个服务,并且在系统启动完成后(sys.boot_completed=1),启动这个服务,执行setup_gpio.sh这个脚本

3.编写selinux安全策略

(1)在system/sepolicy/vendor/file_contexts文件中添加一行:

/(vendor|system/vendor)/bin/init_gpio_33 u:object_r:init_gpio_33_exec:s0

(2)在system/sepolicy/vendor/文件夹下添加init_gpio_33.te文件:

type init_gpio_33, domain;
type init_gpio_33_exec,exec_type,file_type,vendor_file_type;

init_daemon_domain(init_gpio_33)

allow init_gpio_33 self:capability { dac_override};
allow init_gpio_33 shell_exec:file { getattr read};
allow init_gpio_33 sysfs:file { open write};

4.修改板配置文件:device/rockchip/rk3399/rk3399_mid/BoardConfig.mk,添加一行:

PRODUCT_COPY_FILES += device/rockchip/rk3399/rk3399_mid/setup_gpio.sh:vendor/bin/setup_gpio.sh

安装系统的时候自动复制setup_gpio.sh脚本文件到目标目录下。

经过上述步骤后,重新编译一次系统,等系统启动完成后,继电器闭合,启动功放,问题完美解决。

标签:功放,vendor,33,rc,init,sh,GPIO,gpio
来源: https://blog.csdn.net/babyshan1/article/details/117431187

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有