u-boot 2016.7之以太网驱动模型
来源:互联网 发布:mac翻墙代理软件 编辑:程序博客网 时间:2024/06/11 04:27
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并添加。
- u-boot 2016.7之以太网驱动模型
- Cubieboard的U-boot以太网驱动移植
- 在U-boot中添加以太网驱动
- 在U-boot中添加以太网驱动
- u-boot器件驱动模型(Device&Drivers)之uclass
- 在U-boot中添加以太网驱动-Nazgul
- 在U-boot中添加以太网驱动-Nazgul
- u-boot器件驱动模型(Device&Drivers)之链接器的秘密
- 在U-boot中添加Cubieboard(全志A10)以太网驱动
- u-boot nand 驱动
- u-boot-1.3.4 for dm365 之网络驱动
- u-boot-1.3.4移植到s3c2440之nand驱动
- u-boot-1.3.4移植到s3c2440之nand驱动
- u-boot uart 驱动分析
- u-boot网卡驱动移植
- 学习驱动:移植u-boot
- U-BOOT之二:u-boot 常用命令
- U-Boot之二:u-boot 常用命令
- 【Java】PDF转图片
- js html web 网站 记录 [U06]
- 安卓系统手机探究之初步
- 关于 android 使用 MPEG2TSWriter + live555 搭建监控服务器
- myEclipse10新建maven工程pom.xml报错
- u-boot 2016.7之以太网驱动模型
- 代理模式
- Unreal Cook Book:神奇的Spline Mesh
- 系列18、组合模式-View及ViewGroup
- 解决用C#操作mysql数据库出错无法回滚的问题
- UVALive3520 UVa1590 POJ2799 IP Networks【进制+位运算】
- 什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式
- 两种创建线程的方式/线程的生命周期及各自使用同步锁时的区别
- 如何用Python写一个安卓APP