Led驱动实现心得

Led驱动实现心得

LED驱动的实现原理

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

每一个连接linux的硬件在I/O内存中都会有映射首地址。在使用ioread16、ioread32等函数读写I/O内存时需要指定这些首地址,开发板上的led也有其映射首地址。

此例子的原理:如图,LED1-LED2分别与GPC0_3、GPC0_4相连,通过GPC0_3、GPC0_4引脚的高低电压来控制三极管的导通性,从而控制LED的亮灭。

根据三极管的特性,当这个引脚输出高电平时,集电极和发射极导通,发光二极管点亮;反之,发光二极管熄灭;

通过控制GPC0CON和GPC0DAT来控制GPC0_3和GPC0_4对应的led。

建立工作目录,拷贝源码

$  mkdir worker/driver

$  cd /workdir/driver/

$  cp  /mnt/hgfs/share/linux-3.2-FS210-V3.tar.bz2  ./

$  cp   /mnt/hgfs/share/linux3.2Drivers/  ./  -a

解压内核代码

$  tar  xvf  linux-3.2-FS210-v3.tar.bz2

编译内核源码

$   cd  /workdir/driver/linux-3.2-FS210-V3

$    cp  fs210_defconfig  .config

$   make  zImage

编译驱动源码

  $   cd  /workdir/driver/linux-3.2Drivers/fs210_led

  修改Makefile文件,修改为我们的内核源码的路径和交叉工具链。保存退出。

    $ make

  查看编译生成的ko文件,并拷贝到nfs文件系统目录中。

    $  ls

    $   cp  fs210_led.ko  /source/rootfs/

   执行make  led_test命令编译测试文件。

    $  make  led_test

    执行代码:

  启动开发板,查看文件系统文件

    $  ls

  加载驱动

    $   insmod  fs210_led.ko

    $   mknod    /dev/led  c  250 0

    $   chmod   777    /dev/led

    $    ./led_test

  实验现象

    Led1间隔闪烁。

http://www.cnblogs.com/cherry-blossom/

时间: 2024-10-27 10:55:46

Led驱动实现心得的相关文章

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

本章完成了一个真正意义上的 Linux 驱动.该 Linux 驱动用来控 制开发版上的 4个 LED 小灯.也就是说通过向 Linux 驱动发送数据可以控制 LED 小灯的开关.为 了方便称呼这个驱动,本书及后面的章节都将其称为 LED 驱动. 虽然 LED 驱动并不复杂,只是控制 了 4个 LED,"但 LED 驱动已经包括了 Linux 驱动所有必要的部分 一个完整的 Linux 驱动主要由 内部处理和与硬件交互降部分组成.其中内部处理主要是指 Linux 驱动的装载.卸载.与设备文件 相关

基于S3C2440的linux-3.6.6移植——LED驱动【转】

本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例外. 简单地说,设备模型就是系统认为所有的设备都是挂接在总线上的,而要使设备工作,就需要相应的驱动.设备模型会产生一个虚拟的文件系统——sysfs,它给用户提供了一个从用户空间去访问内核设备的方法,它在linux里的路径是/sys.如果要写程序访问sysfs,可以像读写普通文件一样来操作/sys目录

编写LED驱动

1.创建LED驱动的设备文件: (1)使用cdev-init函数初始化cdev (2)指定设备号 设备号的分配有两种指定方法:直接在代码中指定(硬编码) 动态分配 (3)使用cdev-add函数将字符设备添加到内核中的字符设备数组中 (4)使用class-creat宏创建struct class (5)使用device-create函数创建设备文件 2.LED驱动通过两种方式控制LED 通过字符串控制LED 通过I/O命令LED 3.一个完整的linux驱动主要由内部处理和与硬件交互两部分组成.

linux驱动(九)platform驱动模型详解,以及基于platform驱动模型的led驱动

参考: http://blog.csdn.net/qq_28992301/article/details/52385518 http://blog.csdn.net/zoe6553/article/details/6372445 http://blog.chinaunix.net/uid-25014876-id-111745.html 1:什么是platform总线?platform总线是区别于实体总线USB. I2C.SPI .PIC总线的虚拟总线,一些usb设备选址的话需要通过USB总线来进

兼容可控硅调光的一款LED驱动电路记录

1.该款电路为兼容可控硅调光的LED驱动电路,采用OB3332为开关控制IC,拓扑方案为Buck: 2.FB1:磁珠的单位是欧姆,而不是亨利,这一点要特别注意.因为磁珠的单位是按照它在某一频率 产生的阻抗来标称的,阻抗的单位也是欧姆.磁珠的 DATASHEET上一般会提供频率和阻抗的特性曲线图,一般以100MHz为标准,比如[email protected],意思就是在100MHz频率的时候磁珠的阻抗相当于600欧姆: 3.UFM14PL-TP普通二极管: Maximum Recurrent P

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

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

FL2440驱动添加(4)LED 驱动添加

硬件信息:FL2440板子,s3c2440CPU带四个LED,分别在链接GPB5,GPB6,GPB8,GPB10 内核版本:linux-3.8.0 led驱动代码如下: 值得注意地方地方: 1,定时器的使用:在include/linux/timer.h下定义struct timer_list struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline *

有注释的LED驱动

裸机下控制LED灯非常方便,只需要配置好GPIO引脚功能,然后向GPIO引脚映射的内存地址处写入数据即可,但linux下驱动就不那么简单了,需要结合字符设备驱动的架构,然后将功能实现添加进去,笔者参考linux设备驱动程序(第三版)中介绍的新的接口来实现驱动.友善之臂官网提供的源码是基于miscdevice的驱动,而且接口似乎有点老,比如在linux设备驱动程序(第三版)中强调需要使用新的内存I/O接口来访问映射内存,建议使用ioread32,iowrite32等,但是它依然使用writel,r

驱动学习之LED驱动框架

一:什么是驱动框架  (1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的.标准的.典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开发工程师来实现,这就叫驱动框架.  (2)内核维护者在内核中设计了一些统一管控系统资源的体系,这些体系让内核能够对资源在各个驱动之间的使用统一协调和分配,保证整个内核的稳定健康运行.譬如系统中所有的GPIO就属于系统资源,每个驱动模块如果要使用某个GPIO就要先调用特殊的接口先申请,申请到后使用,使用