新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > dm6441的gpio驅動

        dm6441的gpio驅動

        作者: 時間:2016-11-26 來源:網絡 收藏

        static int davinci_dm644x_gpio_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
        {
        //const char *tag;
        intgpio5_value1;
        intgpio5_value2;
        intgpio6_value1;
        intgpio6_value2;
        intgpio7_value1;
        intgpio7_value2;
        switch(cmd)
        {
        case 0://gpio = 0



        gpio_direction_output(ZX_GPIO5, 0);
        gpio_direction_output(ZX_GPIO6, 0);
        gpio_direction_output(ZX_GPIO7, 0);
        gpio5_value1 = gpio_get_value(ZX_GPIO5);
        gpio6_value1 = gpio_get_value(ZX_GPIO6);
        gpio7_value1 = gpio_get_value(ZX_GPIO7);
        printk("gpio5_value1 = %d, gpio6_value1 = %d, gpio7_value1 = %d/n", gpio5_value1, gpio6_value1,gpio7_value1);
        //}

        break;
        case 1://gpio = 1
        //if(0==arg)
        //{
        //gpio_request(ZX_GPIO5, tag);
        //printk("cmd = 1, ZX_GPIO5= %d/n", ZX_GPIO5);
        gpio_direction_output(ZX_GPIO5, 1);
        gpio_direction_output(ZX_GPIO6, 1);
        gpio_direction_output(ZX_GPIO7, 1);
        gpio5_value2 = gpio_get_value(ZX_GPIO5);
        gpio6_value2 = gpio_get_value(ZX_GPIO6);
        gpio7_value2 = gpio_get_value(ZX_GPIO7);
        printk("gpio5_value2 = %d, gpio6_value2 =%d, gpio7_value2=%d/n", gpio5_value2, gpio6_value2, gpio7_value2);
        //}

        break;
        default:
        return -EINVAL;
        }
        }


        static const struct file_operations davinci_dm644x_gpio_fileops = {
        .owner= THIS_MODULE,
        .open= davinci_dm644x_gpio_open,
        .ioctl= davinci_dm644x_gpio_ioctl,
        .release = gpio_release
        };

        static int __init davinci_dm644x_gpio_init(void)
        {
        int ret;

        ret = register_chrdev(GPIO_MAJOR, DEVICE_NAME, &davinci_dm644x_gpio_fileops);
        if(ret < 0)
        {
        printk(DEVICE_NAME " register falid!/n");
        return ret;
        }

        printk (DEVICE_NAME" initialized/n");

        return ret;
        }

        static void __exit davinci_dm644x_gpio_exit(void)
        {
        unregister_chrdev(GPIO_MAJOR, DEVICE_NAME);
        }

        module_init(davinci_dm644x_gpio_init);
        module_exit(davinci_dm644x_gpio_exit);

        MODULE_AUTHOR("xxx <>");
        MODULE_DESCRIPTION("Davinci DM644x gpio driver");
        MODULE_LICENSE("GPL");

        本文引用地址:http://www.104case.com/article/201611/321880.htm

        下面是應用程序

        #include
        #include
        #include
        #include

        #defineon(1)
        #defineoff(0)

        int main(void)
        {

        int gpio_number = 0;
        int fd;


        fd = open("/dev/dm644x_gpios", 0);
        if (fd < 0)
        {
        perror("open device /dev/dm644x_gpios");
        exit(1);
        }

        printf("open gpio, here is app/n");
        sleep(1);
        printf("gpio_number = %d/n", gpio_number);
        sleep(1);
        while (1) {
        ioctl(fd, 1, 0);
        sleep(5);
        ioctl(fd, 0, gpio_number);
        sleep(5);
        }
        close(fd);
        return 0;
        }


        下面是Makefile
        #
        # Makefile for the skeleton device drivers.
        #

        KDIR=/root/work/linux-2.6.18_pro500# 內核目錄
        PWD := $(shell pwd)#是指要編譯的內核模塊的源程序在哪個目錄下,$(PWD)指與Makefile在同一目錄下,也就是當前目錄。


        ifeq ($(KERNELRELEASE), )

        modules:
        $(MAKE) -C $(KDIR) M=$(PWD) modules#編譯模塊的規則,
        arm_v5t_le-gcc -o gpio_test app.c#編譯應用程序
        cp -f *.ko gpio_test /nfsroot/dm644x/filesys#把編譯好的驅動和應用程序復制到扳子的文件系統中去
        #scp char-reg.kozlh@192.168.1.160:/home/zlh/opt/filesystem
        modules_install:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
        clean:#刪除生成的所有文件
        rm -rf gpio_test *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

        .PHONY: modules modules_install clean

        else
        #obj-m += skeleton_dev_class.o
        obj-m += gpio_driver.o#你要編譯的模塊名稱,這里必須和$(PWD)目錄下C程序文件的名稱相對應,如果C程序文件為world.c,那么必須修改成obj-m = world.o,也可
        #Obj-m = hello.o
        #Hello-objs = hello1.o, hello2.o編譯多個文件生成hello.o
        endif


        直接make 就行了如果不行的話make ARCH=arm CROSS_COMPILE=arm_v5t_le-加上編譯工具

        超級終端操作:
        insmodgpio_drive.ko
        mknod/dev/dm644x_gpiosc1990
        ./gpio_test


        上一頁 1 2 下一頁

        關鍵詞: dm6441gpio驅

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 芦山县| 株洲县| 庆云县| 闽清县| 通州市| 乐亭县| 兰州市| 思南县| 沅陵县| 阜康市| 泰来县| 泾阳县| 通辽市| 宝丰县| 邻水| 仪征市| 泰安市| 务川| 乌什县| 常熟市| 太和县| 将乐县| 宝鸡市| 泸西县| 成安县| 子长县| 仁怀市| 炉霍县| 黄冈市| 如皋市| 墨江| 精河县| 利津县| 龙岩市| 英吉沙县| 皋兰县| 德惠市| 洛扎县| 敖汉旗| 栾川县| 安岳县|