linux驱动是怎么读取设备树配置信息,Linux驱动之获取设备树属性——学习笔记(10)...

#include

#include

#include

/*************************************************************************************************/

// 局部宏定义

/*************************************************************************************************/

#define EN_DEBUG 1/* 调试信息开关 */

#if EN_DEBUG

#define PRINT(x...) printk(KERN_EMERG x)/* 设置为紧急信息等级 */

#else

#define PRINT(x...)

#endif

/*************************************************************************************************/

// 用来匹配设备的id

/*************************************************************************************************/

static const struct of_device_id of_device_match[] = {

{.compatible = "company name,modle"},

{}

};

/*************************************************************************************************/

// 设备类型id列表

/*************************************************************************************************/

const struct i2c_device_id i2c_device_table[] = {

{"modle", 0},

{},

};

/**************************************************************************************************

** 功能: 本驱动的探针函数,当驱动加载时被调用

** 参数: 无

** 返回: 无

**************************************************************************************************/

int iic_probe(struct i2c_client *client, const struct i2c_device_id *id)

{

int i;

struct device dev; /* 设备对象 */

const char *mstr;

unsigned int mint;

unsigned int marray[10];

dev = client->dev;

memset(marray, 0, sizeof(marray));

of_property_read_u32_array(dev.of_node, "marray", marray, 4); /* 读取节点中属性名为 marray 的数组 */

of_property_read_string(dev.of_node, "mstring", &mstr); /* 读取节点中属性名为 mstring 的字符串 */

of_property_read_u32(dev.of_node, "mint", &mint); /* 读取节点中属性名为 mint 的数字 */

PRINT("%s ------ addr = %x\n", __FUNCTION__, client->addr); /* 打印设备地址,即 reg 属性的值 */

PRINT("%s ------ of_node->name = %s\n", __FUNCTION__, dev.of_node->name); /* 打印节点名称 */

for (i = 0; i < 10; i++) {

PRINT("%s ------ marray[%d] = %d\n", __FUNCTION__, i, marray[i]);

}

PRINT("%s ------ mstr = %s\n", __FUNCTION__, mstr);

PRINT("%s ------ mint = %d\n", __FUNCTION__, mint);

return 0;

}

/**************************************************************************************************

** 功能: 本驱动的移除函数,当驱动卸载时被调用

** 参数: 无

** 返回: 无

**************************************************************************************************/

int iic_remove(struct i2c_client *client)

{

return 0;

}

/* i2c驱动对象 */

struct i2c_driver iic_driver = {

.probe = iic_probe,

.remove = iic_remove,

.driver = {

.name = "iic_dev_name",

.of_match_table = of_match_ptr(of_device_match),

},

.id_table = i2c_device_table,

};

/**************************************************************************************************

** 函数名称: drv_init

** 功能: 驱动初始化函数,在加载时被调用

** 参数: 无

** 返回: 无

**************************************************************************************************/

static int __init drv_init(void)

{

PRINT("%s ------ \n", __FUNCTION__);

i2c_register_driver(THIS_MODULE, &iic_driver); /* 注册i2c驱动 */

return 0;

}

/**************************************************************************************************

** 函数名称: drv_exit

** 功能描述: i2c驱动退出函数,在卸载时被调用

** 参数: 无

** 返回: 无

**************************************************************************************************/

static void __exit drv_exit(void)

{

PRINT("%s ------ \n", __FUNCTION__);

i2c_del_driver(&iic_driver); /* 移除i2c驱动 */

}

module_init(drv_init); /* 模块初始化 */

module_exit(drv_exit); /* 模块卸载 */

MODULE_AUTHOR("hrx"); /* 模块作者 */

MODULE_DESCRIPTION("Linux Driver"); /* 模块描述 */

MODULE_VERSION("1.0.0"); /* 模块版本 */

MODULE_LICENSE("GPL"); /* 模块遵守的License */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值