驱动开发流程包括:
1、需要查看原理图,数据手册,了解设备的操作方法,属于业务方面内容,在此不做赘述;
2、实现驱动程序的初始化,比如内核注册这个驱动程序,如果该设备有中断响应需要处理,则还要进行中断的定义和初始化工作,内核注册需要用到
Z_DEVICE_DEFINE(node_id, dev_name, drv_name, init_fn, pm_device,\
data_ptr, cfg_ptr, level, prio, api_ptr, state_ptr, ...)
完成定义设备实例并声明其初始化函数的工作,其中init_fn为驱动及中断响应的定义及初始化工作,api_ptr为注册的设备驱动API接口,data_ptr为设备实例私有数据(在data_ptr设置的信息可以通过device handle->data直接使用),cfg_ptr为设备实例配置信息(在cfg_ptr设置的cfg信息可以通过device handle->config直接使用),举例如下:
typedef struct {
uint32_t cfg_reg_base_addr;
uint32_t cmd_queue_base_addr;
} test_device_cfg_t;static test_device_cfg_t s_test_device_cfg = {
.cfg_reg_base_addr = 0x40000000,
.cmd_queue_base_addr = 0x40001000,
};typedef struct {

驱动开发涉及查看原理图和数据手册以理解设备操作,然后进行驱动初始化,注册到内核,并可能处理中断。内核注册使用Z_DEVICE_DEFINE宏,包括设备实例、初始化函数、API接口等。中断服务函数包括屏蔽、处理和清除中断。最后,驱动需编译进内核或作为模块加载,并进行测试。
最低0.47元/天 解锁文章
826

被折叠的 条评论
为什么被折叠?



