- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux简单的设备驱动程序
简单的设备驱动程序
一、实验目的:动手实践一个简单的字符型设备驱动程序,学习驱动程序编写的基本步骤。
二、实验内容:编写一个简单的字符型设备驱动程序。
三、实验设备:PC机,REDHAT软件,配置好ARMLINUX的开发环境。
四、实验步骤:
编写简单的字符型设备驱动程序,学习编写驱动程序的过程。打开VI,编写以下代码:
//device driver program
#includelinux/config.h/*内核编译时的配置文件,文件里面指向一个make menuconfig自动生成的文件autoconf.h*/
#includelinux/kernel.h//模块驱动程序的头文件
#includelinux/module.h
#includelinux/sched.h //中断相关的头文件
#includelinux/interrupt.h
#includelinux/timer.h //定时器相关的头文件
#includelinux/init.h
#includelinux/delay.h
#includelinux/modversions.h
#includelinux/version.h //文件中定义了LINUX内核的所有的版本,用于版本检查
#includeasm/io.h//访问系统硬件用的头文件
#includeasm/irq.h
#includeasm/hardware.h
#includelinux/devfs_fs_kernel.h
#define SimpleD_MAJOR 96 //定义主设备号
devfs_handle_t dev_handle; //系统DEVFS所用到的handle
int SimpleD_temp_count=0; //定义系统变量,防止文件被多重打开
/*-------------------Simpled Read------------------------*/
ssize_t SimpleD_read(struct file *file,char *buf,size_t count,loff_t *f_ops)
{
printk(S3c2410:device file-Read operation!\n);
return count;
}
/*-------------------Simpled Write------------------------*/
ssize_t SimpleD_write(struct file *file,char *buf,size_t count,loff_t *f_ops)
{
printk(S3c2410:device file-write operation!\n);
return count;
}
/*-------------------Simpled Ioctl------------------------*/
ssize_t SimpleD_ioctl(struct inode *inode,struct file *file,unsigned int cmd,long data)
{
printk(S3c2410:device file-ioctl operation!\n);
}
/*------a-------------Simpled device open------------------------*/
ssize_t SimpleD_open(struct inode *inode,struct file *file)
{
return 0;
}
/*-------------------Simpled device close------------------------*/
ssize_t SimpleD_release(struct inode *inode,struct file *file)
{
devfs_unregister_chrdev(SimpleD_MAJOR,SimpleD);
devfs_unregister(dev_handle);
return 0;
}
/*SimpleD设备向系统注册用的OPS结构,里面是对应的操作*/
struct file_operations SimpleD_ops={
open : SimpleD_open,
read : SimpleD_read,
write : SimpleD_write,
ioctl : SimpleD_ioctl,
release : SimpleD_release,
};
/*初始化设备的函数*/
static int __init HW_SimpleD_init(void)
文档评论(0)