中断编程5

<异步信号通知应用程序编程>

笔记

欲速则不达,建议先完成 的任务!

继续学习

通关时间从学习第1个课程开始计时

15天内通关,可获得赏金100元

开始学习
该课程需要登录后才能观看
3400 位同学正在学习! 查看详情

福州a严彬a嵌入式

3

回答

关于fasync_helper的问题

福州a严彬a嵌入式回复:

fasync_helper -》 fasync_add_entry -》fasync_insert_entry 

struct fasync_struct *fasync_insert_entry(int fd, struct file *filp, struct fasync_struct **fapp, struct fasync_struct *new)

{

        struct fasync_struct *fa, **fp;


spin_lock(&filp->f_lock);

spin_lock(&fasync_lock);

        //如果fa->fa_file这个就会是空指针,如果不实例化就会报错

for (fp = fapp; (fa = *fp) != NULL; fp = &fa->fa_next) {

if (fa->fa_file != filp)

continue;


spin_lock_irq(&fa->fa_lock);

fa->fa_fd = fd;

spin_unlock_irq(&fa->fa_lock);

goto out;

}


spin_lock_init(&new->fa_lock);

new->magic = FASYNC_MAGIC;

new->fa_file = filp;

new->fa_fd = fd;

new->fa_next = *fapp;

rcu_assign_pointer(*fapp, new);

filp->f_flags |= FASYNC;


out:

spin_unlock(&fasync_lock);

spin_unlock(&filp->f_lock);

return fa;

}



王豫新

2

回答

workqueue下半部

MAKERU930671012回复:

内核启动后会创建一个工作线程和一个工作队列,也就是说内核会提供一个工作队列给所有人共用 。视频中采用的schedule_work() 就是将工作添加到这个内核提供的共享的工作队列中,因此自然而然的也就不需要释放这个工作队列的内存资源。如果采用"自己创建一个工作队列"这种方式的话,模块退出时就要释放资源了。

上次保存笔记

看见好看好看就很快很快就会看见

保存 修改