迅为IMX8M开发板设备树下的platform驱动实验程序编写

程序源码在网盘资料“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 名字不一样导致匹配不成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值