新闻  |   论坛  |   博客  |   在线研讨会
迅为IMX8M开发板设备树下的platform驱动实验程序编写
afsa5f4da5 | 2022-08-23 15:22:21    阅读:306   发布文章

程序源码在网盘资料“iTOP-i.MX8MM 开发板\02-i.MX8MM 开发板网盘资料汇总(不含光盘内容)\嵌入式
Linux 开发指南(iTOP-i.MX8MM)手册配套资料\2.驱动程序例程\011-设备树下的 platform 驱动\001”路径下。
我们在 Ubuntu 的/home/topeet/imx8mm/11/001 目录下新建 driver.c 文件,修改代码为如下所示
/*
* @Author: topeet * @Description: 实现设备树下 Platform 驱动匹配进入 probe 函数
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_address.h>
/**
* @description: platform 驱动的 probe 函数,当驱动与设备匹配以后此函数就会执行
* @param {*}pdev : platform 设备
* @return {*}0,成功;其他负值,失败
*/
int led_probe(struct platform_device *pdev)
{ //匹配成功以后,进入到 probe 函数
printk("led_probe\n");
return 0;
}
int led_remove(struct platform_device *pdev)
{
printk("led_remove\n");
return 0;
}
const struct platform_device_id led_idtable = {
.name = "led_test", };
const struct of_device_id of_match_table_test[] = {
{.compatible = "test1234"}, {}, };
struct platform_driver led_driver = {
//3. 在 led_driver 结构体中完成了 led_probe 和 led_remove
.probe = led_probe, .remove = led_remove, .driver = {
.owner = THIS_MODULE, .name = "led_test", .of_match_table = of_match_table_test //接下来我们改一下驱动,让他来匹配设备树里面 test 的节点
},.id_table = &led_idtable //4 .id_table 的优先级要比 driver.name 的优先级要高,优先与.id_table 进行匹配
};
static int led_driver_init(void)
{
// 1.我们看驱动文件要从 init 函数开始看
int ret = 0;
//2. 在 init 函数里面注册了 platform_driver
ret = platform_driver_register(&led_driver);
if (ret < 0)
{
printk("platform_driver_register error \n");
}
printk("platform_driver_register ok \n");
return 0;
}
static void led_driver_exit(void)
{
platform_driver_unregister(&led_driver);
printk("goodbye! \n");
}
module_init(led_driver_init);
module_exit(led_driver_exit);
MODULE_LICENSE("GPL");
保存 driver.c 文件,编译 driver.c 为驱动模块,如下图所示:

驱动编译完,我们通过 nfs 将编译好的驱动程序加载模块。我们进入共享目录,加载刚刚编译好的

driver.ko,如下图所示:

insmod driver.ko

如上图所示,已经匹配成功进入到 probe 函数中。如果没有进入 probe 函数,可能出现匹配不成功的原

因是 1 device 或者设备树根本没有加到我们系统里面 2 名字不一样导致匹配不成功。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客