新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式Linux设备驱动开发之:实验内容——test驱动

嵌入式Linux设备驱动开发之:实验内容——test驱动

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.amcfsurvey.com/article/257106.htm

/*虚拟设备的file_operations结构*/

staticstructfile_operationstest_fops=

{

.owner=THIS_MODULE,

.read=test_read,

.write=test_write,

.open=test_open,

.release=test_release,

};

/*模块注册入口*/

intinit_module(void)

{

intresult;

dev_tdev=MKDEV(major,0);

if(major)

{/*静态注册一个设备,设备号先前指定好,并设定设备名,用cat/proc/devices来查看*/

result=register_chrdev_region(dev,1,TEST_DEVICE_NAME);

}

else

{

result=alloc_chrdev_region(dev,0,1,TEST_DEVICE_NAME);

}

if(result0)

{

printk(KERN_WARNINGTestdevice:unabletogetmajor%dn,major);

returnresult;

}

test_setup_cdev(test_dev,0,test_fops);

printk(Themajorofthetestdeviceis%dn,major);

return0;

}

/*卸载模块*/

voidcleanup_module(void)

{

cdev_del(test_dev);

unregister_chrdev_region(MKDEV(major,0),1);

printk(Testdeviceuninstalledn);

}

(2)编译代码。

虚拟设备的驱动程序的Makefile如下所示:

ifeq($(KERNELRELEASE),)

KERNELDIR?=/lib/modules/$(shelluname-r)/build/*内核代码编译路径*/

PWD:=$(shellpwd)

modules:

$(MAKE)-C$(KERNELDIR)M=$(PWD)modules

modules_install:

$(MAKE)-C$(KERNELDIR)M=$(PWD)modules_install

clean:

rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions

.PHONY:modulesmodules_installclean

else

obj-m:=test_drv.o/*将生成的模块为test_drv.ko*/

endif

(3)加载和卸载模块。

通过下面两个脚本代码分别实现驱动模块的加载和卸载。

加载脚本test_drv_load如下所示:

#!/bin/sh

#驱动模块名称

module=test_drv

#设备名称。在/proc/devices中出现

device=test_dev

#设备文件的属性

mode=664

group=david

#删除已存在的设备节点

rm-f/dev/${device}

#加载驱动模块

/sbin/insmod-f./$module.ko$*||exit1

#查到创建设备的主设备号

major=`cat/proc/devices|awk\$2==$device{print\$1}`

#创建设备文件节点

mknod/dev/${device}c$major0

#设置设备文件属性

chgrp$group/dev/${device}

chmod$mode/dev/${device}

卸载脚本test_drv_unload如下所示:

#!/bin/sh

module=test_drv

device=test_dev

#卸载驱动模块

/sbin/rmmod$module$*||exit1

#删除设备文件

rm-f/dev/${device}

exit0

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程




评论


相关推荐

技术专区

关闭