新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux設備驅動開發之:實驗內容——test驅動

        嵌入式Linux設備驅動開發之:實驗內容——test驅動

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.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教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 米脂县| 鱼台县| 东兰县| 郓城县| 特克斯县| 马鞍山市| 湖口县| 卫辉市| 开封市| 瓦房店市| 嘉荫县| 清河县| 福泉市| 崇仁县| 乌海市| 鄂州市| 石柱| 衡东县| 扎赉特旗| 商南县| 丰台区| 罗定市| 克拉玛依市| 巴南区| 柞水县| 孙吴县| 武宁县| 宁明县| 蒲江县| 怀柔区| 昌平区| 信丰县| 新泰市| 资溪县| 南城县| 扎兰屯市| 宜兰市| 淳化县| 射洪县| 龙泉市| 绍兴县|