led.c:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h> int major = ; void arm_init(void)
{
/*操作硬件*/
printk("hello arm init!\n");
} int led_open(struct inode *inode, struct file *file)
{
arm_init(); return ;
} struct file_operations led_fops = {
.owner = THIS_MODULE, //属于本模块所有
.open = led_open,
}; int led_init(void)
{
int ret; /*模块入口*/
printk("hello kernel\n"); /*注册字符设备驱动*/
ret = register_chrdev(major,"led-driver",&led_fops);
if(ret < ){
printk("register chrdev led failed\n");
return -EBUSY;
} return ;
} void led_exit(void)
{
/*模块出口*/ /*注销*/
unregister_chrdev(major,"led-driver");
printk("bye!\n");
} /*执行insmod 的时候调用module_init*/
module_init(led_init); /*执行 rmmod 的时侯调用module_exit */
module_exit(led_exit); MODULE_DESCRIPTION("this my first drivers");
MODULE_AUTHOR("zhang san feng");
MODULE_LICENSE("GPL"); //许可证 (必须)

app.c:

#include <sys/types.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h> int main(int argc,char *argv[])
{
int fd; //文件描述符 /*以读的方式打开一个文件,如果文件不存在,则返回错误*/
fd = open("/dev/led",O_RDONLY);
if(fd < ){
perror("open");
return -;
}
printf("fd == %d\n",fd); return ;
}

Makefile:

obj-m        += led.o

################################################

KERNEL = /home/linux-3.0.-FS210_v9
ROOTFS = /opt/filesystem
CROSS_COMPILE = arm-cortex_a8-linux-gnueabi-gcc all:
make M=`pwd` -C $(KERNEL) modules
$(CROSS_COMPILE) -o app app.c
cp led.ko /opt/filesystem/test
cp app /opt/filesystem/test
cp test.sh /opt/filesystem/test clean:
make M=`pwd` -C $(KERNEL) modules clean install:
make M=`pwd` -C $(KERNEL) modules_install INSTALL_MOD_PATH=$(ROOTFS)

test.sh:

#/bin/bash

insmod led.ko
mknod /dev/led c
./app

led.c驱动框架2nd的更多相关文章

  1. Linux内核的LED设备驱动框架【转】

    /************************************************************************************ *本文为个人学习记录,如有错 ...

  2. led.c驱动框架

    Makefile: obj-m += led.o ################################################ KERNEL = /home/linux--FS21 ...

  3. Linux驱动框架之misc类设备驱动框架

    1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...

  4. 驱动框架入门——以LED为例[【转】

    本文转载自;http://blog.csdn.net/oqqHuTu12345678/article/details/72783903 以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵 ...

  5. Linux驱动框架之framebuffer驱动框架

    1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...

  6. linux驱动摸索 --驱动框架初始化(结合韦东山视频教程)

    一.驱动框架 初始化:insmod 加载 1.确定主设备号: 分为静态和动态分配,其中LED_GPIO_SIZE 表示支持的次设备号数目,一般默认为1. 相关实现代码如下: int result; d ...

  7. 一步步理解linux字符设备驱动框架(转)

    /* *本文版权归于凌阳教育.如转载请注明 *原作者和原文链接 http://blog.csdn.net/edudriver/article/details/18354313* *特此说明并保留对其追 ...

  8. platform设备驱动框架

    驱动框架 通过使用platform设备驱动框架,实现led驱动与设备操作的分离.     我们关注led_drv里面的 struct platform_driver led_drv里面的.probe函 ...

  9. 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发

    在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...

随机推荐

  1. 初次使用IntelliJ IDEA 2016.2

    换电脑的还有一个目的就是我准备采用新的IDE了 之前一直用的是myeclipse,但是现在准备尝试idea 这边做个记录,idea的破解参考下面这个网址:http://blog.csdn.net/u0 ...

  2. Hadoop 中关于 map,reduce 数量设置

    map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...

  3. easyui datagrid deleteRow(删除行)的BUG!

    转自:http://my.oschina.net/fants/blog/77189项目中又用到easyui 的datagrid做数据展示.功能很强大,很实用,但bug也很多.今天这个就够让人头疼. 如 ...

  4. mysql存入中文乱码问题

    1. 查询编码 SHOW VARIABLES LIKE 'character_set_%' 2. 改数据库和单项 alter database tsdr character set utf8; set ...

  5. .Net日期处理之格式化

    一.默认格式 2015/9/3 9:04:31 二.格式2 2015年9月3日 9:28:51 三.格式3 2015年9月3日 9:31 四.格式4 2015/9/3 9:39:01 五.格式5 20 ...

  6. Toy Storage POJ 2398

    题目大意:和 TOY题意一样,但是需要对隔板从左到右进行排序,要求输出的是升序排列的含有i个玩具的方格数,以及i值. 题目思路:判断叉积,二分遍历 #include<iostream> # ...

  7. 指针--摘自C++技术网 作者dx

    “指针是什么?”“指针就是一种数据类型.”“你确定?”“那数据类型是什么?额,这个???类型就是类型,还能怎么解释嘛.”“指针有多少种?”“指针有好多种,比如整型指针,字符指针等等.”“指针是怎么确定 ...

  8. 动画——animation(2)

    日常中,我们使用的动画来源有两个方面—— 第一个,自己去定义. 通过@keyframes去定义即可,格式如下: @keyframe animatename{ 0%{ //这里面写初始的对象的css样式 ...

  9. lucene 编辑距离

    lucene 编辑距离实际上表明良好个不同的字符串需要经过多少次编辑和变换才能转换成对方.通常的编辑行为包括了增加一个检索项目,删除一个检索项,修改一个检索项

  10. hdu-1978_How many ways dfs+记忆化搜索

    How many ways Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...