1

我试图在 Linux 启动时让嵌入式设备中的 LED 闪烁。基本上 LED 闪烁表明 Linux 正在启动。为了使 LED 闪烁,我正在做以下事情

  1. 在 init/main.c static struct timer_list pwr_led_timer 中创建了一个全局定时器(LED 闪烁定时器);

  2. 在使用的 start_kernel() setup_timer 和 mod_timer 函数中完成 init_timers() 函数后立即启动计时器。

  3. 当定时器触发时,在定时器处理程序中,LED 被切换。计时器重新启动。

  4. 当内核完成整个启动过程时,我将关闭 LED 并删除计时器。del_timer_sync(&pwr_led_timer);

问题:我想从我的应用程序的用户空间停止定时器和 LED 开关,而不是在内核处停止(即第 4 点)。是否有一种标准方法可以从用户空间停止内核运行计时器?

由于 pwr_led_timer 是全局结构,是否可以使用任何 IOCTL 调用从用户空间停止计时器?我的想法是做一些 IOCTL 并访问内核。由于 pwr_led_timer 是全局的,在 IOCTL 中我可以使用 pwr_led_timer 调用 del_timer_sync()。但不确定我应该向 IOCTL 打开哪个设备(?)

抱歉,我是内核/驱动程序编程的新手。我试图搜索网络但无法获得任何线索。

如果有人有任何意见,请告诉我。提前致谢。

问候, 艾默生

4

1 回答 1

0

您是否考虑过尝试netlink?它是一种强大的用户到内核(或进程到进程)通信的方法,既简单又轻量级。

于 2013-07-08T14:16:50.360 回答