《Linux Device Drivers Development》——Chap 3 Kernel Facilities and Helper Functions

container_of()

用于获取某指针所属的结构体。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Linked Lists

Linked List是基于双向链表的。后续内容基于下列数据结构。
在这里插入图片描述

创建和初始化Linked List

仅介绍动态方法。
在这里插入图片描述

创建一个list节点

在这里插入图片描述

添加

在这里插入图片描述
stack式Linked List
在这里插入图片描述
Queue式Linked List
在这里插入图片描述

删除一个list节点

在这里插入图片描述

遍历Linked List

acar充当遍历时的迭代器,carlist为指向Linked List的头节点,list为struct car结构体内list_head结构体类型的成员名(与该API内调用了container_of()宏有关)。

在这里插入图片描述

Kernel Sleeping Mechanism

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

static DECLARE_WAIT_QUEUE_HEAD(my_wq); //静态声明了一个wait_queue

INIT_WORK(&wrk, work_handler); //为work_struct注册一个回调函数
schedule_work(&wrk);  //开始调度该work_struct,执行work_handeler

//阻塞等待my_wq,直到my_wq内一进程已调用wake_up_interruptible()和condition != 0(同时满足)
wait_event_interruptible(my_wq, condition != 0); 

在这里插入图片描述

Delay and timer management

High resolution timers(HRTs)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Delays and sleep in the kernel

Atomic context

在这里插入图片描述
在这里插入图片描述

Nonatomic context

在这里插入图片描述

Kernel locking mechanism

Mutex

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spinlock

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spinlock VS mutextes

在这里插入图片描述

Work deferring mechannism

Tasklets

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例子代码更正:

DECLARE_TASKLET(my_tasklet, tasklet_work, (unsigned long)tasklet_data);

static void __exit my_exit(void)
{
	//***
}

在这里插入图片描述
在这里插入图片描述

Work queues

在这里插入图片描述
在这里插入图片描述

Kernel-global workqueue - the shared queue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Dedicated work queue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Predefined workqueue

在这里插入图片描述

Kernel interruption mechanism

Registering an interrupt handler

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Interrupt handler and lock

总结:若要处理共享数据,用户空间的代码使用spin_lock_irqsave(),中断处理函数使用spin_lock()即可。若共享数据被多个不同中断处理函数使用,使用spin_lock_irqsave()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Threaded IRQs

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Invoking user-space application from the kernel

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值