
linux驱动相关
注重框架
海绵宝宝去哪儿了
framework
展开
-
i.mx6ull裸机——GPIO中断
1. 中断向量表中断向量表是一个表,这个表里面存放的是中断向量。中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。中断向量表在整个程序的最前面,比如 STM32F103 的中断向...原创 2020-02-15 14:12:06 · 2136 阅读 · 0 评论 -
7. 利用of函数读取设备树中的信息(test)
知识点:关于设备树of函数的使用知识点请看Linux设备树常用的OF函数总结关于设备树其他相关知识点抢看:Linux驱动相关基础知识实验:目的:本次实验的目的是测试linux下使用of函数读取设备树中某个结点的信息;内容:利用of函数,在上一次实验5. led驱动控制:使用register_chrdev_region的基础上,编写一个函数;在函数中使用of函数,读取arch\arm\boot\dts\imx6ull-alientek-emmc.dts里面的(根节点下)的属性信息属性请查看文原创 2020-06-14 21:19:21 · 692 阅读 · 0 评论 -
Linux设备树常用的OF函数总结
一 查找结点的OF函数Linux 内核使用 device_node 结构体来描述一个节点,此结构体定义在文件 include/linux/of.h 中,定义如下:struct device_node { const char *name; /* 节点名字 */ const char *type; /* 设备类型 */ phandle phandle; const char *full_name; /* 节点全名 */ struct fwnode_handle fwnode; struct p原创 2020-06-11 12:53:23 · 17499 阅读 · 0 评论 -
6. Linux设备树前置基础
一. 知识点:我们在uboot启动的时候,会下载zImage内核,.dtb文件,这里面的 .dtb文件就是设备树文件1. 什么是设备树: 将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备等等;如上图所示:树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接到原创 2020-06-08 19:55:40 · 838 阅读 · 0 评论 -
Linux驱动相关的基础知识
1. 什么是Linux驱动?在各种书上都有对于驱动程序的介绍,大致的意思都为处于内核与硬件之间的,由操作系统管理的,控制硬件设备的程序;是硬件和内核之间的桥梁我们这里所说的驱动都是软件驱动的概念,是用来驱动硬件,或是提供硬件驱动方法的程序;记住:是内核和硬件之间的桥梁;2. Linux内核的分类:主要分为三大类:字符设备、块设备、网络设备三类设备编写驱动的方式不太一样,目前只接触了字符设备和网络设备的内容;字符设备: IO传输过程中以 字节为单位 进行传输;用户对于字符设备发出读写请求时原创 2020-06-01 18:26:21 · 432 阅读 · 0 评论 -
1. linux驱动开发与裸机开发的区别
裸机开发底层,跟寄存器打交道,有些MCU提供了库linux驱动开发linux下驱动开发直接操作寄存器,不现实根据Linux下的各种驱动框架,进行开发;一定要满足框架,也就是linux下各种驱动框架的掌握;在linux下,驱动最终表现(对应的外设)是 /dev/xxx下的文件;打开、关闭、读写都可以现在的内核基本都支持设备树,这个.dts文件,此文件描述了板子的设备信息;(内核通过分析这个.dts设备树文件,就能够知道当前板子上的设备信息)linux下驱动开发分类linux驱动分为三大原创 2020-05-14 16:00:47 · 2946 阅读 · 1 评论 -
2.字符设备驱动开发基础(一个虚拟的字符设备驱动开发流程)
应用程序与驱动的交互原理驱动程序:用来与硬件打交道,获取硬件的数据;应用程序:与驱动程序打交道,借助驱动程序完成对硬件的操作;在单片机中,驱动程序和应用程序的区分并不明显,因为没有操作系统的存在,因此在单片中将驱动和应用杂糅,形成一个或多个.c文件,共同控制板上资源;而 在跑Linux的设备中,由于各种原因(比如:处于对于操作系统内核数据的保护,对于操作系统安全的保护),是将驱动和应用完全分开的,驱动程序运行在内核态,而应用程序运行在用户态;从内核态到用户态,有三种方式能够进入:① 系统调用 ②中原创 2020-05-14 16:58:27 · 488 阅读 · 0 评论 -
3.第一个字符设备驱动(虚拟设备)框架搭建、驱动模块加载、驱动函数实现、应用程序编写;
一、字符设备驱动框架具体的对应关系见上一篇文章,这里只对需要实现的部分进行说明2.字符设备驱动开发基础(一个虚拟的字符设备驱动开发流程)字符设备驱动编写,主要工作就是驱动对应的open close read write函数的编写说白了,就是对file_operations结构体的成员变量的实现;在linux内核代码中,file_operations的定义在/include/linux/fs.h这在个.h文件中定义了很多对于linux文件很重要的概念,包括inode、file_operations等原创 2020-05-15 17:29:57 · 1509 阅读 · 0 评论 -
4. led驱动控制:驱动中操作寄存器完成led控制
实验目标:利用imx6ull平台,使用在驱动中操作寄存器的方法完成 对led的控制。1. 完成led驱动端编写:包括 :①:驱动入口出口函数编写及注册②:在初始化函数中完成对虚拟内存的映射和初始化操作③:在出口函数中完成对led的关闭、虚拟内存的释放④:编写file_operations结构体变量,并编写对应成员函数⑤:成员函数中必须包括对led的操作(write函数中)2. APP...原创 2020-03-12 13:00:48 · 600 阅读 · 0 评论 -
5. led驱动控制:使用register_chrdev_region
本文中1. 未使用file指针,在驱动对应的open函数中,对私有数据进行设置,2. 未使用goto对不同错误,进行相应的销毁内存处理;实验目的:1. 完成基础的led控制开关驱动功能:分为驱动端和APP端2. 在驱动端使用新的字符设备注册方式,弃用register_chrdev()(1-3);并使用自动创建设备节点的mdev机制,实现热插拔和自动识别设备节点(4-5) * 换为 ...原创 2020-03-12 22:20:15 · 358 阅读 · 0 评论 -
解决:开发板uboot无法从ubuntu下载,网络异常,无法启动
uboot下载系统失败,卡在下载,无法下载1. 可能是ip地址问题首先排除ip地址重复的问题(保证ubuntu和开发板在一个网段内的ip地址唯一性)方法:将开发板关掉,在ubuntu下ping开发板的ip地址;若ping不通则下一步,若ping通则是开发板ip地址重复,修改开发板ip地址将ubuntu关了,ping ubuntu的ip地址;若ping通则是ubuntu的IP地址重复,修改ubuntu的ip地址若是开发板IP问题,则在uboot中修改开发板ip地址setenv ipaddr原创 2020-05-25 16:40:19 · 745 阅读 · 0 评论 -
linux驱动:设备树下——led控制驱动
本实验是对led驱动控制:驱动中较为完善框架和linux驱动:利用of_函数读取设备树结点/属性信息的整合,利用设备树中的设备结点信息完成对led外设的驱动编写,重点在与①字符设备驱动框架搭建 ②利用设备树of函数完成读取任务 ③对于驱动入口函数和出口函数的对应初始化、注销过程;驱动部分代码:/** 此文件为字符设备:led的驱动文件 * 此文件较比前的led驱动文件:使用设备树节点信息...原创 2020-03-15 20:17:49 · 360 阅读 · 0 评论 -
linux驱动:利用of_函数读取设备树结点/属性信息(含错误处理)
实验说明:目的:期望通过linux/of.h中相关函数,在驱动中读取设备树相关结点信息和属性信息要求:①读取设备树/backlight结点下的属性,以及属性信息,合理处理返回值和错误信息②设计一个能够读取u32类型属性的通用函数,并在init函数中输出信息驱动程序:/** 此文件为linux 内核 of函数测试文件 * 实验目的:在init函数中使用of函数读取设备树中的 根节点下x...原创 2020-03-14 19:58:58 · 2007 阅读 · 1 评论 -
内核模块初始化函数static int __init init_func() 和退出函数 static void _exit exit_func() _init 和_exit 的理解
模块中初始化函数有的前面有个_init有什么作用。在内核代码iclude/linux/init.h 中有这样的定义#define __init __section(.init.text) __cold notrace#define __initdata __section(.init.data)#define __initconst __section(.init.rodata)#...转载 2020-03-12 13:37:23 · 1195 阅读 · 0 评论 -
Linux驱动加载问题“.ko模块无法加载modprobe: module 'xxx.ko' not found”解决方法
可能是缺少相关路径、文件或是文件名不需要带扩展使用modprobe XX.ko命令后,会到文件系统/lib/modules/xxxxx目录下查找相应的XX.ko文件;这里的xxxxx是指系统内核版本,可以通过uname -r命令获得。解决方案:没有这个目录的话,自己创建一个~创建后将.ko文件放入这个目录中执行depmod命令重新执行modprobe XX.ko命令若还不行:重新...原创 2020-03-10 14:17:52 · 13353 阅读 · 3 评论