第七章

(一)创建设备文件

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驱动开发读书笔记七的更多相关文章

  1. Android驱动开发读书笔记六

    第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与 ...

  2. Android驱动开发读书笔记五

    第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...

  3. Android驱动开发5-8章读书笔记

    Android驱动开发读书笔记                                                              第五章 S5PV210是一款32位处理器,具有 ...

  4. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  5. 驱动开发学习笔记. 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 ...

  6. 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

    驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...

  7. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...

  8. 驱动开发学习笔记. 0.01 配置arm-linux-gcc 交叉编译器

    驱动开发读书笔记. 0.01 配置arm-linux-gcc 交叉编译器 什么是gcc: 就像windows上的VS 工具,用来编译代码,具体请自己搜索相关资料 怎么用PC机的gcc 和 arm-li ...

  9. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...

随机推荐

  1. windows下安装python包

    1.windows下成功安装好python后,在安装目录的Scripts目录下有easy_install和pip工具 2.如果没有安装pip,进入命令行,切换到python的安装目录下的Scripts ...

  2. 简单的方法爬取b站dnf视频封面步骤解释

    这随笔代码链接:http://www.cnblogs.com/yinghualuowu/p/8186375.html 首先我们要知道,一个分区封面显示到底在哪里可以找到. 很明显,查看审查元素并不能找 ...

  3. C#基础之类型和成员基础以及常量、字段、属性

    首先吐糟一下今天杭州的天气,真是太热了!虽然没有妹子跟我约会,但宅在方寸大的窝里,也是烦躁不已! 接上一篇<C#基础之基本类型> 类型和成员基础 在C#中,一个类型内部可以定义多种成员:常 ...

  4. 使用C#连接 MyCat 链接串

    所属专栏: mycat的安装部署以及监控和运维    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014180504/article/detai ...

  5. UVA - 12333 Revenge of Fibonacci 高精度加法 + 字典树

    题目:给定一个长度为40的数字,问其是否在前100000项fibonacci数的前缀 因为是前缀,容易想到字典树,同时因为数字的长度只有40,所以我们只要把fib数的前40位加入字典树即可.这里主要讨 ...

  6. 【JavaEE】WebService到底是什么?

    一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...

  7. 【图解】我使用过的 Dubbo 和 Spring Cloud

    自从2015年毕业开始从事 Java 开发工作,已经过去3年多了, 在各种不知名的小公司待过,经历过生产力从低到高,技术从落后到先进的过程, Dubbo 和 Spring Cloud 就是我曾经所经历 ...

  8. Json数组对象和对象数组

    Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种 ...

  9. 经典SQL语句集锦(收藏版)

    文章来源:http://www.cnblogs.com/herbert/archive/2010/07/02/1770062.html SQL分类: DDL—数据定义语言(CREATE,ALTER,D ...

  10. Response.Redirect 打开新窗口的两种方法

    一般情况下,Response.Redirect 方法是在服务器端进行转向,因此,除非使用 Response.Write("<script>window.location='htt ...