当前位置: 首页 > 知识库问答 >
问题:

如何使用GPIO从挂起唤醒Android嵌入式板

公良渝
2023-03-14

我目前正在将Android 4.4(Kitkat)移植到嵌入式系统(基于Freescale I.MX6)。为了开始我的开发,我使用了一些开发套件(Wandboard、Boundary Device的BD-SL)。

在处理自定义板的电源管理时,我没有遇到暂停开发套件的问题。但是,我找不到如何将它们从睡眠中唤醒(除了电源循环它们)。唤醒系统的预期方式是在GPIO上获得中断(例如,基于Android的手机上的开关按钮)。

我想知道在GPIO中断的情况下将Android设备从挂起中唤醒的常用方法是什么。虽然这个问题似乎微不足道,但我很难从Google和专业论坛上的各种搜索中收集所需的所有信息。我找到了很多信息,但没有一个涵盖整个主题的信息。可能是因为我缺少所需的背景,所以我很难在没有代码示例的情况下将所有内容放在一起。我猜我不是唯一一个在这种情况下的人,因此这篇文章。

以下是我找到的一些信息:

    < li > Android PowerPanager和唤醒锁 < li>Android电源管理 < Li > I . MX6DQ/DL上的Android电源管理 < li>Android输入

共有1个答案

桂德义
2023-03-14

最后,我挖得太深了。代码示例就在我眼前。我需要的一切都在BD-SL devkit的板特定代码中(可以在BD-SL源代码树的< code > my droid/BD-SL-I . MX6/kernel _ imx/arch/arm/mach-MX6/board-MX6 _ nitrogen 6x . c 中找到)

此代码特定于飞思卡尔i.MX6提供的内核,但不同的部分应易于移植/适应其他Android嵌入式平台。

GPIO定义。为了简单起见,我省略了GPIO引脚多路复用器。该引脚需要复用到GPIO功能:

#define GP_ONOFF_KEY        IMX_GPIO_NR(2, 3)

输入键的定义

#define GPIO_BUTTON(gpio_num, ev_code, act_low, descr, wake)    \
{                               \
    .gpio       = gpio_num,             \
    .type       = EV_KEY,               \
    .code       = ev_code,              \
    .active_low = act_low,              \
    .desc       = "btn " descr,             \
    .wakeup     = wake,                 \
}

static struct gpio_keys_button buttons[] = {
    GPIO_BUTTON(GP_ONOFF_KEY, KEY_POWER, 1, "key-power", 1),
};

相应平台数据和平台设备的定义:

static struct gpio_keys_platform_data button_data = {
    .buttons    = buttons,
    .nbuttons   = ARRAY_SIZE(buttons),
};

static struct platform_device button_device = {
    .name       = "gpio-keys",
    .id     = -1,
    .num_resources  = 0,
    .dev        = {
        .platform_data = &button_data,
    }
};

平台设备的注册

static void __init add_device_buttons(void)
{
    platform_device_register(&button_device);
}

/*!
 * Board specific initialization.
 */
static void __init board_init(void)
{
    //...

    add_device_buttons();

    //...
}

为了完整起见,指向董事会特定初始化的初始化数据结构

/*
 * initialize data structure.
 */
MACHINE_START(MX6_NITROGEN6X, "Boundary Devices Nitrogen6X/SABRE Lite Board")
    /* Maintainer: Boundary Devices */
    .boot_params = MX6_PHYS_OFFSET + 0x100,
    .fixup = fixup_mxc_board,
    .map_io = mx6_map_io,
    .init_irq = mx6_init_irq,
    .init_machine = board_init,
    .timer = &timer,
    .reserve = reserve,
MACHINE_END
 类似资料:
  • 更新:我将键盘布局文件(gpio-keys.kl)更改为以下内容: 如图所示,我现在在Android中将音量按钮注册为POWER键,它会唤醒系统。但是,我希望任何通用 gpio 键都能唤醒系统。如上所述更改密钥布局文件的事实告诉我,也许问题出在Android端,而不是Linux内核端。不确定。也许在Android中有一些文件(策略文件等),我可以在其中为所选的gpio密钥提供唤醒功能,这与POWE

  • 我们正在开发一个运行在AndroidICS 4.0.4和3.0.35内核上的设备。我们面临的问题是设备电源管理和网络可达性。一旦设备从挂起模式启动,它就无法ping任何IP地址,比如8.8.8.8立即。有时需要一分钟或两分钟,有时它变得无法访问,告诉缓冲区空间不可用/目标无法访问。但是如果我们从外部ping这个设备ip,它正在响应,并且从设备端也开始从8.8.8.8获得ping回复,这种行为的原因

  • 本文向大家介绍HTML5如何唤醒APP?相关面试题,主要包含被问及HTML5如何唤醒APP?时的应答技巧和注意事项,需要的朋友参考一下 有以下几种方式 URL Scheme:最常见 Intent: // :Android Universal Link : iOS, 通过传统的 HTTP 链接即可打开 APP 唤醒途径 iframe的src a标签的src window.location 参考资料:

  • 问题内容: 我正在用C++编写程序。我注意到,它获得了许多线程,它们的目的是定期执行某项操作,其中有3或4个线程。我决定通过编写一个调度程序服务来重构,以便使用这些线程的其他地方可以预订该服务,这应该将我随时运行的额外事件线程的数量减少到一个。 我还没有使用此代码的代码。在开始编写之前,我想知道是否有可能,并获得有关我的设计的一些反馈。我要完成的任务的简要说明是这样的: 添加事件 呼叫者提供事件和

  • 问题内容: 我的Android应用程序使用HTTP向用户自己的PC发送数据/从用户自己的PC检索数据,并且与少数beta测试人员一起正常工作。我现在需要考虑PC处于休眠状态的情况。 我之前从未做过此事,但我在Google上搜索以找到有关WOL“魔术包”的信息以及一些用C语言编写的简单源(在客户端使用CAsyncSocket)。通过用户家庭网络上的wi- fi连接执行此操作可能相对简单,但理想情况下

  • SkylarkOS 获取音频数据不是走linux的portaudio的接口方式,我们自己定义了一个设备驱动/dev/gxvsp,通过对它的读来进行数据的获取。 通过我们编译出vsp.ko的操作。该驱动放在文件系统的/lib/modules/4.2.25 输出音频只支持:16K,16bit,单声道,PCM音频数据 操作接口参考:vsp_ioctl.h /* Voice Signal Preproce