u-boot 2016.7之以太网驱动模型

        u-boot 2016.7引入了设备树(device tree) 和 驱动模型DM(driver model),这为设备的驱动的定义和访问

接口提供了统一的方法,提高了驱动之间的兼容性和可移植性。具体建议参考/doc/driver-model/README.txt。

对于u-boot2016.7的以太网络驱动,也属于DM应用的一个范例,此篇着重介绍u-boot2016.7的DM 模型及网络驱动

模型的细节,关于设备树(device tree)的相关细节,在后续篇章中进行介绍。

 1、使能DM功能

       在配置u-boot时,使能DM功能,即在/configs/xxx_defconfig中定义了:CONFIG_DM=y;

       在配置u-boot时,使能网络设备的DM功能,即在/configs/xxx_defconfig中定义了:CONFIG_DM_NET=y;

     

2、DM整体框架

      DM 主要有udevice、dirver、uclass、uclass_dirver四部分组成,其中:

      udevice:是指设备对象,类似可以理解为kernel中的device。

      dirver:是udevice的驱动,和底层硬件设备通信,并且为上层提供设备操作接口。

      uclass:使用相同方式的操作集的device的组。相当于是一种抽象。uclass为使用相同接口的设备提供了统一

                  的接口。

      uclass_dirver:对应uclass的驱动程序。主要提供uclass操作时,如bind和probe  udevice时的一些操作。

 

  其调用关系见图1:

 

                                                   图1

3、数据结构和dirver声名

      DM 主要有udevice、dirver、uclass、uclass_dirver四部分组成,相应与之对应的有四个数据结构

      struct udevice、struct dirver、struct uclass、struct uclass_dirver。

      对于dirver和uclass_dirver的声明,u-boot提供了:

  U_BOOT_DRIVER(xxx_gmac) = {
    .name    = "xxx_gmac",
    .id    = UCLASS_ETH,
    .of_match = xxx_gmac_ids,
    .ofdata_to_platdata = xxx_gmac_ofdata_to_platdata,
    .probe    = xxx_gmac_probe,
    .remove    = xxxgemac_remove,
    .ops    = &xxx_gmac_ops,
    .priv_auto_alloc_size = sizeof(struct xxx_priv),
    .platdata_auto_alloc_size = sizeof(struct eth_pdata),
  };

  和

  UCLASS_DRIVER(eth) = {
    .name        = "eth",
    .id        = UCLASS_ETH,
    .post_bind    = eth_post_bind,
    .pre_unbind    = eth_pre_unbind,
    .post_probe    = eth_post_probe,
    .pre_remove    = eth_pre_remove,
    .priv_auto_alloc_size = sizeof(struct eth_uclass_priv),
    .per_device_auto_alloc_size = sizeof(struct eth_device_priv),
    .flags        = DM_UC_FLAG_SEQ_ALIAS,
  };


4、u-boot 2016.7网络驱动模型

      一般以太网的硬件原理框图见图2:

     

                               图2

     以太网的网络驱动模型是DM模型的具体体现,其模型框图见图3:

   

                           图3

4、u-boot 2016.7网络初始化流程

      u-boot 2016.7的网络初始化流程见图4:

     

                                                                   图4

     其中xxx_gmac.c和xxx_phy_device.c是硬件平台相关的文件,xxx_gmac.c提供了gmac的对gmac的初始化和

     对gmac的操作接口及对phy芯片的配置,xxx_phy_device.c提供phy芯片的操作接口及向u-boot注册phy设备。

     当把u-boot移植到新平台或新的板级平台时,若u-boot中没有集成相应的mac控制器驱动或phy芯片驱动时,

     需手动完成xxx_gmac.c和xxx_phy_device.c并添加。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值