![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动
文章平均质量分 77
VClol
退路是留给失败者,想要接近梦想的人,没有退路可言
展开
-
platform设备驱动组织方式
1、 platform设备驱动组织方式(1)bus_type结构体,关键是match函数和uevent函数,每个总线根据自己的需要使用里面的资源 (2)比如我们的要定义一个平台总线,name就是总线名字,下面就是我们使用到的总线提供的部分资源。值得说明的是,里面的match,就是我们到时候device和driver匹配的函数。 (3...原创 2017-10-03 18:15:35 · 320 阅读 · 0 评论 -
移植加载自己的写的驱动(关键字:makefile和kconfig的编写、头文件包含)
1、编写自己的写的驱动 1.1 前言:驱动框架处理一些算法,数据结构,它是内核人员写的,内核并不知道你到底是什么样的硬件,所以无法进行硬件操作,真的对硬件操作的是我们驱动人员写的驱动,区分驱动和驱动框架。 1.2 makefile、kconfig、xxx.c (这3个文件需要我们自己创建) 1.2.1 kconfig:这个文件里面定义模块最...原创 2018-08-06 21:37:51 · 813 阅读 · 0 评论 -
内核使用链表管理misc驱动使用实例
1、misc类设备的使用链表1.1 内核在管理杂散类设备驱动时使用了链表,特点大小随意,代码开销大,效率低 内核在管理字符设备驱动时使用了数组,特点操作简单,效率高,大小固定 1.2 misc_list链表的作用。内核定义了一个misc_list链表用来记录所有内核中注册了的杂散类设备。当我们向内核注册一个misc类设备时,内核就会向misc_list链表中inse...原创 2018-04-16 20:56:25 · 215 阅读 · 0 评论 -
linux下编写驱动模块的概念与代码组成
1、概念(为什么需要模块)1.1 我们得到一个内核镜像后,想要增加功能时,两种方式: (1)一种方式是在配置选项中添加模块,重新编译内核,这样会很麻烦。 (2)找一个默认配置添加了全部功能的内核,这样内核太大了。 1.2 有没有一种机制使得编译出的内核本身并不需要包含所有功能,而在这些功能需要被使用的时候,其对应的代码被动态地加载到内核中呢? ...原创 2018-04-12 16:42:31 · 537 阅读 · 0 评论 -
MT7601 无线wifi驱动移植
1、插上wifi后,lsusb,会显示wifi的ID,所以我们要在驱动里面添加合适的ID官网下载后,确认USB的VID和PID,源码包中rtusb_dev_id.c文件,找到rtusb_dev_id[] ,在对应的WiFi厂家#ifdef添加比如我的WiFi硬件要添加的是USB_DEVICE(0x148f,0x7601)2、修改makefile(1)修改驱动工作的平台 PLATFO...原创 2018-07-24 17:12:04 · 1472 阅读 · 0 评论 -
静态加载驱动与insmod命令动态加载驱动
1、insmod动态加载驱动的作用(1)此类载入的模块,通常为设备驱动程序。设备驱动里面会使用到内核驱动,比如使用交叉编译或官网下载的一个在linux系统下工作的设备驱动,因为是针对linux系统而制作的,它知道内核支持的基本驱动,比如I2C、SPI、等操作硬件的驱动,协议驱动提供了标准的操作硬件的协议函数,而这个设备驱动里面正是调用了内核协议驱动工作2、静态加载驱动与动态加载的优缺点...原创 2019-04-26 18:29:05 · 1754 阅读 · 0 评论 -
编译模块命令make -C M=与make -C SUBDIRS=
modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules这句是Makefile的规则:这里的$(MAKE)就相当于make,-C选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules命令中加入“M=dir”,程序会自动到你所指定的dir目...转载 2019-04-25 14:40:30 · 30714 阅读 · 0 评论