【设计分享】Vmware虚拟机下,linux驱动及应用层实例

来源:互联网 发布:电脑软件有什么 编辑:程序博客网 时间:2024/05/18 02:44

实现功能:通过在虚拟机中建立设备文件/dev/mydev,进行字符设备的读写操作,并利用应用层显示出来。

1、新建驱动文件  driver.c

#include <linux/init.h>#include <linux/fs.h>#include <asm/uaccess.h>MODULE_LICENSE("GPL");#define MAJOR_NUM 100#define EFALUT 1static ssize_t my_read(struct file * filp,char * buf, ssize_t size,loff_t * off);static ssize_t my_write(struct file * flip,const char * buf,ssize_t size,loff_t *off);struct file_operations my_ops = {    read: my_read,    write:my_write,};static int global_var=0;static int __init my_init(void){    int ret;    ret=register_chrdev(MAJOR_NUM,"mydev",&my_ops);    if(ret)        printk("my dev register failer!\n");    else        printk("my dev register success!\n");    return ret;}static void __exit my_exit(void){    unregister_chrdev(MAJOR_NUM,"mydev");}
{    if(copy_to_user(buf,&global_var,sizeof(int)))        {  return -EFALUT; }    return sizeof(int);}static ssize_t my_write(struct file * flip,const char * buf,ssize_t size,loff_t *off){    if(copy_from_user(&global_var,buf,sizeof(int)))        {  return -EFALUT;   }    return sizeof(int);}module_init(my_init);module_exit(my_exit);


新建Makefile文件。
obj-m := driver.oPWD = $(shell pwd)KDIR=/lib/modules/2.6.32-71.el6.i686/build/all:                $(MAKE)  -C  $(KDIR)  M=$(PWD)  modulesclean:                rm -f *.o


新建应用层文件 test.c

#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <fcntl.h>void main(){        int fd,num;        fd=open("/dev/mydev",O_RDWR,S_IRUSR|S_IWUSR);        if(fd!=-1)        {                read(fd,&num,sizeof(int));                printf("my read num is %d\n",num);                printf("please input a num:");                scanf("%d",&num);                write(fd,&num,sizeof(int));                read(fd,&num,sizeof(int));                printf("my read num is %d\n",num);                close(fd);        }        else                printf("open device failed!\n");}


1、运行make,编译模块,并insmod加载到内核
2、编译应用层逻辑,运行。

3、得到结果:



0 0
原创粉丝点击