拉取/合并请求描述:

[
增加rt_driver完全兼容以前的device模型以及操作方法
以下是网卡驱动的一个实例:

int imx6ull_eth_probe(struct rt_device *dev)
{
    struct dtb_node *fdt_node = (struct dtb_node *)(dev->fdt_node);
    if(fdt_node)
    {
        /*从设备节点中获取到设备相关信息,并填入dev->user_data*/
    }

    return 0;
}

int imx6ull_eth_init(struct rt_device *dev)
{
    /*根据dev->user_data 完成特性设备的初始化*/
    imx6ul_eth_init_test(dev->user_data);
    return 0;
}

struct rt_device_id imx6ull_eth_id = 
{
    .compatible = "fsl,imx6ul-fec",
};
struct rt_driver eth_driver = 
{
    .dev_match = &imx6ull_eth_id,
    .dev_type = RT_Device_Class_NetIf,
    .device_priv_data_size = sizeof(struct rt_imx6ul_ethps),
    .device_size = sizeof(struct eth_device),
    .name = "e",
    .flag = RT_DEVICE_FLAG_RDWR,
    .probe = imx6ull_eth_probe,
    .init = imx6ull_eth_init,
    .dev_ops = &_k_enet_ops
};

extern int device_tree_setup(void);

static int imx6ul_eth_drvier_init_with_dtb(void)
{
    int max_device_num = 10;    
    void *from_node = get_dtb_node_head();//from_node可以是设备树的root节点,也可以是目标设备的父节点
    rt_driver_device_match_with_dtb(&eth_driver,from_node,max_device_num);

}
static int imx6ul_eth_drvier_init_with_id(void)
{
    int i = 0;
    int device_num = 2;
    for(i = 0; i < device_num; i++)
    {
        rt_driver_device_match_with_id(&eth_driver,i);
    }    
}

INIT_DEVICE_EXPORT(imx6ul_eth_drvier_init_with_dtb); //驱动注册使用dtb
//INIT_DEVICE_EXPORT(imx6ul_eth_drvier_init_with_id);//驱动注册不适用dtb

]

以下的内容不应该在提交PR时的message修改,修改下述message,PR会被直接关闭。请在提交PR后,浏览器查看PR并对以下检查项逐项check,没问题后逐条在页面上打钩。

当前拉取/合并请求的状态:

必须选择一项:

  • 本拉取/合并请求是一个草稿版本
  • 本拉取/合并请求是一个成熟版本

代码质量:

我在这个拉取/合并请求中已经考虑了:

  • 已经仔细查看过代码改动的对比
  • 代码风格正确,包括缩进空格,命名及其他风格
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或
  • 对难懂代码均提供对应的注释
  • 本拉取/合并请求代码是高质量的
  • 本拉取/合并符合RT-Thread代码规范