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申请成功,被占用。

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

三、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 没有被占用。

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

         3.3、串口log 会提示error

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

 

四、总结

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

五、参考文章

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

你可能感兴趣的:(数学建模)