关于U-boot驱动模型
About U-boot driver model
我有一个关于 U-boot 驱动程序模型的简单问题。我想知道何时以及如何触发驱动程序的功能操作。
例如,对于以太网驱动程序,这些是定义的操作:
static const struct eth_ops designware_eth_ops = {
.start = designware_eth_start,
.send = designware_eth_send,
.recv = designware_eth_recv,
.free_pkt = designware_eth_free_pkt,
.stop = designware_eth_stop,
.write_hwaddr = designware_eth_write_hwaddr,
};
现在,这些 eth_ops 是在探测函数之后的初始化阶段被调用,还是仅当某些命令是 运行 来自 u-boot 提示符(如 ping 、 tftp 等)时才被调用?
初始化阶段只会探测设备并将其移动到下一个子系统?
这取决于 u-boot 设置。如果 bootcmd 和 bootargs 环境变量定义了一些与网络相关的东西,比如从 tftp 服务器加载内核,它将首先调用启动回调,然后在发送和接收 send/rec 回调时调用。如果内核是从闪存加载的,则不需要 u-boot 网络,并且如果您没有在 uboot shell 上使用网络命令,则不会调用任何回调
Uboot 驱动程序模型与 Linux 模型非常相似,实际上它们之间有很多共同的代码。唯一的"big"区别是uboot使用物理寻址而Linux使用MMU将物理地址转换为虚拟地址space
我有一个关于 U-boot 驱动程序模型的简单问题。我想知道何时以及如何触发驱动程序的功能操作。
例如,对于以太网驱动程序,这些是定义的操作:
static const struct eth_ops designware_eth_ops = {
.start = designware_eth_start,
.send = designware_eth_send,
.recv = designware_eth_recv,
.free_pkt = designware_eth_free_pkt,
.stop = designware_eth_stop,
.write_hwaddr = designware_eth_write_hwaddr,
};
现在,这些 eth_ops 是在探测函数之后的初始化阶段被调用,还是仅当某些命令是 运行 来自 u-boot 提示符(如 ping 、 tftp 等)时才被调用?
初始化阶段只会探测设备并将其移动到下一个子系统?
这取决于 u-boot 设置。如果 bootcmd 和 bootargs 环境变量定义了一些与网络相关的东西,比如从 tftp 服务器加载内核,它将首先调用启动回调,然后在发送和接收 send/rec 回调时调用。如果内核是从闪存加载的,则不需要 u-boot 网络,并且如果您没有在 uboot shell 上使用网络命令,则不会调用任何回调 Uboot 驱动程序模型与 Linux 模型非常相似,实际上它们之间有很多共同的代码。唯一的"big"区别是uboot使用物理寻址而Linux使用MMU将物理地址转换为虚拟地址space