Android驱动开发读书笔记七
第七章
(一)创建设备文件
1.使用cdev_init函数初始化cdec
描述设备文件需要一个cdev结构体,代码如下:
struct cdev{
struct kobject kobj;
struct module *owener;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
}
大多数的成员变量不需要我们自己初始化,调用cdev-init函数即可。
2.指定设备号
分别指定主从设备号,所以需要MKDEV宏
int dev_number=MKDEV(major,minor);
3.使用cdev_add函数将字符设备添加到内核中的字符设备数据中
调用cdev_add函数需要指定设备文件指针(p)、设备号(dev)、设备文件数量(count)还调用了一个重要的函数kobj_map.
4.使用class_create宏创建struct class
Struct class包含了一些与设备文件有关的变量和一些回调函数指针变量。代码:
Struct class *leds_class=NULL;
Leds_class=class_create(THIS_MODULE,”dev_name”);
5.使用device_create函数创建设备文件
Decive_create(leds_class,NULL,dev_number,NULL,DEVICE_NAME)
(二)卸载LED驱动的设备文件
卸载LED驱动的设备文件,依次调用decive_destory、class_destory、unregister_chrdev_region方法。Led_destory_device函数用于卸载LED驱动的设备文件,leds_exit函数是LED驱动的卸载函数,通过调用Led_destory_device函数来完成卸载LED驱动设备文件的工作。
设置LED等的状态
设置寄存器和初始化LED驱动,通过设置寄存器的值可以设置LED引脚的状态以及控制其亮灭。然后要控制LED,可以通过字符串和I/O命令。使用字符串用到file_operations.write函数,使用I/O命令用到file_operations.ioctl,从用户空间像内核中写入数据用到的函数copy_from_user。
LED驱动的模块函数
通过module_param宏可以指定参数文件的访问权限
state int leds_state=1;
State int led_init(void)
{
Int ret;
Ret=led_create_device();
Leds_init_gpm(~led_state);
Printk(DEVICE_NAME”\tinitialized\n”);
Return ret;
}
Module_param(led_state,int ,S_IRUGO | IWUSR);
然后本章介绍到使用NDK测试LED驱动,使用JAVA测试LED驱动以及LED驱动移植。
http://www.cnblogs.com/xxyue/
Android驱动开发读书笔记七的更多相关文章
- Android驱动开发读书笔记六
第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...
- Android驱动开发读书笔记五
第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...
- Android驱动开发5-8章读书笔记
Android驱动开发读书笔记 第五章 S5PV210是一款32位处理器,具有 ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇
驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...
- 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇
驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...
- 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统
驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...
- 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器
驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...
- 《Android系统开发》笔记
<Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...
随机推荐
- 插入po得到主键,插入sql得到主键
import com.yd.common.data.CIPPageInfo; import com.yd.common.data.CIPReqCondition; import com.yd.comm ...
- mysql /etc/my.cnf
[client] port=3306 socket = /tmp/mysql.sock default-character-set=utf8 [mysqld] # 1 general config p ...
- VSCode makedown增强插件
Markdown Preview Enhanced https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/
- set<int> 的用法
博客学习:https://blog.csdn.net/yas12345678/article/details/52601454 介绍一下 *max_element(a,a+n) 求取数组最大的元素 ...
- onclientclick与onclick的问题.
<script language="javascript" type="text/javascript"> document.getElementB ...
- ubuntu配置硬盘开机自动挂载
1.创建/media/fly文件夹 sudo mkdir /home/fly #根据个人喜好命名 2.获取要自动挂载的分区的UUID和分区类型TYPE sudo blkid 出现如下结果: ...
- 018.Java类加载器
https://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 类加载器(class loader) 用来加载 Java 类到 Java 虚拟 ...
- vue3.0学习笔记(二)
一.选择合适的ide 推荐使用vs code编辑器,界面清晰.使用方便,控制台功能很好用.webstorm也可以,看个人喜好. 二.ui框架选择 目前,pc端一般是选择element ui(饿了么), ...
- 微信小程序时间处理问题
环境: 开发环境: 1. Mac OS 10.12.5 2. 微信Web开发者工具 v0.18.182200 测试环境: 1. iPhone 7 2. iOS 10.3.2 3. 微信 6.5.9 问 ...
- jsch连接Linux工具类
import com.alibaba.fastjson.JSONObject;import com.jcraft.jsch.*;import org.slf4j.Logger;import org.s ...