led.c驱动框架2nd
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的更多相关文章
- Linux内核的LED设备驱动框架【转】
/************************************************************************************ *本文为个人学习记录,如有错 ...
- led.c驱动框架
Makefile: obj-m += led.o ################################################ KERNEL = /home/linux--FS21 ...
- Linux驱动框架之misc类设备驱动框架
1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...
- 驱动框架入门——以LED为例[【转】
本文转载自;http://blog.csdn.net/oqqHuTu12345678/article/details/72783903 以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵 ...
- Linux驱动框架之framebuffer驱动框架
1.什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备.帧缓冲 ...
- linux驱动摸索 --驱动框架初始化(结合韦东山视频教程)
一.驱动框架 初始化:insmod 加载 1.确定主设备号: 分为静态和动态分配,其中LED_GPIO_SIZE 表示支持的次设备号数目,一般默认为1. 相关实现代码如下: int result; d ...
- 一步步理解linux字符设备驱动框架(转)
/* *本文版权归于凌阳教育.如转载请注明 *原作者和原文链接 http://blog.csdn.net/edudriver/article/details/18354313* *特此说明并保留对其追 ...
- platform设备驱动框架
驱动框架 通过使用platform设备驱动框架,实现led驱动与设备操作的分离. 我们关注led_drv里面的 struct platform_driver led_drv里面的.probe函 ...
- 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发
在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...
随机推荐
- 编码规范系列(二):Eclipse Checkstyle配置
http://chenzhou123520.iteye.com/blog/1627618 上一篇介绍了<编码规范系列(一):Eclipse Code Templates设置>,这篇主要介绍 ...
- linux下shell命令trap
某些时候,在执行shell脚本(.sh)时,我们并不希望被打断.这时我们要用到trap命令. 例如: 在shell脚本中,忽略“终止”信号 trap ' ' TERM
- Bootstrap 3 与 Foundation 5
开发工程师, 使用 Bootstrap. 前端开发人员, 使用 Foundation. 我们来谈谈为什么. Bootstrap 与 Foundation 有许多关键的区别, 但是, 我想你只需要记住一 ...
- kubernetes 条件需求
1. 你必须拥有一台安装有Docker的机器. 2. 你的内核必须支持 memory and swap accounting .确认你的linux内核开启了如下配置: CONFIG_RESOURCE_ ...
- const、volatile、mutable的用法
http://blog.csdn.net/wuliming_sc/article/details/3717017 const.volatile.mutable的用法 const修饰普通变量和指针 co ...
- linux下编译安装apache
在linux(CentOS6.5)上安装Apache,要首先确保以下程序事先安装 apr:The mission of the Apache Portable Runtime (APR) projec ...
- git clean -fdx
http://stackoverflow.com/questions/5807137/git-how-to-revert-uncommitted-changes-including-files-and ...
- AVFoundation(二)---MPMusicPlayerController
话不多说,直接上代码,代码中详细介绍了如何初始化,并设置一些常用的属性. /** * MPMusicPlayerController用于播放音乐库中的音乐 */ /** * 初始化MPMusicPla ...
- __declspec(dllexport) 和 __declspec(dllimport)的作用
operatordll.h #include <iostream> #ifndef _WIN32 #define DLL_EXPORT#else #ifdef OPERATORDLL_EX ...
- java 静态方法和单例模式的区别
1.加载时间 首先明白内存问题 Java内存分为:堆内存.栈内存.方法区(静态区和非静态区).本地方法区 无论是静态方法还是非静态方法,在内存中都只有一份分别位于方法区的静态区和非静态区:非静态方法在 ...