QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4040|回复: 9

问一问U-BOOT下网络设备的初始化问题!

[复制链接]
发表于 2006-9-15 16:35:20 | 显示全部楼层 |阅读模式
小弟这几天在看U-BOOT的代码,对网络的驱动没看清楚,我用的CS8900,在/driver/cs8900.c中找到了eth_init()函数,可是没发现U-BOOT在启动过程中什么时候调用它了?U-BOOT在启动过程中只在/lib_arm/board.c的start_armboot()函数中初始化了IP地址和MAC地址,难道它不需要对具体的网络器件比如说CS8900进行初始化吗?如果不是在这里初始化,那它是在哪里,在什么时候初始化的呢?哪位兄弟给指点一下!谢谢!
 楼主| 发表于 2006-9-20 16:41:00 | 显示全部楼层
难道没有人知道吗?等待中......
回复

使用道具 举报

发表于 2006-9-20 22:58:34 | 显示全部楼层
我查过了smdk2410生成的U-BOOT.map文件,发现eth_init()函数其实并没有被任何程序文件引用。参考eth_init()函数内容,其实是对控制寄存器的操作,初始化。在使用网卡之前是不可或缺的一步。
因此,怀疑smdk2410的示例程序的功能不全引起的,并没有提供网络功能。
查询 U-Boot 的讨论信箱,得知board.c中不应该出现直接或间接的eth_init()调用,因为这个调用会消耗3-4S的时间,不利于快速启动。

猜测当我们使用某些网络功能命令的时候会调用eth_init(),查找得知drivers/netconsole.c,common/cmd_net.c中使用了NetLoop(),NetLoop()又调用了eth_init()初始化网卡芯片。
以上是我得到的解释,可能还有不对的地方,一起讨论。
我也在学习U-BOOT,多交流。
回复

使用道具 举报

发表于 2006-9-20 23:01:46 | 显示全部楼层
还有common/cmd_elf.c, line 112
中也有NetLoop()调用
回复

使用道具 举报

发表于 2006-9-20 23:03:03 | 显示全部楼层
NetLoop()在net/net.c, line 265 中定义
回复

使用道具 举报

 楼主| 发表于 2006-9-21 11:57:43 | 显示全部楼层
多谢楼上的兄弟,我也查到了,正如你说的那样它是在执行命令的时候初始化的。我执行tftpboot命令,从cmd_net.c里面可以看到,执行tftpboot命令实际上是调用do_tftpb()函数,该函数又调用了netboot_common()函数,netboot_common()函数又调用了NetLoop()函数。
回复

使用道具 举报

发表于 2006-9-21 21:51:21 | 显示全部楼层
呵呵
不客气,我想问一下你是用什么工具进行阅读源代码阅读的?
我用的是LXR,感觉并不是那么理想
回复

使用道具 举报

 楼主| 发表于 2006-9-22 17:10:30 | 显示全部楼层
我就用UltraEdit-32,据说有一个Source Insight不错,但是我没用过。
回复

使用道具 举报

发表于 2011-4-20 17:30:05 | 显示全部楼层
终于有点头绪啦!
谢谢!!
回复

使用道具 举报

发表于 2011-4-20 17:36:37 | 显示全部楼层
不知道现在的你们在做什么????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-26 21:46 , Processed in 0.130377 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表