我是靠谱客的博主 壮观豌豆,最近开发中收集的这篇文章主要介绍学习笔记---驱动程序probe函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天跟着老师写了个nand驱动程序 老师没有用probe函数 的那我想试试 没想到 我的程序驱动不能用了
查了点儿资料 才好使了。
probe函数是一个入口函数,本来写驱动是直接再init函数里面直接操作
使用probe后 这个函数便是正儿八经的入口函数
本来我也不懂

static int ly_nandf_init(void)
{
	
	return platform_driver_register(&ly_nandf_driver);
}

就在入口函数只写了个这个
驱动程序就不好使
查过资料后发现这是一个bus_drv_dev 模型
驱动程序分层分离概念 总线驱动设备模型

device_add
把 device 放入bus 的dev 链表;
从 bus 的dev 链表中取出一个drv 用match 函数判断 能否与 device 匹配;
若name 相同 则调用 drv 的probe 函数
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
driver_register
放入bus 的 drv 链表;
从dev 链表中一一比较match 函数
若支持 则调用 probe 函数

static struct platform_driver ly_nandf_driver = {
	.probe		= ly_nandf_probe,
	.remove		= ly_nandf_remove,
	.driver		= {
		.name	= "ly_nandf",
		.owner	= THIS_MODULE,
	},
};

static struct platform_device *ly_nandf_device;

static int ly_nandf_init(void)
{
	int ret;


	ret = platform_driver_register(&ly_nandf_driver);
	if (!ret) {
		ly_nandf_device = platform_device_alloc("ly_nandf", 0);
		if (ly_nandf_device) {
			ret = platform_device_add(ly_nandf_device);
		} else {
			ret = -ENOMEM;
		}
		if (ret) {
			platform_device_put(ly_nandf_device);
			platform_driver_unregister(&ly_nandf_driver);
		}
	}
	return ret;
}

最后

以上就是壮观豌豆为你收集整理的学习笔记---驱动程序probe函数的全部内容,希望文章能够帮你解决学习笔记---驱动程序probe函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(94)

评论列表共有 0 条评论

立即
投稿
返回
顶部