程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字符型驅動程序的結構框架

字符型驅動程序的結構框架

編輯:C++入門知識

/**************************************************************************
						驅動框架
	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\n");
	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\n");
	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\n");
	write(fd,&val,4);
	return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved