杂项设备GPIO框架

10 篇文章 0 订阅
2 篇文章 0 订阅

杂项设备GPIO框架

GPIO框架主要分为三个部分:

  1. 注册设备;
  2. 注册驱动;
  3. 生成设备节点。

注册设备

设备注册在平台文件中注册,主要分为三步:

  1. 配置Kcnfig文件;
  2. 在menuconfig里面对内核进行剪裁;
  3. 编译内核,烧写进开发板。

注册驱动

下面以模块化的方式进行驱动注册,主要是方便调试

模块加载和模块卸载函数

module_init(gpio_init);
module_exit(gpio_exit);

初始化函数和卸载函数

static int gpio_int(void{
  platform_driver_register(&gpio_driver);//注册驱动
  return 0;
}
static void gpio_exit(void)
{
  platform_driver_unregister(&gpio_driver);//卸载驱动
}

平台驱动结构体platform_driver

platform_driver结构体成员还是挺多的,我这只用了probe和remove,示例如下:

struct platform_driver gpio_driver =
{
  .probe = gpio_probe,
  .remove = gpio_remove,
  .driver = {
  .name = device_name,//注册的设备名称
  .owner = THIS_MODULE,
  }
};

probe函数和remove函数

static int gpio_probe(struct platform_device *dev )
{
  gpio_request(gpio,"gpio");//根据实际情况写
  s3c_gpio_cfgpin(gpio,s3c_GPIO_OUTPUT);//将引脚设为输出模式
  gpio_set_value(gpio,0);//将引脚拉低
  misc_register(&gpio_dev);//注册杂项设备,成功后将生成设备节点
  return 0;
}
static int gpio_remove(struct platform_device *dev )
{
  misc_deregister(&gpio_dev);//卸载杂项设备
  return 0;
}

miscdevice结构体

static struct miscdevice gpio_dev =
{
  .minor = MISC_DYNAMIC_MINOR,//自动分配设备号
  .name = MISC_NAME,//生成设备节点的名称
  .fops = &gpio_ops,//与file_operations结构体连接起来
};

file_operations结构体

结构体file_operations也有很多成员,我这只用了两个,具体看个人需求

static struct file_operations gpio_ops =
{
  .owner = THIS_MODULE,
  .unlocked_ioctl = gpio_ioctl,
  .release = gpio_release,
};

unlocked_ioctl函数和release函数

static long gpio_ioctl(struct file *files, unsigned int ctl, unsigned long arg)
{
  gpio_set_value(gpio,ctl);
  return 0;
}
static int gpio_release(struct inode *, struct file *)
{
  printfk("release!!\n");
  return 0;
}

完毕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值