![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核与驱动
文章平均质量分 55
linux内核与驱动
饱饱浪迹天涯
认知扩展与重构
展开
-
【无标题】
3.注册major=register_chrdec(0.“first_drv”, &first_drv_fops);//名字可以随便写,注册根据主设备在VFS生成一个字符设备数组,以主设备号为索引(类型和主设备号)mdev(自动):根据system信息创建设备节点,创建一个类,类下面创建一个设备。mknod /dev/xxx c 111 0(手动)cat proc/devices 查看驱动设备。2.注册file_operations结构体。1.写出需要的驱动函数。创建设备节点,才能被打开。原创 2024-05-29 22:46:21 · 498 阅读 · 0 评论 -
内核常用调试方法
当调用BUG()时,内核通过panic()引发OOPS,导致函数调用栈的回溯和打印错误消息,可以把这两个调用当做断言使用,如BUG_ON(bad_thing);(3)内核需要未压缩的内核镜像文件,还需要在命令行提供core文件的命令。(4)使用printk()时也可以不指定优先级,这样的printk()会有一个默认的优先级,一般是KERN_WARNING。(2)优先级总共分为0-7这8个优先级,数字越低优先级越高,在使用printk()函数时通过优先级的宏定义指定。类似于Assert()函数。原创 2024-02-17 16:32:27 · 393 阅读 · 0 评论 -
Linux内核打印等级
打印等级有四个数字,这四个数字分别代表console_ loglevel (控制台日志等级)、default_message_loglevel (默认消息等级)、minimum_console_ loglevel (最低控制台日志等级)、default_console_loglevel (默认控制台日志的等级)。这四个等级定义在kernel/printk/ printk. c文件。作用: dmesg命令可以用来显示打印信息。原创 2023-12-28 11:47:04 · 1216 阅读 · 0 评论 -
驱动-定时器
Linux内核中有一个宏HZ,这个宏用来表示一-秒钟对应的节拍的数量。利用Linux内核中的这个宏,我们就可以把时间转换成节拍数。比如,定时一.秒钟换成节拍数就是expires= jiffies+1*HZ,其中jiffies为 系统当前时间对应的节拍数。内核定时器的精度不高,所以不能作为高精度定时器使用。基于未来时间点的计时是以当前时刻为计时开始的时间点,以未来的某一一时刻为计时的终点。宏HZ的值我们是可以设置的,也就是说一秒钟对应多少个节拍数我们是可以设置的。节拍数怎么和时间关联上呢?原创 2023-12-28 11:34:39 · 344 阅读 · 0 评论 -
驱动-IO模型
在驱动中,需要实现file_operations结 构体的poll函数。在驱动中的fasync函数中调用fasync_ helper函数来操作fasync_ struct结 构体,fasync_ helper函数原。poll和select基本一样,都可以监听多个文件描述符,通过轮询文件描述符来获取已经准备好的文件描述符。当设备准备好的时候,驱动程序需要调用kill_fasync函数通知应用程序,此时应用程序的SIGIO信号处。阻塞方式打开设备,这样从设备中读取数据的时候就是非阻塞方式的了。原创 2023-12-27 20:41:46 · 336 阅读 · 0 评论 -
并发与竞争
在这种情况下,CPU1的对memory的修改被CPU2的操作覆盖了,因此执行结果是错误的。2、多核系统中,单个的机器指令就不是原子操作,因为多核系统里是多指令流并行运行的,一个核在执行一个指令时,其他核同时执行的指令有可能操作同一块内存区域,从而出现数据竞争现象。多核系统中的原子操作通常使用内存栅障(memory barrier)来实现,即一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。线程:是进程内的执行单元,共享同一地址空间。原创 2023-12-26 12:28:56 · 1336 阅读 · 0 评论 -
RK3588 Lubancat SDK Ubuntu系统构建
野火提供了鲁班猫RK3588 Lubancat SDK,通过百度网盘下载。原创 2023-12-18 18:29:37 · 785 阅读 · 0 评论 -
输入子系统(三)源码及裁剪
驱动裁剪原创 2023-12-13 21:09:44 · 360 阅读 · 0 评论 -
输入子系统(二)系统框架
connect()函数位于evdev.c中,也就是事件处理层,其作用就是:创建设备,实现文件操作集,并且生成设备节点。在input_register_handler中使用input_attach_handler对input_handler和input_dev即事件处理层和设备驱动层进行进行匹配。在设备驱动层中,定义了input_dev结构体,此结构体位于input.h中,可以看到这个结构体非常长,这里面的部分函数需要我们自己实现。input子系统包括三个层次,分别是设备驱动层,核心层,事件处理层。原创 2023-12-12 15:49:36 · 372 阅读 · 0 评论 -
输入子系统(一)确定设备节点
输入子系统是Linux专门为输入类设备编写的一个子系统(框架)。从而规范驱动开发,降低开发难度。并且驱动的通用性兼容会更好。原创 2023-12-12 14:47:37 · 377 阅读 · 0 评论