学习使用 Linux 的  字符型设备驱动 来 进行 . 学习地址:http://edu.51cto.com/lesson/id-25710.html

第一步: 首先写 三个函数 ,2017年5月17日15:59:06

#include<stdio.h>

#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/ioport.h> uint32_t first_Led_Open( void )
{ printf("first Led Open!\r\n"); return ;
} uint32_t first_Led_Write( void )
{ printf("first Led Write!\r\n"); return ;
} uint32_t first_Led_Read( void )
{ printf("first Led Read!\r\n"); return ;
}

第二步:告诉 linux 内核 有这样三个函数 的 存在。2017年5月17日16:59:01

//第二步:告诉Linux内核上面三个函数的存在,定义一个 struct file_operations, 并且赋初值,就是上面的三个函数

static struct file_operations first_Led_Fops;

first_Led_Fops.owner = THIS_MODULE;
first_Led_Fops.open = first_Led_Open;
first_Led_Fops.Write = first_Led_Write;
first_Led_Fops.Read = first_Led_Read; //编写驱动的入口函数 ,调用上面的 结构体,向内核注册上面三个函数的 存在 int first_Led_Init( void )
{
//调用 register_chrdev
register_chrdev(major,"first_Led",&first_Led_Fops);
return ;
}

第三步:在Linux上电初始化的时候 调用这个函数。2017年5月17日18:45:24,所长

//第三步:谁去调用上面这个函数?用一个宏来修饰一下上面这个函数。
//我的理解:下面这个宏就是在给Linux系统上电初始化的时候 ,调用 会first_Led_Init函数。
//一个 Linux设备中 肯定有很多需要初始化的函数,那每次都要 修改初始化的代码才能要把初始化加进去,所以Linux就
//写了一个宏,在编译 的时候,把要初始化的函数编译进去(不知道先后顺序是怎么样的),2017年5月17日18:42:22,所长 module_init(first_Led_Init); //前三步的笔记: APP 在利用open("/dev/xxx")中的xxx包含一个字符设备属性,一个major,一个mior
//内核根据APP 提供的 字符设备属性+major(主设备号)就能找到我们注册进去first_Led_Fops这个结构体包含的三个函数。
//APP 会根据 提供的是 字符设备属性 因此去 字符设备属性的数组中 查找 major 的位置 ,根据这个位置 first_Led_Fops
//提供的 函数指针运行相应的函数。2017年5月17日18:44:10,所长。

第四步:有入口函数 就有出口函数,即把注册的函数从内核中 删除掉。根据前三步的笔记得知 这一步实际操作就是 删除 字符设备数组 中 major 这一项。

//第四步:编写驱动的出口函数 ,调用上面的 结构体,向内核申请删除 上面三个函数的 存在,在内核中。

int first_Led_Exit( void )
{
//调用 unregister_chrdev
//参数1:major 表示主设备号
//参数2:name //我的理解是:
//unregister_chrdev这个函数作用把 file_operations 结构 类型 从 字符设备数组中删除掉,数组位置是 major unregister_chrdev(major,"first_Led");
return ;
}

第五步:和入口函数一样 用宏来修饰 出口函数

//第五步:和入口函数一样 用宏来修饰 出口函数

module_exit(first_Led_Exit);

//第五步总结:module_exit会定义一个结构体,会把first_Led_Exit赋值给这个结构体中的一员,当要卸载驱动程序的时候
//即运行出口函数的时候,Linux内核就会自动调用结构体中的 first_Led_Exit这个函数。。暂时不理解,2017年5月17日19:03:30,所长

第六步: 编写 Makefile ,在Linux下编译此文件。。2017年5月17日19:11:12

