当前位置: 首页 > news >正文

abc公司电子商务网站建设策划书网站免费搭建平台

abc公司电子商务网站建设策划书,网站免费搭建平台,自己怎么做团购网站首页,婚嫁网站建设计划linux设备树节点添加新的复位属性之后设备驱动加载异常问题分析 1 linux原始设备驱动信息1.1 设备树节点信息1.2 linux设备驱动1.3 makefile1.4 Kconfig1.5 对应的defconfig文件 2 修改之后的linux设备驱动2.1 修改之后的设备树节点信息2.2 原始test_fw.c出现的问题以及原因分析…

linux设备树节点添加新的复位属性之后设备驱动加载异常问题分析

  • 1 linux原始设备驱动信息
    • 1.1 设备树节点信息
    • 1.2 linux设备驱动
    • 1.3 makefile
    • 1.4 Kconfig
    • 1.5 对应的defconfig文件
  • 2 修改之后的linux设备驱动
    • 2.1 修改之后的设备树节点信息
    • 2.2 原始test_fw.c出现的问题以及原因分析
      • 2.2.1 原始test_fw.c出现的问题
      • 2.2.2 原始test_fw.c出现的问题的原因分析
    • 2.3 解决test_fw.c对应驱动加载异常的方法
      • 2.3.1 添加对应的test_reset.c驱动文件
      • 2.3.2 makefile添加对test_reset.c的支持
      • 2.3.3 Kconfig添加对test_reset功能的支持
      • 2.3.4 defconfig文件添加对test_reset功能的支持
  • 3 对于该问题的总结
    • 3.1 添加一个新的linux设备驱动需要兼顾的几点
    • 3.2 设备树节点添加新的属性的处理

该问题是在调试linux设备驱动时出现,根据当时对该问题的理解以及对应的验证方法去整理为该文档。

1 linux原始设备驱动信息

1.1 设备树节点信息

/ {test_fw_load@0x100000000 {compatible = "test,test-x280-fw";reg = < 0x01 0x00000000 0x0 0x20000000 >, < 0x0 0x4000f000 0x0 0x200>;};
};

1.2 linux设备驱动

这里只给出一个驱动代码的示意test_fw.c,probe函数具体的功能就不再贴出。

// SPDX-License-Identifier: GPL-2.0-or-later#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/moduleparam.h>
#include <linux/platform_device.h>#include <linux/io.h>
#include <linux/device.h>
#include <linux/firmware.h>#define TEST_FW_LOAD_VERSION "1.0"static int test_fw_probe(struct platform_device *pdev)
{printk("test fw probe\r\n");return 0;
}/*** test_fw_remove - set driver_data of the device to NULL* @pdev: pointer to platform device handle** Always returns 0*/
static int test_fw_remove(struct platform_device *pdev)
{printk("test fw probe\r\n");return 0;
}static const struct of_device_id test_fw_match[] = {{ .compatible = "test,test-x280-fw", },{},
};
MODULE_DEVICE_TABLE(of, test_fw_match);static struct platform_driver test_fw_load_driver = {.driver = {.name           = "test_fw_load",.of_match_table = test_fw_match,},.probe  = test_fw_probe,.remove = test_fw_remove,
};
module_platform_driver(test_fw_load_driver);MODULE_AUTHOR("W Test <test@test.cn>");
MODULE_VERSION(TEST_FW_LOAD_VERSION);
MODULE_LICENSE("GPL V2");

1.3 makefile

obj-$(CONFIG_TEST_FW_LOAD)      += test_fw.o

1.4 Kconfig

config TEST_FW_LOADtristate "X280 Fw load on Test Platform"select FW_LOADERhelpThis option enables support for the Test load X280 FWYou may select when support test fw load. To compile this as a modulechoose M.If unsure, say N.

1.5 对应的defconfig文件

CONFIG_TEST_FW_LOAD=y

2 修改之后的linux设备驱动

2.1 修改之后的设备树节点信息

给test_fw_load节点添加了复位属性。

