合集-Linux驱动
摘要:Linux最简单驱动-helloworld 驱动分为四个部分: 头文件 驱动模块的入口和出口 声明信息 功能实现 第一步,包含头文件 #include <linux/init.h> 包含宏定义的头文件 #include <linux/module.h> 包含初始化加载模块的头文件 第
阅读全文
摘要:Linux下编译驱动模块实践 分析: 1.先去内核源码里面去搜索,如果有的话,我们可以直接选择这个驱动,然后直接使用。 2.假如没有这个驱动,我们需要自己编译一个驱动,然后加载到内核里面去运行。 CH340 Linux驱动下载链接: http://www.wch.cn/download/CH341S
阅读全文
摘要:make menuconfig图形化配置 1.怎么进入到make menuconfig图形化界面? 首先进入到内核源码的路径下,然后输入make menuconfig即可打开这个界面。 2.make menuconfig图形化界面的操作。 1.搜索功能 输入“”/“”即可弹出搜索界面,然后输入我们想
阅读全文
摘要:Linux下把驱动编译进内核 需求: 把前面课程学习的helloworld驱动编译到内核。 例子: source"drivers/redled/Kconfig" config LED_4412 tristate "Led Support for GPIO Led" depends on LEDS C
阅读全文
摘要:杂项设备驱动 Linux三大设备驱动 字符设备:IO的传输过程是以字符为单位的,没有缓冲。比如I2C,SPI都是字符设备 块设备:IO的传输过程是以块为单位的。根存储相关的,都属于块设备,比如,tf卡 网络设备:与前俩个不一样,是以socket套接字来访问的。 1.我们这节课要讲的杂项设备驱动是属于
阅读全文
摘要:应用层和内核层实现数据交互 Linux一切皆文件! 文件对应的操作有打开,关闭,读写 设备节点对应的操作有打开,关闭,读写 设备节点 在 Linux 中, 所有设备都以文件的形式存放在/dev 目录下, 都是通过文件的方式进行访问, 设备节点是 Linux 内核对设备的抽象, 一个设备节点就是一
阅读全文
摘要:Linux物理地址到虚拟地址映射 1.在单片机和裸机中我们操作硬件是怎么操作的? 我们可以这样来操作我们的寄存器 unsigned int *p = 0x12345678; *p = 0x87654321; 但是在Linux上不行,在Linux上,如果要想操作硬件,需要先把物理地址转换成虚拟地址。因
阅读全文
摘要:第一个相对完整的驱动实践编写 需求: 1.使用杂项设备完成一个蜂鸣器的驱动。 2.完成一个上层测试应用。 应用要求:在上层应用中传入参数1为打开蜂鸣器,传入参数0为 关闭蜂鸣器。 buzzer.c #include <linux/init.h> #include <linux/modul
阅读全文
摘要:驱动模块传参数 1.什么是驱动传参 驱动传参就是传递参数给我们的驱动。 举例: insmod beep.ko a=1 2.驱动传参数有什么作用呢? (1)设置驱动的相关参数,比如设置缓冲区的大小 (2)设置安全校验,防止我们写的驱动被人盗用 3.怎么给驱动传参数? 传递普通的参数,
阅读全文
摘要:申请字符类设备号 字符设备号简介 Linux 的设备管理是和文件系统紧密结合的, 各种设备都以文件的形式存放在/dev 目录下, 称为设备文件。 应用程序可以打开、 关闭和读写这些设备文件, 完成对设备的操作, 就像操作普通的数据文件一样。 为了管理这些设备, 系统为设备编了号, 每个设备号
阅读全文
摘要:注册字符类设备 注册字符类设备简介 在 Linux 内核中, 使用 cdev 结构体描述一个字符设备, cdev 结构体的定义如下: struct cdev { //描述字符设备的一个结构体 struct kobject kobj; struct module *owner; const str
阅读全文
摘要:自动创建设备节点 自动创建设备节点简介 在嵌入式 Linux 中使用 mdev 来实现设备节点文件的自动创建和删除。 udev 是一种工具, 它能够根据系统中的硬件设备的状态动态更新设备文件, 包括设备文件的创建, 删除等。 设备文件通常放在/dev 目录下。 使用 udev 后, 在/de
阅读全文
摘要:Platform 设备驱动 1.什么是平台总线模型? 平台总线模型也叫platform总线模型。是Linux内核虚拟出来的一条总线,不是真实的导线。 平台总线模型就是把原来的驱动C文件给分成了俩个C文件,一个是device.c,一个是driver.c 把稳定不变的放在driver.c里面,需要变得就
阅读全文
摘要:一.什么是设备树? 设备树是一种描述硬件资源的数据结构。它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。 有了初步概念之后,我们再来一起探讨设备树的起源。 二.设备树的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前我们是怎么来写一
阅读全文
摘要:pinctl和gpio子系统 1.什么是pinctrl和gpio子系统? pinctrl子系统是用来设置引脚的复用关系和电气属性的, gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了, 比如引脚的输入输出,高低电平等 2.Linux
阅读全文
摘要:ioctl接口 struct file_operations { ...... long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); ...... }; 1.什么是unlocked_ioctl接口? unlock
阅读全文
摘要:Linux中断 1.什么是中断? CPU在正常运行期间,由外部或者内部引起的事件,让CPU停下当前正在运行的程序,转而去执行触发他的中断所对应的程序,这个就是中断。 举例: 我现在正在厨房做饭,突然电话响了,然后我关火去接电话,接完电话在回去开火继续做饭,这个过程就是中断的一个过程。 在这个看似简单
阅读全文
摘要:内核定时器 一.Linux内核定时器概念 不同于单片机定时器,Linux内核定时器是一种基于未来时间点的计时方式,以当前时刻为启动的时间点,以未来的某一时刻为终止点。比如,现在是10点5分,我要定时5分钟,那么定时就是10点5分+5分钟=10点10分。这个和咱们的手机闹钟很类似。比如你要定一个第二天
阅读全文
摘要:输入子系统 什么是输入子系统? 输入子系统是Linux专门做的一套框架来处理输入事件的,像鼠标,键盘,触摸屏这些都输入设备。但是这些输入设备的类型又都不是一样的,所以为了统一这些输入设备驱动标准应运而生的。 统一了以后,在节点/dev/input下面则是我们输入设备的节点,如下图所示:
阅读全文
摘要:Linux I2C 驱动 一.I2C 简介 I2C 是很常见的一种总线协议, I2C是NXP公司设计的,I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是 SDA(串行数据线),因为I2C这两条数据线是开漏输出的,所以需要接上拉电阻,总线空闲的时候 SCL
阅读全文