Linux驱动开发
文章平均质量分 62
巴菲特的好弟弟-
这个作者很懒,什么都没留下…
展开
-
总线设备模型中对于适配同一个驱动不同设备的匹配问题
1.利用名称来适配在创建的platform_driver和platform_device中利用结构体内参数适配.name中定义相同的名称实例驱动static struct platform_driver led_driver = { .probe = led_probe, .remove = led_remove, .driver = { .name = "100ask_led", },};设备static s原创 2022-02-23 16:41:12 · 457 阅读 · 0 评论 -
初步认识总线设备模型机制
一、模型思想当插入设备时,总线会去寻找次设备对应的驱动,并且调用驱动的probe函数。不管先有驱动后有设备,或者先有设备后有驱动。都会调用驱动中的probe进行驱动的注册。注:并不是所以设备和驱动分别只有一条链表。有多条总线。eg: usb_bus | i2c_bus | spi_bus二、过程解析①构造platform_driver结构体和platform_device结构体②将二者在init函数中注册至总线中platform_driver_register( )负责注册平台驱动程序原创 2022-02-22 19:59:06 · 371 阅读 · 0 评论 -
Linux驱动—编写流程
一、编写驱动流程①确认主设备号查询LINUX系统中已经被使用过的主设备号cat /proc/devices②编写file_operations结构体struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*wr原创 2022-02-21 16:32:42 · 2173 阅读 · 0 评论 -
Linux字符设备驱动学习(6)——信号量
一、概念信号量本质是一个整数值,用于实现多线程和多进程之间的临界资源访问安全和合理性,即同步和互斥。当进程在等待对临界区的访问时,信号量可以让进程进入休眠状态。二、信号量与互斥量的区别1.互斥量用于线程的互斥,信号量用于线程的同步。2.互斥量只能为0,或1,信号量可以为非负整数。3.互斥量的加锁和减锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程获得。信号量的PV锁:P操作(加锁):若信号量的值 > 0,则该值-1,进程可以继续。若信号量的值 < 0,则进程必原创 2021-11-18 16:27:17 · 409 阅读 · 0 评论 -
Linux字符设备驱动学习(5)——/proc文件系统
一、概念①/proc文件系统可输出文件情况。例如:/proc/modules列出的是当前载入模块的列表。②/pro文件系统是动态的,驱动程序模块可以在任何时候添加或删除其中的入口项。二、Linux编写内核模块,实现在/proc目录下添加文件...原创 2021-11-17 11:47:05 · 824 阅读 · 0 评论 -
Linux字符设备驱动学习(4)——内核调试
一、内核开发的配置选项1.CONFIG_DEBUG_KERNEL该选项仅仅使得其他的调试选项可以。我们应该打开该选项,但它本身不会打开所以的调试功能。2.CONFIG_DEBUG_SLAB这是一个非常重要的选项,他打开内核内存分配函数中的多个类型检查:打开该检查后,就可以检测许多内存溢出及忘记初始化的错误。在将已分配内存返回给调用者之前,内核将把其中的每个字节设置为0xa5,而在释放后将其设置为0x6b。可在自己去的程序的输出或用过在oops信息中看字符判断问题所在。在打开调试选项后,内核还会在每个原创 2021-11-16 15:20:56 · 1937 阅读 · 0 评论 -
Linux字符设备驱动学习(2)——scull中的open、read、write方法
一、open和release1.打开设备(open)作用:提供给驱动程序以初始化的能力,为以后的操作完成初始化的准备工作流程:①检查设备特定的错误(eg:设备未就绪或硬件问题)。②若设备是首次打开,则对其进行初始化。③若有必要,更新f_op指针。④分配并填写置于filp->private_data里的的数据结构。原型:int (*open) (struct inode *inode, struct file *filp);// 1.inode函数在i_cdev字段(即先前设置的c原创 2021-11-15 16:15:43 · 1575 阅读 · 0 评论 -
Linux字符设备驱动学习(1)——设备的创建
一、设备编号的内部表达在内核中,dev_t类型用来保存设备编号。dev_t是一个32位的数,其中12位用来表示主设备号,20位用来表示此设备号。1.获得主设备号或此设备号MAJOR(dev_t dev); //主设备号MINOR(dev_t dev); //次设备号2.将设备号转换成dev_t类型MKDEV(int major, int minor);二、申请设备号1.静态手动申请int register_chrdev_region(dev_t first, unsigned i原创 2021-11-12 16:53:56 · 1269 阅读 · 0 评论 -
Linux字符设备驱动学习(3)——scull模块与驱动相关概念
一、scull介绍1.scull(Simple Character Utility for loading Localities),即区域装载的简单字符工具。scull是一个操作内存区域的字符设备驱动程序,这片区域相当于一个设备。2.优点scull和硬件无关,而只是操作从内核中分配的一些内存,任何人都可以编译和运行scull,并且可以将scull移植到Linux支持的计算机平台上。3.工作过程①Linux启动时运行加载驱动模块的脚本。insmod时调用模块的init函数进行初始化,调用cdev_i原创 2021-11-12 11:44:38 · 2146 阅读 · 0 评论