u-boot 网络部分学习

来源:互联网 发布:sqlyog执行sql文件 编辑:程序博客网 时间:2024/05/14 01:25


u-boot这个东西,说白了只是加载内核的一个工具。

但是你要是去深入了解一下,u-boot还是非常强大的,简单的说,自成一系,有文件系统,有驱动,有网络等等。

工作中遇到一个奇怪的问题,板子->交换机->pc 网络正常,板子->pc直连,ping不通。所以就跑去看u-boot代码。生气

经测试,发现一个现象,boot在代码加载后,一开始对网络进行初始化只做了很小的一部分(board.c 中调用了接口eth_initialize(gd->bd);),这个接口中又调用了miiphy_init(); 而miiphy_init();只是将一个结构体的地址放到了一个链表中,后续就没有其他操作了。惊讶


        board.c中对net的初始化工作到这里基本上就完成了,这就让我一头雾水了,那么boot中网络是如何正常工作的呢疑问,继续往下跟进。。。

我们知道,boot中是可以输入各种命令的,这些命令的实现都放在common文件加下,以cmd_**.c的形式存在,那么网络相关的命令就是cmd_net.c。


进入cmd_net.c文件,可以看到各种命令 ping、tftp、dhcp、bootp等等

看过这个文件之后,就基本上明白了,这些所有的命令,在执行的时候都有调用一个接口NetLoop(proto_t protocol);这个接口里面会调用eth_init()初始化接口,对网络进行初始化,至此,就基本上说明了,u-boot在非进入命令行的时候,是不对网络进行初始化的---毕竟u-boot和内核都是烧写到flash中,u-boot在引导内核的时候,是不需要进行网络通信的大笑,今天的学习就到这里,88.


        PS:给老婆大人淘宝店铺打个小广告,各位仁兄如果要给贤内助一个惊喜的话,不妨去瞅一眼。再见

0 0
原创粉丝点击