为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

linux简单的设备驱动程序

2011-10-23 4页 doc 32KB 27阅读

用户头像

is_009576

暂无简介

举报
linux简单的设备驱动程序简单的设备驱动程序 简单的设备驱动程序 一、实验目的:动手实践一个简单的字符型设备驱动程序,学习驱动程序编写的基本步骤。 二、实验内容:编写一个简单的字符型设备驱动程序。 三、实验设备:PC机,REDHAT软件,配置好ARMLINUX的开发环境。 四、实验步骤: 1、​ 编写简单的字符型设备驱动程序,学习编写驱动程序的过程。打开VI,编写以下代码: //device driver program #include/*内核编译时的配置文件,文件里面指向一个make menuconfig自动生成的文件autoconf.h*/ #i...
linux简单的设备驱动程序
简单的设备驱动程序 简单的设备驱动程序 一、实验目的:动手实践一个简单的字符型设备驱动程序,学习驱动程序编写的基本步骤。 二、实验内容:编写一个简单的字符型设备驱动程序。 三、实验设备:PC机,REDHAT软件,配置好ARMLINUX的开发环境。 四、实验步骤: 1、​ 编写简单的字符型设备驱动程序,学习编写驱动程序的过程。打开VI,编写以下代码: //device driver program #include/*内核编译时的配置文件,文件里面指向一个make menuconfig自动生成的文件autoconf.h*/ #include//模块驱动程序的头文件 #include #include //中断相关的头文件 #include #include //定时器相关的头文件 #include #include #include #include //文件中定义了LINUX内核的所有的版本,用于版本检查 #include//访问系统硬件用的头文件 #include #include #include #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) { int ret=-ENODEV; int delay; //注册字符型设备 ret=devfs_register_chrdev(SimpleD_MAJOR,"SimpleD",&SimpleD_ops); if(ret<0){ printk("S3c2410:init_module failed with %d\n",ret); return ret; } else{ printk(KERN_INFO"S3c241o simpleD register success!!!\n"); } dev_handle=devfs_register(NULL,"SimpleD",DEVFS_FL_DEFAULT,96,0,S_IFCHR,&SipleD_ops,NULL) return ret; } //系统初始化 static int __init s3c2410_SimpleD_init(void) { int ret=-ENODEV; ret=HW_SimpleD_init(); if(ret) return ret; return 0; } //模块初始化函数 int init_module() { s3c_2410_SimpleD_init(); } //模块卸载函数 void cleanup_module() { printk("Module clean up\n"); } 2、编译 (1)​ 确定交叉编译器的路径,本系统在/opt/host/armv41/bin/下面 (2)​ 确认Linux内核源代码的存放位置,本系统在/s3c2410_linux/kernel/下面 #/opt/host/armv4l/bin/arv4l_unknown-linux-gcc –D__KERNEL__ -I/s3c2410_linux/kernel/include-DMODULE –c –o simple_device.o simple_device.c 前面是包含全路径的交叉编译器,–D_KERNEL_DMODUL代编译内核模块,(KERNEL两侧分别用两条下划线),-c表示只编译不连接,-o指定输出的文件名,最后是需要被编译的C文件。 (3)​ 将编译好的simple_device.o复制到/s3c2410_linux/nfs/下面,输入 (4)​ 输入#/etc/rc.d/init.d/nfs restart 打开NFS (5)​ 正确连接好实验仪后,打开电源,在PC的minicom下进入linux系统,输入 #ifconfig(获取IP地址) #ifconfig etho #ifcofig #mount (宿主机地址):/s3c2410_linux/nfs /mnt cd /mnt insmod simple_device.o 系统输出: ********************************************* 输入lsmod可以察看模块 #rmmod simple_device 输入lsmod可以察看模块。 系统输出:**************************************** module Size Use by 通过上面的步骤,我们已经可以正确地编写编译、插入、察看、删除模块。这些基本操作都是LINUX驱动程序开发的重要部分熟练应征很重要。 (6)​  , 2、​ 编写测试程 序 正确插入驱动程序后,需要对驱动程序进行测试,这个程序是运行在应用层的程序。利用测试程序看看是否可以完成我们预计的工作。我们主要测试驱动程序的暴露接口。使用交叉编译器编译并且在实验仪上运行。 #/opt/host/armv4l/bin/arv4l_unknown-linux-gcc –o test_device test_devicec #cp ./test_device/s3c2410_linux/nfs 在实验仪上采用NFS的进行测试程序 #cd /mnt #insmod simple_device.o #./test_device 测试程序能够正常地对驱动程序进行操作,就表示驱动程序正常,这样,就完成了驱动程序的编写方法。
/
本文档为【linux简单的设备驱动程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索