news 2026/10/15 19:32:10

Linux驱动(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux驱动(2)
6. 中断
  1. 概念:

    中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停当前程序的执行,转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行。中断可以分为:内部中断和外部中断,内部中断来源于CPU内部,外部中断来源自CPU外部。

  2. 中断上半部:

    1. 也称为中断顶半部,用于完成尽量少的比较紧急的功能,通常被设置为不可被新中断打断。

    2. 使用场景:

      • 要处理的内容不希望被其他中断打断

      • 要处理的任务对时间敏感

      • 要处理的任务与硬件有关

  3. 中断下半部:

    1. 也称为中断底半部,用来完成中断事件绝大多数任务,可以被新的中断打断,底半部相对来说并不是非常紧急,而且相对比较耗时。

    2. 使用场景:

      • 完成并不是非常紧急的耗时的任务

      • 可以被打断

    3. 中断下半部四种实现方式:

      1. 软中断:软中断和tasklet运行于中断上下文,不允许睡眠

      2. tasklet:tasklet的实现是靠软中断,因为中断中不能长时间执行某个任务所以要快进快出,且不允许睡眠

      3. 工作队列:工作队列运行在进程上下文,所以允许睡眠,哪怕中断执行完后,有可能工作队列还未执行

7. 内核定时器
  1. **概念:**在内核中表示系统一秒所对应的节拍数量,目前为100。在内核中的.config中定义,jiffies表示系统节拍,记录系统启动到当前累加的数字,如果想通过内核定时器计时则定时时间为:jiffers + (N*100)定时时间到达后可以调用回调函数。

  2. 定时器驱动代码

    #include <linux/fs.h> #include <linux/module.h> #include <linux/cdev.h> #include <linux/init.h> #include <linux/timer.h> static void timeout(unsigned long data) { pr_info("timeout ok!\n"); return; } static DEFINE_TIMER(mtimer, timeout, 0, 0); static int __init kernel_timer_init(void) { init_timer(&mtimer);//初始化定时器 add_timer(&mtimer);//激活定时器 mod_timer(&mtimer, jiffies + msecs_to_jiffies(200));//jiffies表示的是当前时间,当前时间超过1s pr_info("add timer success\n"); return 0; } static void __exit kernel_timer_exit(void) { del_timer(&mtimer);//删除定时器 pr_info("del timer success\n"); return; } module_init(kernel_timer_init); module_exit(kernel_timer_exit); MODULE_LICENSE("GPL");
  3. 延时与睡眠的区别

    Linux内核实现了延时函数,delay相关函数是忙等待,一直占用CPU资源。sleep相关函数不会一直占用CPU资源,会在睡眠的过程中释放CPU,让进程挂起,但是Linux系统是非实时操作系统,所以当CPU切换出该进程到CPU切换回该进程中间的时间一般大于睡眠设定的时间。

    函数名功能
    ndelay忙等待延时ns
    udelay忙等待延时us
    mdelay忙等待延时ms
    msleep睡眠ms
    msleep_interruptible可中断睡眠ms
    ssleep睡眠s
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 19:31:41

企业微信官方 API 与第三方 RPA 有什么区别?

选型会上最常问的一句&#xff1a;我们到底用官方 API&#xff0c;还是上第三方 RPA&#xff1f; 答案不是谁更「高级」&#xff0c;而是 你的场景卡在哪。选错了&#xff0c;后面全是改造成本。 一句话对比 官方 API&#xff1a;规则清晰、生态正规&#xff0c;能力边界明确&…

作者头像 李华
网站建设 2026/10/15 19:29:16

Flink-SQL实时开发实战:从DataStream到SQL的流批一体与窗口聚合调优

1. 为什么 Flink-SQL 成了实时开发的主流姿势刚接触实时计算那会儿&#xff0c;我写的是 DataStream API&#xff0c;一个简单的过滤聚合逻辑要敲上百行 Java 代码&#xff0c;光是定义 POJO、注册 TypeInformation、处理窗口触发就能耗掉大半天。后来团队接了一个实时报表需求…

作者头像 李华
网站建设 2026/10/15 19:28:56

高中语文名师教案资源包:统编版必修与选择性必修全册教学设计课件配套,218个文件覆盖21个单元

资源概述 高中语文教学资源是教师备课的重要依据。本文介绍的这套资源包&#xff0c;围绕统编版高中语文教材编写&#xff0c;覆盖必修与选择性必修各册内容&#xff0c;为一线教师提供较为完整的教学参考素材。 文中资料 查阅配套内容 内容结构与覆盖范围 该资源包按教材册次…

作者头像 李华
网站建设 2026/10/15 19:27:38

linux || | ; 有什么作用能不能组合?

touch | | &#xff1b;管道符号创建1.txt文件后 输出内容zwb 查看 文件内容ls && &#xff1b;运行不成功时不运行下一个 运行成功时候才会运行下一个命令管道组合命令ls || &#xff1b;成功时不运行下一个ls || &#xff1b;不成功时运行下一个; 同时运行3条命令…

作者头像 李华
网站建设 2026/10/15 19:27:38

饥荒烹饪锅Mod开发:从源码读懂自定义料理配方与优先级机制

简介&#xff1a;这是一份面向《饥荒》模组开发者的Lua源码包&#xff0c;用于在烹饪锅中实现自定义食物&#xff0c;主要解决玩家不理解食物定义、食谱注册与效果触发等问题&#xff0c;适合刚接触mod编写或想复刻食物逻辑的游戏玩家。资源以zip压缩包形式发布&#xff0c;共1…

作者头像 李华