第7章:LED驱动的实现原理

本章完成了一个真正意义上的 Linux 驱动。该 Linux 驱动用来控 制开发版上的 4个 LED 小灯。也就是说通过向 Linux 驱动发送数据可以控制 LED 小灯的开关。为 了方便称呼这个驱动,本书及后面的章节都将其称为 LED 驱动。

虽然 LED 驱动并不复杂,只是控制 了 4个 LED,"但 LED 驱动已经包括了 Linux 驱动所有必要的部分 一个完整的 Linux 驱动主要由 内部处理和与硬件交互降部分组成。其中内部处理主要是指 Linux 驱动的装载、卸载、与设备文件 相关的动作处理(读写设备文件、向设备文件发送 νo命令等动作〉以及业务逻辑等。与硬件交互 主要是指通过iowrite32、 . ioread32 等函数与硬件中的寄存器进行数据交互。 -Linux 驱动在不同平台 的移植也是处理这两部分。如果在不同 Lin肌 肉核版本之间的移植,主要是移植第 1 部分( Linux 驱动的内部处理,一般 Linux 内核版本相差较大时, Linu叉’内核的 APl 会有很大差别〉,如果在不同硬件平台的移植,主要是移植第 2部分。

编写LED驱动:

测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接

如果有多个设备文件将会在后来使用,则要通过指针变量cdev.list.prev和cdev.list.next指针变量连接,从而形成双向链接。

在创建设备文件时要注意:

Device_count表示建立设备文件的个数

Alloc_chrdv_region函数的第2个参数表示分配的起始设备号。

卸载Linux驱动的设备文件,需要依次调用device_destory、class_destory和unregister_chrdev_region方法

ARM控制LED的有三个寄存器,三个寄存器在内存中都有虚拟地址,向这些地址写入数据后,处理器会使用算法将虚拟地址映射为物理地址,并根据物理地址将数据写入相应的硬件端口。

驱动的设备文件。

控制LED有两种方式:

通过字符串控制LED—>file_operation.write

通过I/O命令控制LED—>file_operation.ioctl

LED驱动的模块参数

Moule_param_array(name,type,nump,perm)宏定义为LINUX驱动指定数组形式的模块参数。Name表示参数名,type表示数组元素的数据类型,nump表示存储数组长度的变量的指针,perm表示参数文件的访问权限。

编写测试I/O控制命令的通用程序,与设备文件交互的方式:直接写入字符串数据和I/O控制命令。直接向设备文件写入数据可以使用命令行方式来完成,也可以通过write函数来完成,但I/O命令只能通过ioctl发出。

一个完整的Linux驱动主要是由内部处理和硬件交互两部分组成,其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑、与硬件交互主要是指通过函数与硬件中的寄存器进行数据交互

时间: 06-04

第7章:LED驱动的实现原理的相关文章

Android系统移植与驱动开发——第七章——LED驱动

LED驱动的实现原理 编写LED驱动: 测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接 如果有多个设备文件将会在后来使用,则要通过指针变量cdev.list.prev和cdev.list.next指针变量连接,从而形成双向链接. 在创建设备文件时要注意: Device_count表示建立设备文件的个数 Alloc_chrdv_region函数的第2个参数表示分配的起始设备号. 卸载Linux驱动的设备

Android深度探索(卷1)HAL与驱动开发 第七章 LED将为我闪烁:控制发光二极管

第七章  LED将为我闪烁:控制发光二极管 读书心得    LED驱动的实现原理 尽管Linux驱动程序直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互. 编写LED驱动 测试LED驱动 LED驱动的移植 在修改Linux驱动的源代码时,应尽量不要修改Linux驱动的借口. LED驱动是本书第一个真正和硬件打交道的Linux驱动,虽然LED驱动并不复杂,只是控制了四个LED,但是LED驱动已经包括了Linux驱动所有必要的部分.一个完整的Linux

第七章 LED将为我们闪烁:控制发光二极管

 第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到了几个LED代码文件路径:随书光盘.虚拟环境两个. 一.LED驱动的实现原理:linux驱动与硬件打交道的方式是与本届的I/O内存进行交互,而这里所说的I/O内存就是通过各种接口(PCI.USB.蓝牙.以太网接口等)连接到(PC.手机)的硬件(网卡.摄像头等)在主机上的映射,然后进行硬件交互. 二.

第七章 LED将为我闪烁:控制发光二极管 心得笔记

一.LED驱动的实现原理.Linux驱动不是直接向硬件中的内存写数据,而是与本机的I/O内存交互,Linux内核提供了多个与I/O内存交互的函数,每个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的LED等也有其映射首地址. 二.编写LED驱动,步骤如下: 1.测试开发板,打开电源开关 2.创建LED驱动设备文件 1>使用cdev_init函数初始化cdev. 2>指定设备号:用1个int类型表示Linux设备文件的设备号,前12位表示主设备号,后20位表示次设备号设备号有两种指

第七章 LED 将为我闪烁: 控帘 j发光二级管

一 .LED驱动的实现原理 尽管Linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的LED也有其映射首地址. 二 .编写LED驱动 第一步:使用cdev_init函数初始化cdev , 描述设备文件 struct cdev{ struct kobject kobj;    //封装设备文件的对象 struct module *owner;   //指向内核模块的指针 c

第七章LED将为我闪烁:控制发光二级管 读书笔记

一.LED驱动的实现原理 Linux驱动与硬件交互的原理:Linux驱动与I/O内存通过ioread30和iowrite32函数交互:I/O内存与硬件,内存管理模块负责同步I/O内存与硬件中德数据. 二.编写LED驱动 其中1表示开.0表示关.当字符串长度不足4个,相当于后面补0 1.创建LED驱动的设备文件 (1)使用cdev_init函数初始化cdev (2)指定设备号 Linux设备文件的设备号分为主设备号和次设备号,前12位主设备号,后20位表示次设备号. 设备号指定方法:直接在代码中指

Led驱动实现心得

Led驱动实现心得 LED驱动的实现原理 尽管linux驱动直接与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.所谓i/o内存是通过各种接口(PCI USB 蓝牙 以太网口)连接到主机(pc 手机)的硬件(网卡 声卡  摄像头)在主机内存中映射.例如,在Ubuntu  Linux上运行的驱动只需要访问运行Ubuntu  Linux的主机中的I/O内存即可,然后Linux内核会利用I/O内存中数据硬件交互. Linux内核提供了多个与I/O内存交互的函

Android深度探索(卷1)HAL与驱动开发 第七章 LED将为我闪烁:控制发光二极管 读书笔记

本章的实验将会实现真正意义上的Linux驱动,会实现直接与硬件的交互.需要控制4个LED灯. 7.1LED驱动的实现原理 事实上并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.I/O内存是通过各种接口连接到主机的硬件在主机内存中的映射. 7.2编写LED驱动 1.创建LED驱动的设备文件 (1).使用cdev_init函数初始化cdev (2).指定设备号 (3).使用cdev_add函数将字符设备添加到内核中的字符设备数组中. (4)使用class_create宏

(笔记)linux设备驱动--LED驱动

linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友一起学习技术,共同进步. 作者:liufei_learning(转载请注明出处) email:[email protected] IT学习交流群:160855096 转至:http://blog.csdn.net/liufei_learning/article/details/7025246 开发环