LINUX 设备驱动 (一)
来源:互联网 发布:西北师范知行学院贴吧 编辑:程序博客网 时间:2024/06/04 19:17
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.oelsePWD := $(shell pwd)KVER := $(shell uname -r)KDIR := /lib/modules/$(KVER)/buildall:$(MAKE) -C $(KDIR) M=$(PWD) modulesclean: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 make2: sudo mknod /dev/chr_dev c MAJOR(主设备号) MINOR(次设备号)3: gcc main.c4 ./a.out5 dmesg
1 0
- Linux设备驱动(一)
- LINUX 设备驱动 (一)
- Linux设备驱动--字符设备(一)
- Linux 设备驱动 一
- linux设备驱动(一)---字符设备之led驱动
- PCI设备linux驱动(一)
- 浅谈Linux PCI设备驱动(一)
- Linux字符设备驱动入门(一)
- 浅谈Linux PCI设备驱动(一)
- 浅谈Linux PCI设备驱动(一)
- linux 设备驱动初学(一)
- linux 设备驱动初学(一)
- linux块设备驱动学习(一)
- 浅谈Linux PCI设备驱动(一)
- Linux I2C设备驱动编写(一)
- Linux i2c设备驱动编写(一)
- Linux I2C设备驱动编写(一)
- 浅谈Linux PCI设备驱动(一)
- win10 无法安装.netframework 3.5问题
- 理解RESTful架构
- BASE16/32/64
- “CL.exe”已退出,代码为 -1073741515。
- THE MNIST DATABASE of handwritten digits
- LINUX 设备驱动 (一)
- 求救,mac 下如何获取iphoto的路径!!
- CountDownLatch & CyclicBarrier & Semaphore
- RxJava基本使用
- TextView的measure
- Weex项目初始化weex-iOS集成
- JS与OC交互问题
- CQL(Cassandra Query Language)定义
- tableView cellforrowatindexpath 方法不掉用