驱动开发-字符设备2

来源:互联网 发布:mac chrome plugins 编辑:程序博客网 时间:2024/05/18 01:35

字符设备驱动2


  • readl和writel 读寄存器的值,写寄存器的值
    writel(readl(gpd0con) & (~(0xf << 0)) | (0x2 << 0));

void __iomen *timer_base

timer_base = ioremap(0x100,0x4);

timer_base += 0x4; 加多少就是多少


  • 内存之间的拷贝(用户空间和内核空间)
memcpy(void * dest,const void * src,size_t n);

__must_check 必须判断返回值

__user 修饰的都是用户空间


  • 从内核区中读取数据到用户区
static inline unsigned long __must _check copy_to_user(void __user *to,const void *from,unsigned long n);//1. void __user *to 用户空间//2. void *from 内核空间//3. long n 拷贝的大小static inline unsigned long __must_check copy_from_user(void *to,void __user *from,unsigned long n);//1. void *to 内核空间//2. void __user *from 用户空间//3. long n 拷贝的大小//成功返回0,失败返回未拷贝的字节数/*****************file_operations结构体****************///loff_t *loff --> 文件指针偏移的位置  

  • 用户空间与内核空间交互
/***********************用户空间************************/1. 无传参的命令发送    ioctl(int d,int request,void *argp);    //1.文件描述符    //2.命令    //    32位的无符号整形    //    设备类型(8)--> 那一类设备'c'    //    序列号(8) --> 这一类设备的第几个命令    //    方向(2) --> 读写判断    //    尺寸(14) --> 大小    内核已经定义量宏(命令)    没有数据传递使用的命令    _IO(taye,nr);    1.type 设备类型    2.nr 序列号    ioctl(fd,_IO('a',0));2. 有传参的命令发送    ioctl(int d,int request,void *argp);//1.文件描述符//2.命令//    32位的无符号整形//    设备类型(8)--> 那一类设备'c'//    序列号(8) --> 这一类设备的第几个命令//    方向(2) --> 读写判断//    尺寸(14) --> 大小//3.需要传递的数据    内核已经定义量宏(命令)    有数据传递的命令    _IOR(type,nr,size);    _IOW(type,nr,size);    _IOWR(type,nr,size);    1.type -- 设备类型    2.nr -- 序列号    3.size -- 数据类型    ioctl(fd,\_IO('a',0,int),&pre);

/***********************内核空间************************/1. 无传参的命令发送    long (*unlocked_ioctl) (struct file*,unsiged int,unsiged long);    //1.文件描述符    //2.用户空间传的命令    //3.用户空间传递的参数    static long my_ctrl(struct file* file,unsiged int cmd,unsiged long arg)    int data = 0;    if(copy_from_user(&data,(void *)arg,sizeof(int)));    switch(cmd)

  • 获取一个或多个设备编号
static inline int register_chrdev(unsigned int major,unsigned int baseminor,unsigned int count,const char *name);//1. 主设备号//2. 次设备号//3. 次设备号数//4. 名字

0 0
原创粉丝点击