zoukankan      html  css  js  c++  java
  • 字符型驱动程序的结构框架


    以下为例程(只是粗略写的,不能代一定能运行起来,实际情况按自己开发板与CPU进行修改)

    /**************************************************************************
    						驱动框架
    	1、写出led_open、led_read
    	2、怎样告诉内核
    		a、定义一个file_operations
    		b、把这个结构告诉内核register_chrdev
    		c、谁来调用澹(这个称为驱动的入口函数)
    
    		d、修饰
    *******************************************************************************************/
    #include<linux/module.h>
    #include<linux/kernel.h>
    #include<linux/fs.h>
    #include<linux/init.h>
    #include<linux/delay.h>
    #include<asm/uaccess.h>
    #include<asm/irq.h>
    #include<asm/io.h>
    #include<asm/arch/regs-gpio.h>
    #include<asm/hardware.h>
    
    
    
    /*打开设备函数*/
    
    static int my_led_open(struct inode *inode,struct file *file)
    {
    	printk("my_led here
    ");
    	return 0;
    }
    /*设备写函数*/
    
    static ssize_t my_led_write(struct file *file,const char __usr *buf,size_t count,loff_t *ppos)
    {
    	printk("my_led out
    ");
    	return 0;
    }
    
    
    /*定义一个file_operations结构*/
    static struct file_operations my_led_fops={
    	.owner	=	THIS_MODULE,	/*这是一个宏,推向编译模块时自动创建的__this_module变*/
    	.open	=	my_led_open,
    	.open	=	my_led_write,
    };
    
    
    int my_led_init(void)//入口函数
    {
    	register_chrdev(111,"my_led",&my_led_fops);//注册驱动
    	return 0;
    }
    
    int my_led_exit(void)//出口函数
    {
    	unregister_chrdev(111,"my_led");//注销驱动
    	return 0;
    }
    
    module_init(my_led_init);//修饰(即用一个宏来定义一个结构体)
    module_exit(my_led_init);//修饰(即用一个宏来定义一个结构体)



    另应用层测试程序:


    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<stdio.h>
    
    int main(int argc,char **argv)
    {
    	int fd;
    	int val = 1;
    	fd = open("/dev/my_led",O_RDWR);
    	if(fd<0)
    		printf("open err
    ");
    	write(fd,&val,4);
    	return 0;
    }



    makefile请自行编写


  • 相关阅读:
    C# .net页面乱码
    Spring Cloud 微服务三: API网关Spring cloud gateway
    Spring Cloud 微服务二:API网关spring cloud zuul
    Spring Cloud 微服务一:Consul注册中心
    Log4j2升级jar包冲突问题
    Log4j2配置
    opensearch空查询
    阿里云Opensearch数据类型
    Spring mybatis自动扫描dao
    【EDAS问题】轻量级EDAS部署hsf服务出现找不到类的解决方案
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3196730.html
Copyright © 2011-2022 走看看