基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read、write

基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(二)之cdev与read、write 0. 导语

在上一篇博客里面,基于OMAPL138的字符驱动_GPIO驱动AD9833(一)之ioctl 中使用#include <linux/miscdevice.h>中的miscdevice机制,在呢篇博客中使用宋宝华的Linux驱动设备中提供的cdev机制完成注册,

根据参考文献[1]中所说:

misc设备其实也是字符设备,主不过misc设备驱动在字符设备的基础上又进行了一次封装,使用户可以更方便的使用。

在本次实验中确实印证了使用cdev比较复杂,且加载ko模块驱动之后还需要查看设备号,手动mknod节点,而且在卸载驱动的时候也是非常繁琐的,但在这里本着学习的目的也进行了实验,后续的开发会使用miscdevice机制而不使用cdev机制

本次实验主要针对字符设备的:

cdev注册设备

read函数的使用

write函数的使用

在上一篇博客基于OMAPL138的字符驱动_GPIO驱动AD9833(一)之ioctl,只能用ioctl函数进行一个字节的幻数进行指令通信,但无法传输类似于设置频率指令。如果传递这样的参数,只需要使用write和read函数完成数据的传递。

1. cdev的使用 cdev的定义

cdev的定义信息包含在#include <linux/cdev.h>头文件中,需要使用cdev当然要定义cdev的结构体了,我们将cdev的信息定义在了我们的设备定义struct ad9833下。

AD9833 结构体定义:

struct ad9833_t { struct ad9833_hw_t hw; struct ad9833_t *self; enum ad9833_wavetype_t wave_type; struct cdev cdev; unsigned char mem[ AD9833_SIZE ]; unsigned int delay; void (*write_reg) ( AD9833 *self, unsigned int reg_value); void (*init_device) ( AD9833 *self ); void (*set_wave_freq)( AD9833 *self , unsigned long freqs_data); void (*set_wave_type)( AD9833 *self, enum ad9833_wavetype_t wave_type ); void (*set_wave_phase)( AD9833 *self, unsigned int phase ); void (*set_wave_para)( AD9833 *self, unsigned long freqs_data, unsigned int phase, enum ad9833_wavetype_t wave_type ); };

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfsdf.html