- 博客(53)
- 收藏
- 关注
原创 嵌入式Linux驱动开发(十一)异步通知
非阻塞IO通过轮询poll的方式查询设备使用情况,如果能通过一种类似中断的机制,由驱动程序主动通知应用程序,就可以提高效率。异步通知的核心就是“信号”,内核signal.h文件中提供了很多信号,相当于一种软件层面的“中断”。 应用程序中用signal函数设置指定信号的从处理函数,函数原型为: 当我们按下Ctrl+C其实是向正在占用终端的App发出SIGINT信号,默认是关闭当前App。我们可以修改一下SIGINT信号的处理函数,使得按下Ctrl+C的时候先打印“SIGINT signal!”再关闭
2023-04-25 20:44:49
715
原创 嵌入式Linux驱动开发(十)Linux阻塞和非阻塞IO
阻塞IO:App对设备驱动进行操作时,如果无法获取到设备资源,就将应用对应的线程挂起直到可以获取。非阻塞IO:不会挂起对应线程,会一直轮询等待,或者直接放弃。1.2 等待队列1)等待队列头 阻塞访问时,进入休眠态的线程可以在中断中被唤醒。内核中用wait queue实现唤醒。可以使用以下方式初始化一个等待队列头(对应结构体wait_queue_head_t)。2)等待队列项 结构体wait_queue_t表示等待队列项。每一个等待中的进程/线程都是一个项。3)队列项添加/移除队列头 设
2023-04-25 15:24:52
924
原创 嵌入式Linux驱动开发(八)内核定时器
Linux内核使用timer_list结构体表示内核定时器。使用时需要提供超时时间和定时处理函数,要注意的是内核定时器不会周期性运行,所以需要在处理函数中重新开启定时器才可以周期定时。或者修改内核.config文件下的CONFIG_HZ项也可以。③del_timer:删除一个定时器。④del_timer_sync:删除一个定时器(同步版)。②add_timer:向内核注册定时器。⑤mod_timer:修改定时值,如果定时器还没激活,会进行激活。①init_timer:初始化timer_list类型变量。
2023-04-11 16:34:39
211
原创 嵌入式Linux驱动开发(七)并发与竞争
①多线程并发访问。②抢占式并发访问。③中断程序并发访问。④SMP(多核)核间并发访问。存在于多核CPU之间。**竞争:**多个线程同时操作临界区。
2023-04-03 10:43:33
368
原创 嵌入式Linux驱动开发(六)pinctrl和gpio子系统实验
*目的:**简化GPIO驱动开发。***注意点:***每当配置一个PIN为GPIO时,需要确定该GPIO是否有被别的外设使用。-----------在vscode里对DTS搜索。
2023-03-31 21:05:41
729
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人