/ {test_reset: test_reset {compatible = "test,scmi-reset";#reset-cells = <1>;};
};/ {test_fw_load@0x100000000 {compatible = "test,test-x280-fw";reg = < 0x01 0x00000000 0x0 0x20000000 >, < 0x0 0x4000f000 0x0 0x200>;resets = <&test_reset 1>;reset-names = "test_reset";};
};

2.2 原始test_fw.c出现的问题以及原因分析

2.2.1 原始test_fw.c出现的问题

当给test_fw.c对应的设备树添加了复位属性之后就开始出现test_fw.c驱动的probe函数不被执行,整个设备驱动好像就没有被调用。
可以确定test_fw.c所对应的makefile,Kconfig,defconfig均已正常添加对应的配置选项,且之前test_fw.c所对应的驱动运行良好。
同时,如果把复位属性注释掉则驱动又恢复运行良好。

2.2.2 原始test_fw.c出现的问题的原因分析

由于添加上复位属性设备驱动就会出现加载异常,注释掉复位属性驱动就运行OK,那么我们可以确定问题是由于添加复位属性引入的。
该问题的主要原因是使用test_reset的复位节点配置,但是test_reset节点所对应的驱动并没有处理并加载,导致test_fw.c所对应的驱动加载异常。

2.3 解决test_fw.c对应驱动加载异常的方法

解决test_fw.c对应驱动加载异常的方法就是添加test_reset设备树节点对应节点的设备驱动,下面是已对应的示意代码为例来介绍的。

2.3.1 添加对应的test_reset.c驱动文件

// SPDX-License-Identifier: GPL-2.0-or-later#include <linux/module.h>#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/moduleparam.h>
#include <linux/platform_device.h>#include <linux/io.h>
#include <linux/device.h>/*** test_reset_probe - probe routine of the driver* @pdev: pointer to Platform device handle** Return zero for success and non-zero for failure*/
static int test_reset_probe(struct platform_device *pdev)
{return 0;
}/*** test_reset_remove - set driver_data of the device to NULL* @pdev: pointer to platform device handle** Always returns 0*/
static int test_reset_remove(struct platform_device *pdev)
{return 0;
}static const struct of_device_id test_reset_match[] = {{ .compatible = "test,scmi-reset", },{},
};
MODULE_DEVICE_TABLE(of, test_reset_match);static struct platform_driver test_reset_driver = {.driver = {.name           = "test_reset",.of_match_table = test_reset_match,},.probe  = test_reset_probe,.remove = test_reset_remove,
};
module_platform_driver(test_reset_driver);MODULE_AUTHOR("W Test <test@test.cn>");
MODULE_DESCRIPTION("TEST RESET driver");
MODULE_LICENSE("GPL V2");

2.3.2 makefile添加对test_reset.c的支持

obj-$(CONFIG_TEST_RESET)    += test_reset.o

2.3.3 Kconfig添加对test_reset功能的支持

config TEST_RESETtristate "test reset on Test Platform"helpThis option enables support for the TEST RESETYou may select when support test reset. To compile this as a modulechoose M.If unsure, say N.

2.3.4 defconfig文件添加对test_reset功能的支持

CONFIG_TEST_RESET=y

3 对于该问题的总结

3.1 添加一个新的linux设备驱动需要兼顾的几点

在这里插入图片描述

3.2 设备树节点添加新的属性的处理

  • 若新添加的设备属性需要执行具体的功能,那需要按照3.1章的部分去添加对应的设备驱动程序。
  • 若不需要,则在原始的设备驱动初始化流程直接去解析对应的设备属性即可。
http://www.ocqcb.cn/news/557.html

相关文章:

  • 专业做网文的网站新闻式软文范例
  • 网络网站建设电话推销福州百度开户多少钱
  • 定西网站建设天津百度网站排名优化
  • 电子商务网站建设自服务器搜索引擎优化的五个方面
  • php企业网站系统营业推广是什么意思
  • 怎么做网站时时彩东莞市网络seo推广价格
  • 做招聘网站毕业设计代运营电商公司排行榜
  • 做俄语网站建设seo搜索引擎优化心得体会
  • 常州手机网站效果写手接单平台
  • app软件免费下载安装最新版seo网站搭建是什么
  • 学做实体店网站直销产业发展论坛
  • 如何自己创办一个网站seo 网站推广
  • 做网站后期续费是怎么算的代运营竞价公司
  • 如何用dw做网站前端互联网媒体推广
  • 网站开发感想seo怎么优化软件
  • 网站网页的像素尺网络营销策划公司
  • 商业网站建设案例课程百度云百度上怎么免费开店
  • b2b平台网站毛片网页制作培训教程
  • 哈尔滨住房城乡建设局网站交换链接营销实现方式解读
  • 网站建设是什么专业啊网页友情链接
  • 流行的网站建设技术有哪些最新的域名网站
  • ppt模板怎么直接套用湖南关键词优化首选
  • 互联网有哪些行业湖南网站seo地址
  • 如果做微商需不需要开个网站seo自动优化软件
  • 合肥专业网站建设公司杭州谷歌推广
  • wordpress 简单模板九江seo优化
  • 北京网站假设西安网站制作
  • 出口做谷歌网站设计网站官网
  • 电商网站支付方案免费自媒体网站
  • 精品网站建设公seo到底是做什么的