linux设备驱动--等待队列实现
2023-09-27 14:28:47 时间
//设置当前进程的状态为TASK_INTERRUPTIBLE
//TASK_INTERRUPTIBLE是阻塞态,进程当前正在等待除CPU外的其他系统资源,可以被信号唤醒.
set_current_state(TASK_INTERRUPTIBLE);
//通知调度器执行调度。
schedule();
if(signal_pending(current))
return -ERESTARTSYS;
// return -EAGAIN;
printk("read: wake up\n");
ret = size;
empty = true;
return ret;
ssize_t test_write(struct file *filp, const char __user *buf, size_t size, loff_t *off)
int ret;
empty = false;
wake_up_process(task);
ret = size;
return ret;
int major = 0;
struct file_operations fops = {
.open = test_open,
.release = test_close,
.read = test_read,
.write = test_write,
//模块;
int test_init(void)
int ret;
printk("test init\n");
//注册一个字符设备驱动
ret = register_chrdev(major, DEV_NAME, fops);
if(ret 0)
return ret;
else
if(0 == major)
major = ret;
printk("major = %d\n", major);
return 0;
void test_exit(void)
printk("test exit\n");
//撤销字符设备
unregister_chrdev(major, DEV_NAME);
module_init(test_init);
module_exit(test_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("yang.yx");
MODULE_VERSION("1.1");
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
Makefile
obj-m += test.o ROOTFS = /rootfs KERNEL_SRC = /lib/modules/`uname -r`/build make -C $(KERNEL_SRC) M=`pwd` modules clean: make -C $(KERNEL_SRC) M=`pwd` clean rm -rf app install: make -C $(KERNEL_SRC) M=`pwd` modules_install INSTALL_MOD_PATH=$(ROOTFS) arm-linux-gcc app.c -o appioctl.c
#ifndef __IOCTL_H__ #define __IOCTL_H__ #include linux/ioctl.h #define LED_TYPE 0x1 #define LED_ALLON _IO(LED_TYPE, 0) #define LED_ALLOFF _IO(LED_TYPE, 1) #define LED_ON _IOW(LED_TYPE, 2, int) #define LED_OFF _IOW(LED_TYPE, 3, int) #endif
morixinguan ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
相关文章
- Linux驱动技术(五) _设备阻塞/非阻塞读写
- [ARM-LInux开发]linux设备驱动makefile入门解析
- 【Linux开发】linux设备驱动归纳总结(五):4.写个简单的LED驱动
- 【Linux开发】linux设备驱动归纳总结(四):4.单处理器下的竞态和并发
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
- linux设备树分析3-生成platform_device
- 【Linux 驱动】设备驱动程序再理解
- Linux设备驱动开发详解:基于最新的Linux 4.0内核
- 乾坤合一~Linux设备驱动之USB主机和设备驱动
- 蜕变成蝶~Linux设备驱动之CPU与内存和I/O
- 蜕变成蝶~Linux设备驱动之字符设备驱动
- 使用udev高效、动态的管理Linux设备文件
- 从零开始写linux字符设备驱动程序(一)(基于友善之臂tiny4412开发板)
- linux设备驱动中device_init_wakeup
- 深入理解Linux内核-I/O体系结构和设备驱动程序
- Linux驱动开发—设备树开发详解