关于EXYNOS4调试的问题

这篇博客详细介绍了在EXYNOS4平台上进行字符类设备驱动调试的过程,包括申请设备号、创建设备类、内存分配与初始化、实现设备函数、注册设备到系统以及创建设备节点等关键步骤。同时强调了硬件初始化的重要性和设备号的一致性,以及释放内存的注意事项,以避免内存漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般一个普通的字符类设备驱动要经历下面的几个步骤

整个流程如下
/*头文件
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/stat.h>
#include <linux/fs.h>
#include <linux/kdev_t.h>
#include <linux/cdev.h>
#include <linux/slab.h>
        #include <linux/device.h>
  
  整个驱动模块大框架 module_init(scdev_init); 
  
  申请设备号 num_dev = MKDEV(numdev_major,numdev_minor);
     ret = register_chrdev_region(num_dev,DEVICE_MINOR_NUM,DEVICE_NAME);
ret = alloc_chrdev_region(&num_dev,numdev_minor,DEVICE_MINOR_NUM,DEVICE_NAME);
  
  创建设备类 myclass=class_create(THIS_MODULE , DEVICE_NAME);
  
  申请你想要的数据类型的内存 
             struct reg_dev *my_devices; 
             my_devices = kmalloc(DEVICE_MINOR_NUM * sizeof(struct reg_dev),GFP_KERNEL);
  
  初始化这段内存
             memset(my_devices,0,DEVICE_MINOR_NUM * sizeof(struct reg_dev));
  
  实现设备函数fops
cdev_init(&dev->cdev,&my_fops);
dev->cdev.owner = THIS_MODULE;
dev->cdev.ops = &my_fops;

  注册设备到系统
         err = cdev_add(&dev->cdev,devno,1);      

  创建设备节点
      device_create(myclass,NULL,MKDEV(numdev_major,numdev_minor+i),NULL,DEVICE_NAME"%d",i);
  
  初始化具体硬件 iic io spi....
  xxxx_init();
  

*/


这其中不能忘记硬件的初始化,因为这是个板集支持包和板子Linux系统的桥梁

另外就是设备节点的设备号要和注册设备到系统 cdev_add 中的设备号一致

这样才能完成一个设备的使用。

申请的内存要记得释放,而且要逐级释放,不能有遗漏,否则会造成内存漏洞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值