LINUX 设备驱动 (一)
2016-12-29 16:09
218 查看
syw_char.c
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/cdev.h> static struct cdev chr_dev; static dev_t ndev; static int chr_open(struct inode* nd, struct file* filp) { int major ; int minor; major = MAJOR(nd->i_rdev); minor = MINOR(nd->i_rdev); printk(" syw chr_open, major = %d, minor = %d\n", major, minor); return 0; } static ssize_t chr_read(struct file* filp, char __user* u, size_t sz, loff_t* off) { printk("syw hr_read process!\n"); return 0; } struct file_operations chr_ops = { .owner = THIS_MODULE, .open = chr_open, .read = chr_read }; static int demo_init(void) { int ret; cdev_init(&chr_dev, &chr_ops); ret = alloc_chrdev_region(&ndev, 0, 1, "chr_dev"); if(ret < 0 ) { return ret; } printk("demo_init(): major = %d, minor = %d\n", MAJOR(ndev), MINOR(ndev)); ret = cdev_add(&chr_dev, ndev, 1); if(ret < 0) { return ret; } return 0; } static void demo_exit(void) { printk("demo_exit process!\n"); cdev_del(&chr_dev); unregister_chrdev_region(ndev, 1); } module_init(demo_init); module_exit(demo_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("sywuestc@sina.cn"); MODULE_DESCRIPTION("A simple device example!");
Makefile
fneq ($(KERNELRELEASE),) obj-m := syw_char.o else PWD := $(shell pwd) KVER := $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions modules.* Module.* endif
测试代码:main.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define CHAR_DEV_NAME "/dev/chr_dev"
int main()
{
int ret;
int fd;
char buf[32];
fd = open(CHAR_DEV_NAME, O_RDONLY | O_NDELAY);
if(fd < 0)
{
printf("open failed!\n");
return -1;
}
read(fd, buf, 32);
close(fd);
return 0;
}
编译步骤
1: sudo make
2: sudo mknod /dev/chr_dev c MAJOR(主设备号) MINOR(次设备号)
3: gcc main.c
4 ./a.out
5 dmesg
相关文章推荐
- linux 设备驱动编程
- linux设备驱动
- RTOS设备驱动向嵌人式Linux的移植
- Linux那些事儿之我是U盘(8)总线,设备,和驱动(上)
- Linux下的硬件驱动——USB设备(上)
- Linux那些事儿之我是U盘(9)总线,设备,和驱动(下)
- Linux 设备驱动 Edition 3
- Linux下的硬件驱动——USB设备(上)(驱动配置部分)
- Linux下PCI设备驱动开发
- Linux下PCI设备驱动程序开发 --- linux 驱动框架(二)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Linux下的硬件驱动——USB设备(上)(驱动配置部分)
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- linux 设备驱动编程
- 【Linux device driver】网络设备驱动注意的问题(三)
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 -zt
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- Linux下的硬件驱动——USB设备(下)
- Linux下的设备驱动简介——原创