代码之家  ›  专栏  ›  技术社区  ›  Amit Singh Tomar

关于U-boot驱动程序型号

  •  2
  • Amit Singh Tomar  · 技术社区  · 9 年前

    我有一个关于U-boot驱动程序模型的简单问题。我想知道何时以及如何触发驱动程序的函数ops。

    例如,对于以太网驱动程序,这些是定义的操作:

    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等)运行某些命令时调用的?

    初始化阶段只会探测设备并将其移动到下一个子系统?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Liran Ben Haim    9 年前

    这取决于u-boot设置。如果bootcmd和bootargs环境变量定义了一些与网络相关的东西,比如从tftp服务器加载内核,它将首先调用start回调,并在发送和接收send/rec回调时调用。如果内核是从flash中加载的,则不需要u-boot网络,如果在uboot shell上没有使用网络命令,则不会调用回调 Uboot驱动程序模型与Linux模型非常相似,实际上它们之间有很多共同的代码。唯一的“大”区别是uboot使用物理地址,而Linux使用MMU将物理地址空间转换为虚拟地址空间