(实验8驱动程序的编写驱动程序一用户空间和内核空间的通信.docVIP

  • 9
  • 0
  • 约4.58千字
  • 约 8页
  • 2017-02-01 发布于北京
  • 举报

(实验8驱动程序的编写驱动程序一用户空间和内核空间的通信.doc

(实验8驱动程序的编写驱动程序一用户空间和内核空间的通信

实验8 用户空间和内核空间的通信 一、实验目的: 学习利用编写驱动程序,完成用户空间和内核空间的通信,加载驱动模块、显示驱动模块,卸载驱动模块。 二、实验内容 前面学习了bootloader kernel filesystem,进行过内核的移植,根文件系统的制作,现在进行驱动程序的编写,完成用户空间和内核空间的通信。 #su root切换root权限 密码123456 通过第一个hello world驱动程序,我们学会了驱动程序的框架。 知道了,如何编译,如何加载,如何卸载一个驱动程序。接下来我们来做一个完整的驱动程序 Demo_Driver.c #includelinux/kernel.h #includelinux/init.h #includelinux/fs.h #includelinux/module.h #define Demo_MAJOR 98 ? //定义主设备号 #define Demo_DEBUG #define VERSION ? Demo_Driver void showversin(void) { printk(KERN_EMERG***********************************************\n); printk(KERN_EMERG\tVERSION\t\n); printk(KERN_EMERG***********************************************\n); } //static int Demo_temp_count=0; size_t Demo_read(struct file *file,char *buf,size_t count,loff_t *f_ops) { #ifdef Demo_DEBUG printk(KERN_EMERGDemo_read[-kernel--]\n); #endif return count; } size_t Demo_write(struct file *file,const char *buf,size_t count,loff_t * f_ops) { #ifdef Demo_DEBUG printk(KERN_EMERGDemo_write[-kernel-]\n); #endif return count; } int Demo_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long data) { #ifdef Demo_DEBUG printk(KERN_EMERGDemo_ioctl[-kernel-]\n); #endif return 0; } int Demo_open(struct inode * inode,struct file * file) { #ifdef Demo_DEBUG printk(KERN_EMERGDemo_open[-kernel-]\n); #endif //MOD_INC_USE_COUNT; return 0; } int Demo_release(struct inode *inode,struct file *file) { #ifdef Demo_DEBUG printk(KERN_EMERGDemo_release[-kernel-]\n); #endif //MOD_DEC_USE_COUNT; return 0; } struct file_operations Test_ctl_ops={ .open=Demo_open, .read= Demo_read, .write=?Demo_write, .ioctl=?Demo_ioctl, release: ?Demo_release, };//a static int HW_Test_CTL_init(void) { int ret = -ENODEV; ret?= register_chrdev(Demo_MAJOR,demo_drv,Test_ctl_ops); if(ret0) { printk(KERN_EMERGDemo_module failed with %d\n[-kernel-],ret); return ret; } else { printk(KERN_EMERGDemo_driver register success!!![-kernel-]\n); } printk(\n...\nret=%x\n...\n,ret); showversin(); return ret; } static int Demo_Te

文档评论(0)

1亿VIP精品文档

相关文档