我需要在USB内核模块中添加一个很短的延迟,以避免在小型嵌入式Linux设备启动时出现极其罕见的内核恐慌。下面是有问题的代码。如果我在代码中输入一个prink,设备就会在以前失败的地方成功运行一整晚。我想添加一个小的延迟,但是usleep_range和msleep会导致内核跟踪“调度时原子”。如何在这一段代码中添加延迟而不休眠呢?一段时间循环是实现它的方法吗?
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();
}发布于 2017-07-18 11:51:55
Header linux/delay.h提供没有睡眠的延迟函数。这些函数可用于中断(原子)上下文:
https://stackoverflow.com/questions/45165401
复制相似问题