gpt4 book ai didi

linux - 如何延迟 Linux 内核模块临界区

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:08 25 4
gpt4 key购买 nike

我需要在 USB 内核模块中添加短暂的延迟,以避免小型嵌入式 Linux 设备启动时出现极其罕见的内核 panic 。有问题的代码如下。如果我在代码中添加一个恶作剧,设备就会成功地运行一整夜,而之前它会失败。我想添加一个小的延迟,但 usleep_range 和 msleep 会导致内核回溯“原子调度”。如何在不 sleep 的情况下在这段代码中添加延迟?是 while 循环的方法吗?

usb_hub_for_each_child(udev, chix, childdev) {
printk(KERN_ERR "r8a66597: Start USB Discover\n");
//usleep_range(10000, 11000);
//preempt_disable();
//msleep(1);
collect_usb_address_map(childdev, map);
//usleep_range(10000, 11000);
printk(KERN_ERR "r8a66597: Stop USB Discover\n");
//msleep(1);
//preempt_enable();
}

最佳答案

标题linux/delay.h提供延迟不 sleep 功能。这些函数可以在中断(原子)上下文中使用:

  • ndelay(ns) - 等待给定的纳秒数,
  • udelay(us) - 等待给定的微秒数,
  • mdelay(ms) - 等待给定的毫秒数。

关于linux - 如何延迟 Linux 内核模块临界区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45165401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com