EmbedFire i.MX 6ull开发板学习笔记(六)---驱动模板

2024-04-13 09:08

本文主要是介绍EmbedFire i.MX 6ull开发板学习笔记(六)---驱动模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EmbedFire i.MX 6ull开发板学习笔记(六)---驱动模板

  • 一、驱动编译
  • 二、驱动模板
    • 1、字符设备驱动:
    • 2、platform设备驱动:
    • 3、块设备驱动:

一、驱动编译

Linux驱动可编译为模块,即.ko文件;也可以编译进内核。每一个驱动几乎都有一个独立的CONFIG配置。例如:在drivers/leds/Makefile中有如下内容:

obj-$(CONFIG_LEDS_GPIO)			+= leds-gpio.o

在make muneconfig配置为m,即是编译为模块。

CONFIG_LEDS_GPIO=m   
obj-m		+= leds-gpio.o

在make muneconfig配置为为y即编译进内核。

CONFIG_LEDS_GPIO=y
obj-y		+= leds-gpio.o

所以:obj-m表示编译为模块;obj-y表示编译进内核。在调试阶段我们一般编译为模块,使用insmod 或modprobe命令加载.ko文件,用rmmod命令卸载.ko文件。

insmod不会加载当前.ko依赖的.ko,加载时.ko文件可在任何目录。modprobe会自动加载当前.ko依赖的.ko,加载时.ko文件必须已在/lib/modules/&(uname -r)/目录下存在。uname -r是当前内核版本。

二、驱动模板

Linux下一切皆文件,加载驱动后会下/dev目录下生成对应的节点,应用程序可以向操作普通文件一样进行open,read,write,close操作。linux驱动分为三大类型,即:字符设备驱动,platform设备驱动和块设备驱动。

1、字符设备驱动:

按字节流顺序读写,如IIC,UART等都是字符设备。Linux下绝大部分驱动都属于此种类型,驱动基本模板如下:

#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/cdev.h>
#include <linux/device.h>#define XXXCHRDEV_CNT			1		  		/* 设备号个数 */
#define XXXCHRDEV_NAME			"xxxchrdev"		/* 名字 *//* xxxchrdev设备结构体 */
struct xxxchr_dev{dev_t devid;			/* 设备号。在include/linux/types.h中定义有dev_t(32位无符合整数)来表示设备号。*//* 主设备号为高12位,次设备号为低20位。并提供了宏MAJOR(dev),MINOR(dev),MKDEV(ma,mi) *//* 来方便提取主次设备号和组合设备号。*/struct cdev cdev;		/* cdev。表示一个字符设备 */struct class *class;	/* 类 */struct device *device;	/* 设备 */int major;				/* 主设备号:具体某个驱动。 */						int minor;				/* 次设备号:使用该驱动的设备数量。*/
};struct xxxchr_dev xxxchrdev;/** @description		: 打开设备* @param - inode 	: 传递给驱动的inode* @param - filp 	: 设备文件,file结构体有个叫做private_data的成员变量* 					  一般在open的时候将private_data指向设备结构体。* @return 			: 0 成功;其他 失败*/
static int xxx_open(struct inode *inode, struct file *filp)
{filp->private_data = &xxxchrdev; /* 设置私有数据 */return 0;
}/** @description		: 从设备读取数据 * @param - filp 	: 要打开的设备文件(文件描述符)* @param - buf 	: 返回给用户空间的数据缓冲区* @param - cnt 	: 要读取的数据长度* @param - offt 	: 相对于文件首地址的偏移* @return 			: 读取的字节数,如果为负值,表示读取失败*/
static ssize_t xxx_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
{return 0;
}/** @description		: 向设备写数据 * @param - filp 	: 设备文件,表示打开的文件描述符* @param - buf 	: 要写给设备写入的数据* @param - cnt 	: 要写入的数据长度* @param - offt 	: 相对于文件首地址的偏移* @return 			: 写入的字节数,如果为负值,表示写入失败*/
static ssize_t xxx_write(struct 

这篇关于EmbedFire i.MX 6ull开发板学习笔记(六)---驱动模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899720

相关文章

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio