• 迅为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

    #include

    #include

    #include

    #include

    /**

    * @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 名字不一样导致匹配不成功。

  • 相关阅读:
    Escape character is ‘^]’什么意思?怎么使用telnet
    m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析
    《数据结构:c语言版》(严蔚敏)知识点整合
    使用Psycopg2连接openGauss
    2019款保时捷卡宴车发动机故障灯异常点亮
    专用短程通讯(DSRC)技术介绍
    VMware Worksation --- 快照
    SpringBoot常用注解释义
    uniapp 微信小程序仿抖音评论区功能,支持展开收起
    生成 MySQL 删除索引、创建索引、分析表的 SQL 语句
  • 原文地址:https://blog.csdn.net/mucheni/article/details/126485955