<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:實(shí)驗內容——test驅動(dòng)

嵌入式Linux設備驅動(dòng)開(kāi)發(fā)之:實(shí)驗內容——test驅動(dòng)

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.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)

{/*靜態(tài)注冊一個(gè)設備,設備號先前指定好,并設定設備名,用cat/proc/devices來(lái)查看*/

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)編譯代碼。

虛擬設備的驅動(dòng)程序的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)加載和卸載模塊。

通過(guò)下面兩個(gè)腳本代碼分別實(shí)現驅動(dòng)模塊的加載和卸載。

加載腳本test_drv_load如下所示:

#!/bin/sh

#驅動(dòng)模塊名稱(chēng)

module=test_drv

#設備名稱(chēng)。在/proc/devices中出現

device=test_dev

#設備文件的屬性

mode=664

group=david

#刪除已存在的設備節點(diǎn)

rm-f/dev/${device}

#加載驅動(dòng)模塊

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

#查到創(chuàng )建設備的主設備號

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

#創(chuàng )建設備文件節點(diǎn)

mknod/dev/${device}c$major0

#設置設備文件屬性

chgrp$group/dev/${device}

chmod$mode/dev/${device}

卸載腳本test_drv_unload如下所示:

#!/bin/sh

module=test_drv

device=test_dev

#卸載驅動(dòng)模塊

/sbin/rmmod$module$*||exit1

#刪除設備文件

rm-f/dev/${device}

exit0

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>