摘要: pinctl和gpio子系统 1.什么是pinctrl和gpio子系统? ​ pinctrl子系统是用来设置引脚的复用关系和电气属性的, gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了, 比如引脚的输入输出,高低电平等 2.Linux 阅读全文
posted @ 2024-04-25 22:35 爱吃冰激凌的黄某某 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 一.什么是设备树? 设备树是一种描述硬件资源的数据结构。它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。 有了初步概念之后,我们再来一起探讨设备树的起源。 二.设备树的由来 要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前我们是怎么来写一 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(34) 评论(0) 推荐(0) 编辑
摘要: Platform 设备驱动 1.什么是平台总线模型? 平台总线模型也叫platform总线模型。是Linux内核虚拟出来的一条总线,不是真实的导线。 平台总线模型就是把原来的驱动C文件给分成了俩个C文件,一个是device.c,一个是driver.c 把稳定不变的放在driver.c里面,需要变得就 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 自动创建设备节点 自动创建设备节点简介 ​ 在嵌入式 Linux 中使用 mdev 来实现设备节点文件的自动创建和删除。 ​ udev 是一种工具, 它能够根据系统中的硬件设备的状态动态更新设备文件, 包括设备文件的创建, 删除等。 设备文件通常放在/dev 目录下。 使用 udev 后, 在/de 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 注册字符类设备 注册字符类设备简介 ​ 在 Linux 内核中, 使用 cdev 结构体描述一个字符设备, cdev 结构体的定义如下: struct cdev { //描述字符设备的一个结构体 struct kobject kobj; struct module *owner; const str 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 申请字符类设备号 字符设备号简介 ​ Linux 的设备管理是和文件系统紧密结合的, 各种设备都以文件的形式存放在/dev 目录下, 称为设备文件。 应用程序可以打开、 关闭和读写这些设备文件, 完成对设备的操作, 就像操作普通的数据文件一样。 ​ 为了管理这些设备, 系统为设备编了号, 每个设备号 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 驱动模块传参数 1.什么是驱动传参 ​ 驱动传参就是传递参数给我们的驱动。 举例: ​ insmod beep.ko a=1 2.驱动传参数有什么作用呢? ​ (1)设置驱动的相关参数,比如设置缓冲区的大小 ​ (2)设置安全校验,防止我们写的驱动被人盗用 3.怎么给驱动传参数? 传递普通的参数, 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 第一个相对完整的驱动实践编写 需求: ​ 1.使用杂项设备完成一个蜂鸣器的驱动。 ​ 2.完成一个上层测试应用。 ​ 应用要求:在上层应用中传入参数1为打开蜂鸣器,传入参数0为 关闭蜂鸣器。 buzzer.c #include <linux/init.h> #include <linux/modul 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(9) 评论(0) 推荐(0) 编辑
摘要: Linux物理地址到虚拟地址映射 1.在单片机和裸机中我们操作硬件是怎么操作的? 我们可以这样来操作我们的寄存器 unsigned int *p = 0x12345678; *p = 0x87654321; 但是在Linux上不行,在Linux上,如果要想操作硬件,需要先把物理地址转换成虚拟地址。因 阅读全文
posted @ 2024-04-25 22:34 爱吃冰激凌的黄某某 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 应用层和内核层实现数据交互 Linux一切皆文件! 文件对应的操作有打开,关闭,读写 设备节点对应的操作有打开,关闭,读写 设备节点 ​ 在 Linux 中, 所有设备都以文件的形式存放在/dev 目录下, 都是通过文件的方式进行访问, 设备节点是 Linux 内核对设备的抽象, 一个设备节点就是一 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 杂项设备驱动 Linux三大设备驱动 字符设备:IO的传输过程是以字符为单位的,没有缓冲。比如I2C,SPI都是字符设备 块设备:IO的传输过程是以块为单位的。根存储相关的,都属于块设备,比如,tf卡 网络设备:与前俩个不一样,是以socket套接字来访问的。 1.我们这节课要讲的杂项设备驱动是属于 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(21) 评论(0) 推荐(0) 编辑
摘要: Linux下把驱动编译进内核 需求: 把前面课程学习的helloworld驱动编译到内核。 例子: source"drivers/redled/Kconfig" config LED_4412 tristate "Led Support for GPIO Led" depends on LEDS C 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(64) 评论(0) 推荐(0) 编辑
摘要: make menuconfig图形化配置 1.怎么进入到make menuconfig图形化界面? 首先进入到内核源码的路径下,然后输入make menuconfig即可打开这个界面。 2.make menuconfig图形化界面的操作。 1.搜索功能 输入“”/“”即可弹出搜索界面,然后输入我们想 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(55) 评论(0) 推荐(0) 编辑
摘要: Linux下编译驱动模块实践 分析: 1.先去内核源码里面去搜索,如果有的话,我们可以直接选择这个驱动,然后直接使用。 2.假如没有这个驱动,我们需要自己编译一个驱动,然后加载到内核里面去运行。 CH340 Linux驱动下载链接: http://www.wch.cn/download/CH341S 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(24) 评论(0) 推荐(0) 编辑
摘要: Linux最简单驱动-helloworld 驱动分为四个部分: ​ 头文件 ​ 驱动模块的入口和出口 ​ 声明信息 ​ 功能实现 第一步,包含头文件 #include <linux/init.h> 包含宏定义的头文件 #include <linux/module.h> 包含初始化加载模块的头文件 第 阅读全文
posted @ 2024-04-25 22:33 爱吃冰激凌的黄某某 阅读(58) 评论(0) 推荐(0) 编辑