Linux驱动程序学习笔记(1)

一,编写驱动程序的大概过程

(1)构造file_operations结构中要用到的各个成员函数(write,open,ioctl等等)

(2)编写加载模块的初始化函数和退出函数,在初始化函数里注册驱动程序

(3)声明初始化函数和退出函数

二,最简单的驱动程序例子

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/poll.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/irq.h>
#include <asm/io.h>

static int wzc_driver_open(struct inode *inode, struct file *file)
{
	printk("wzc open!\n");
	return 0;
}

static int  wzc_driver_write(struct file *filp, char __user *buff, size_t count, loff_t *offp)
{
	printk("wzc write!\n");
	return 0;
}

static struct file_operations wzc_fp = 
{
	.owner = THIS_MODULE,
	.open = wzc_driver_open,
	.write = wzc_driver_write
};


int major;
static int wzc_driver_init(void)
{
	printk("wzc init2212!\n");
	major = register_chrdev(0,"wzc_driver",&wzc_fp);	//注册字符驱动程序,0代表系统自动分配主设备号
	return 0;
}



static void wzc_driver_exit(void)
{
	unregister_chrdev(major,"wzc_driver");
}


module_init(wzc_driver_init);
module_exit(wzc_driver_exit);
MODULE_LICENSE("GPL");


注意,上面代码没有自动创建该驱动程序的设备文件,需要手动用 mknod /dev/xxxx c major minor 命令创建设备文件,其中xxxx是设备文件名字,major是设备主设备号,minor是次设备号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值