Android应用层通过echo拉高gpio

Kernel: v3.0.36
Device: rk3188
Platform Version: Android 4.4.2

前言

有的时候,我们想通过应用层拉高gpio、进行例如点灯或者其他操作,但如果不熟悉kernel修改的,不知道怎么实现。下面介绍一种的办法

kernel修改

  1. 首先查看原理图,找到要控制的gpio引脚

  2. GPIO定义的位置

     kernel/arch/arm/mach-rk30/include/mach/gpio.h
    
  3. 再查看是否有被其他地方占用(例如)

     kernel/arch/arm/mach-rk3188/board-rk3188-box.c
    
  4. 修改在下面文件

    kernel/drivers/usb/dwc_otg/dwc_otg_driver.c
    此文件里有个debuglevel,可以仿照它

     static ssize_t test_show(struct device_driver *_drv, char *_buf)
     {
     	return 0;
     }
    
     static ssize_t test_store(struct device_driver *_drv, const char *_buf,
                       size_t _count)
     {
     	int value = (int)simple_strtoul(_buf, NULL, 16);
     		printk("test value=%d.\n", value);
     	if(value == 1)
     		gpio_set_value(RK30_PIN1_PB4, GPIO_HIGH);
     	else if(value == 0)
     		gpio_set_value(RK30_PIN1_PB4, GPIO_LOW);
     	return _count;
     }
     static DRIVER_ATTR(test, S_IRUGO|S_IWUSR, test_show, test_store);
    
     //原有
     if (driver_create_file(&dwc_otg_driver.driver, &driver_attr_debuglevel))
       pr_warning("DWC_OTG: Failed to create driver debug level file\n");
     //新增
     if (driver_create_file(&dwc_otg_driver.driver, &driver_attr_test))
     	 pr_warning("DWC_OTG: Failed to create driver debug level file\n");
    
  5. 编译烧录

    会在/sys/devices/platform/usb20_otg/driver/ 下生成test
    1

  6. 测试

    echo 0x1 > /sys/devices/platform/usb20_otg/driver/test
    1

应用层调用

在需要执行的地方调用

public static Process test(String[] command) {
    Process p = null;
    try {
        p = Runtime.getRuntime().exec("su");有su权限

        DataOutputStream os = new DataOutputStream(p.getOutputStream());
        for (String tmpCmd : cmds) {
            os.writeBytes(tmpCmd + "\n");
        }
        os.writeBytes("exit\n");
        os.flush();
        os.close();
        
    } catch (IOException e) {
        e.printStackTrace();
    }
    return p;
} 

public static void test2() {
	BufferedReader reader = null;
    Process process = null;
    try {
        process = test(new String[]{"echo 0x1 > /sys/devices/platform/usb20_otg/driver/test"});
        reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            if (DBG)
                Log.d(TAG, "shell msg : " + line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (reader != null)
                reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

转载请注明出处:http://www.wolfnx.com/2018/08/19/StupidWayToPullUpGpio

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值