2023 linux驱动中probe函数的返回值,返回0成功。返回负数则失败,这个时候驱动向系统申请的有关资源都会被释放,如中断号,申请的内存等。实际测试。

一、在linux 驱动里面申请一个gpip,,gpip2b4 变换是 76 ,dts 如下:

	m117b@45 {
        compatible = "xxx,m117b";
		reg = <0x45>;
		pinctrl-names = "default";
		pinctrl-0 = <&m117b_gpio>;
		pwdn-gpios = <&gpio2 RK_PB4 IRQ_TYPE_LEVEL_LOW>;
	};

二、probe 函数返回0情况下,可以看到gpio-76 被占用。

       2.1、驱动里面的probe函数代码

int m117b_probe(struct i2c_client *i2c_client, const struct i2c_device_id *id)
{
	int ret;
	struct device *dev = &i2c_client->dev;	

	
	m117b_client = i2c_client;

	ret = device_create_file(&i2c_client->dev, &dev_attr_m117b_read_temp);
	if (ret)
	  printk("[%s]device_create_file is error \n",__func__);
	else
	  printk("[%s]ret is %#x\n", __func__,ret);

	printk("[%s]m117b_probe test %#x\n", __func__,ret);
	pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW);
    
    return 0;
}

        2.2、可以看到这个gpio申请成功,被占用。

三、probe 返回负数的情况,自动释放已经申请的gpip。

      3.1、驱动probe 函数代码

int m117b_probe(struct i2c_client *i2c_client, const struct i2c_device_id *id)
{
	int ret;
	struct device *dev = &i2c_client->dev;	

	
	m117b_client = i2c_client;

	ret = device_create_file(&i2c_client->dev, &dev_attr_m117b_read_temp);
	if (ret)
	  printk("[%s]device_create_file is error \n",__func__);
	else
	  printk("[%s]ret is %#x\n", __func__,ret);

	printk("[%s]m117b_probe test %#x\n", __func__,ret);
	pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW);

	
	return -EINVAL;
}

      3.2、gpio-76 没有被占用。

         3.3、串口log 会提示error

 

四、总结

       当一个probe函数返回负数,驱动向系统申请的有关资源都会被释放,如中断号、GPIO、申请的内存等。

五、参考文章

linux驱动中probe函数的返回值_a254373829的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值