led.c

 #include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/io.h> #define GPMCON 0x7F008820
#define GPMDAT 0x7F008824 static int * __gp_gpmdat; static int led_open (struct inode *p_inode, struct file *p_file)
{
int *p_gpmcon = NULL; p_gpmcon = ioremap(GPMCON, );
writel(0x1111, p_gpmcon); __gp_gpmdat = ioremap(GPMDAT, ); return ;
} static long led_ioctl (struct file *p_file, unsigned int cmd, unsigned long arg)
{
switch (cmd) {
case :
writel(0x0, __gp_gpmdat);
break; case :
writel(0xF, __gp_gpmdat);
break; default:
return -;
}
return ;
} static struct cdev led_dev;
static struct file_operations fops = {
.open = led_open,
.unlocked_ioctl = led_ioctl,
};
dev_t devno; static __init int led_init (void)
{
cdev_init(&led_dev, &fops);
alloc_chrdev_region(&devno, , , "myled");
cdev_add(&led_dev, devno, ); return ;
} static __exit void led_exit (void)
{
cdev_del(&led_dev);
unregister_chrdev_region(devno, );
} module_init(led_init);
module_exit(led_exit); MODULE_LICENSE("GPL");

led_app.c

 #include <unistd.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> int main(int argc, const char *argv[])
{
int fd, cmd; if (argc != ) {
printf(".example: ./led_app 0\n");
return;
} cmd = atoi(argv[]); fd = open("/dev/myled", O_RDWR); ioctl(fd, cmd); return ;
}

Makefile

 obj-m := led.o
KDIR = /home/linux/zkf//urbetter-linux2.6.28-v1./ all:
make -C $(KDIR) $(objs) M=$(PWD) modules CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm
arm-none-linux-gnueabi-gcc led_app.c -o led_app
sudo cp led.ko ~/zkf//rootfs/home/test
sudo cp led_app ~/zkf//rootfs/home/test
clean:
rm *.o *.symvers *.mod.c *.order

  make之后会生成led.ko和led_app两个要用到的文件,在Makefile中已经将他们复制到了开发板挂载目录中。在开发板终端中输入命令:insmod led.ko 之后输入命令:cat /proc/devices 可以看到myled主设备号为251

  输入命令:mknod /dev/myled c 251 0

  之后便能执行应用程序led_app了,执行 ./led_app 0 则点亮所有LED,执行 ./led_app 1 则熄灭所有LED。

  

九、编写led驱动的更多相关文章

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

    LED驱动的实现原理 编写LED驱动: 测试LED驱动之前需要用USB数据线连接开发板,然后打开电源,成功启动之后,执行build.sh脚本文件编译和安装LED驱动,顺利则会自动连接 如果有多个设备文 ...

  2. Linux驱动之LED驱动编写

    从上到下,一个软件系统可以分为:应用程序.操作系统(内核).驱动程序.结构图如下:我们需要做的就是写出open.read.write等驱动层的函数.一个LED驱动的步骤如下: 1.查看原理图,确定需要 ...

  3. 自己动手写最简单的Android驱动---LED驱动的编写【转】

    本文转载自:http://blog.csdn.net/k_linux_man/article/details/7023824 转载注明出处,作者:K_Linux_Man, 薛凯 山东中医药大学,给文章 ...

  4. 四、使用汇编编写LED裸机驱动

    1. 确定硬件连接 打开OK6410底板电路图,找到LED,可以发现NLEDx为0时LED点亮. 找到LED的控制引脚,发现LED控制引脚通过连接器连到了核心板: 打开核心板电路图,找到对应的连接器中 ...

  5. uTenux——LED驱动讲解

    LED驱动讲解,对于一个嵌入式的工程师还是一个刚开是学习相关电子设计的朋友,对于LED的驱动问题应该不甚陌生.我所说的LED驱动并不是类似大功率LED照明的那个驱动,而是简单的控制器对LED的控制驱动 ...

  6. 基于ARM_contexA9 led驱动编程

    关于友善之臂出的这款contexA9开发板,目前在网络上的资源较少,特别是内核的,非常之少,鉴于这种情况,我将会写一个系列的驱动来做关于tiny4412这款板子开发的总结. 简单介绍一下: Tiny4 ...

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

    linux设备驱动--LED驱动 最近正在学习设备驱动开发,因此打算写一个系列博客,即是对自己学习的一个总结,也是对自己的一个督促,有不对,不足,需要改正的地方还望大家指出,而且希望结识志同道合的朋友 ...

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

    本文转载自:http://www.voidcn.com/blog/lqxandroid2012/article/p-625005.html 目前的linux版本的许多驱动都是基于设备模型,LED也不例 ...

  9. linux驱动之LED驱动

    通过之前的学习,了解到linux驱动编写的流程是:先通过注册函数注册我们编写的入口函数,然后在入口函数中获取设备号->注册字符设备->自动创建设备节点->获取设备树信息,最后通过销毁 ...

随机推荐

  1. 148. Sort List (java 给单链表排序)

    题目:Sort a linked list in O(n log n) time using constant space complexity. 分析:给单链表排序,要求时间复杂度是O(nlogn) ...

  2. C# 有哪些集合

    队列[Queue] //队列:先进先出 /* *增加元素到队列结尾处 *移除队列开始处 */ Queue queue=new Queue(); queue.Enqueue(Object); queue ...

  3. 6月17 ThinkPHP连接数据库------数据的修改及删除

    1.数据修改操作 save()  实现数据修改,返回受影响的记录条数 具体有两种方式实现数据修改,与添加类似(数组.AR方式) 1.数组方式 a)         $goods = D(“Goods” ...

  4. stl中的for_each() 函数的注意事项

    #include<iostream> using namespace std; #include"vector" #include"algorithm&quo ...

  5. Grafana安装配置介绍

    一.Grafana介绍 Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite.zabbix.InfluxDB.Pr ...

  6. 509. Fibonacci Number斐波那契数列

    网址:https://leetcode.com/problems/fibonacci-number/ 原始的斐波那契数列 运用自底向上的动态规划最佳! 可以定义vector数组,但是占用较多内存空间 ...

  7. 压力测试之ab命令

    网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. ab是apache自带的压力测试工具.ab非常实用,它不 ...

  8. [CodeForces - 447B] B - DZY Loves Strings

    B - DZY Loves Strings DZY loves collecting special strings which only contain lowercase letters. For ...

  9. Hadoop---Java-API对HDFS的操作

    Java-API对HDFS的操作 哈哈哈哈,深夜来一波干货哦!!! Java-PAI对hdfs的操作,首先我们建一个maven项目,我主要说,我们可以通过Java代码来对HDFS的具体信息的打印,然后 ...

  10. django学习之——模版

    为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板, 要使用此模板加载API,首先你必须将模板的保存位置告诉框架. 设置的保存文 ...