start_kernel 怎么调到INIT_WAITQUEUE_HEAD
时间: 2023-08-13 08:03:23 浏览: 100
fifo-queue.zip_Finish_can FIFO_fifo queue_wait queue
start_kernel() 函数并没有直接调用 INIT_WAITQUEUE_HEAD() 宏来初始化等待队列。实际上,等待队列的初始化是在宏定义 DECLARE_WAIT_QUEUE_HEAD(name) 中完成的。
DECLARE_WAIT_QUEUE_HEAD(name) 宏定义了一个等待队列头部的结构体变量,并使用 __WAIT_QUEUE_HEAD_INITIALIZER 宏对该结构体进行初始化。__WAIT_QUEUE_HEAD_INITIALIZER 宏是一个内部宏,用于初始化等待队列头部的双向链表。
在内核源代码中,INIT_WAITQUEUE_HEAD() 宏是由 DECLARE_WAIT_QUEUE_HEAD() 宏调用的。例如,在某个模块中定义了一个等待队列 my_waitqueue,可以使用以下代码来对这个队列进行初始化:
```c
DECLARE_WAIT_QUEUE_HEAD(my_waitqueue);
```
这个宏定义会生成以下代码:
```c
wait_queue_head_t my_waitqueue = __WAIT_QUEUE_HEAD_INITIALIZER(my_waitqueue);
```
这个代码会定义一个名为 my_waitqueue 的等待队列,并初始化它的头部节点。等待队列的头部节点是一个 wait_queue_head_t 结构体,它包含了一个双向链表,用于存储等待这个事件的任务。
因此,虽然 INIT_WAITQUEUE_HEAD() 宏也可以用于初始化等待队列,但在实际使用中,更常见的是使用 DECLARE_WAIT_QUEUE_HEAD() 宏来定义和初始化等待队列。
阅读全文