我有一个关于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是在探测函数之后的初始化阶段调用的,还是只有在从ping,tftp等u-boot提示符运行某些命令时调用它们?
初始化阶段只会探测设备并将其移动到下一个子系统?
答案 0 :(得分:1)
这取决于u-boot设置。如果bootcmd和bootargs环境变量定义了与网络相关的内容,例如从tftp服务器加载内核,它将首先调用start回调以及发送和接收send / rec回调。如果从闪存加载内核,则不需要u-boot网络,如果你没有在uboot shell上使用网络命令,则不会调用回调 Uboot驱动程序模型与Linux模型非常相似,实际上它们之间有很多通用代码。唯一的“重大”区别是uboot使用物理寻址,Linux使用MMU将物理空间转换为虚拟地址空间