字符型设备驱动程序-first-printf以及点亮LED灯(一)的更多相关文章

  1. 字符型设备驱动程序-first-printf以及点亮LED灯(三)

    根据  字符型设备驱动程序-first-printf以及点亮LED灯(二) 学习 修改函数 中的printf 为 printk. #include <linux/module.h> /* ...

  2. 字符型设备驱动程序-first-printf以及点亮LED灯(二)

    编译这几个函数之前要学一下:Linux 的几个操作命令. 学习地址:http://edu.51cto.com/lesson/id-101824.html 重要的命令 有4个 :分别是 1.lsmod, ...

  3. 字符型设备驱动程序-first-printf以及点亮LED灯(四)

    怎么样 把 写的 代码 和 编译 放到  开发板上 去执行? 2017年5月22日16:34:13 需要 自己 编译 Linux 内核.. 需要 以下 几个 条件: 1.正常运行 Linux 的 开发 ...

  4. Linux内核驱动学习(三)字符型设备驱动之初体验

    Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验 前言 框架 字符型设备 程序实现 cdev kobj owner file_operations dev_t 设备注册过程 ...

  5. linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59417.html linux设备驱动归纳总结(三):2.字符型设备的操作open.close.rea ...

  6. linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59416.html linux设备驱动归纳总结(三):1.字符型设备之设备申请 操作系统:Ubunru ...

  7. 【Linux开发】linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write

    linux设备驱动归纳总结(三):2.字符型设备的操作open.close.read.write 一.文件操作结构体file_operations 继续上次没讲完的问题,文件操作结构体到底是什么东西, ...

  8. 【Linux开发】linux设备驱动归纳总结(三):1.字符型设备之设备申请

    linux设备驱动归纳总结(三):1.字符型设备之设备申请 操作系统:Ubunru 10.04 实验平台:S3C2440 + linux2.6.29内核 注:在今后驱动程序的学习中经常需要查看内核源代 ...

  9. 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发

    在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...

随机推荐

  1. Ubuntu16.04下安装MATLAB 2016b!完美运行

    目录 1.下载MATLAB 2016b 2.挂载iso 3.安装MATLAB 4.破解 5.快捷键与运行 1.下载MATLAB 2016b 下载matlab 2016b for linux(可以百度搜 ...

  2. 51nod1538:一道难题(常系数线性递推/Cayley-Hamilton定理)

    传送门 Sol 考虑要求的东西的组合意义,问题转化为: 有 \(n\) 种小球,每种的大小为 \(a_i\),求选出大小总和为 \(m\) 的小球排成一排的排列数 有递推 \(f_i=\sum_{j= ...

  3. CentOS6.5(3)----设置自己安装的程序开机自动启动

    CentOS6.5系统下设置自己安装的程序开机自动启动 方法1. 把启动程序的命令添加到 /etc/rc.d/rc.local 文件中,比如设置开机启动 mysqld: #!/bin/sh # # T ...

  4. Python库安装注意事项

    由于一些python库依赖其它库或者其它组件,因此,在使用pip3命令安装python库的时候,经常会报错,告知缺失哪些组件. 但是, 开启VPN后,就没有再碰到类似错误,相关组件都是自动被安装. 因 ...

  5. VS2013下使用log4cplus

    原文:http://blog.csdn.net/qq_35850668/article/details/52522932 最近工作需要,需要使用log库来完善日志类记录,由于之前没什么经验,遇到了很多 ...

  6. Android 录制视频

    Activity代码: package eoe.demo.Media; import java.io.File; import java.io.IOException; import android. ...

  7. 实用爬虫-01-检测爬虫的 IP

    实用爬虫-01-检测爬虫的 IP 本篇介绍一个识别爬虫 ip 的小实例(教你一招识破无效的 ip 代理) [注意事项]: 1.url 可能会失效(个人感觉,因为它带了一个2018,下面附上链接获取方法 ...

  8. SQLServer2008或SQLServer2008 R2没有智能提示解决方法

    如果没有智能提示,需要安装SqlcompletefreeSQL Server智能提示

  9. vs 编译error1083

    1)右键查看该项目的属性 2)点击配置属性——〉  C/C++  ——〉  常规  ——〉 附加包含目录——〉将报错文件所在目录添加进去 3) 将项目的本地路径替换为工程相对路径 一般来说,打不开文件 ...

  10. .htaccess详解及.htaccess参数说明

    .htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到 ...