博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
u-boot-1.1.6移植之dm9000
阅读量:5062 次
发布时间:2019-06-12

本文共 1338 字,大约阅读时间需要 4 分钟。

网卡dm9000的执行过程(u-boot版本:u-boot-1.1.6):

在board.c里面有eth_initialize(gd->bd);

eth_initialize的实现在eth.c里面,但是eth_initialize函数里面没有dm9000的初始化eth_init

 

常见有nfs,tftp,ping命令会用到网络设备,可以从这里入手。

U_BOOT_CMD(

                ping,      2,            1,            do_ping,

                "ping\t- send ICMP ECHO_REQUEST to network host\n",

                "pingAddress\n"

);

 

而其处理函数do_ping如下:

int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

                if (argc < 2)

                                return -1;

 

                NetPingIP = string_to_ip(argv[1]);

                if (NetPingIP == 0) {

                                printf ("Usage:\n%s\n", cmdtp->usage);

                                return -1;

                }

 

                if (NetLoop(PING) < 0) {

                                printf("ping failed; host %s is not alive\n", argv[1]);

                                return 1;

                }

 

                printf("host %s is alive\n", argv[1]);

                return 0;

}

 

看上面红色标注的NetLoop,在net.c里面实现

eth_halt();            //Stop the interface.

#ifdef CONFIG_NET_MULTI

                eth_set_current();

#endif

                if (eth_init(bd) < 0) {                    //调用初始化函数,如果定义了cs8900,则使用cs8900的eth_init函数,这里使用dm9000

                                eth_halt();

                                return(-1);

                }

 

NetLoop函数的原型,参数是proto_t结构体指针

int NetLoop(proto_t protocol)

而proto_t有:

typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t;

以上表明,当使用bootp,tftp,ping,nfs等命令的时候会调用NetLoop,进而对各种网卡进行对应于配置的初始化。

以上,是顶层对dm9000的调用过程,下面再看dm9000x.c执行过程

入口eth_init

                1、RESET device 复位 ,检测网络连接类型

                2、NIC Type: FASTETHER, HOMERUN, LONGRUN    NIC类型

                3、GPIO0 on pre-activate PHY  设置GPIO

                4、Set PHY   设置工作模式

                5、Program operating register设置寄存器       

 

转载于:https://www.cnblogs.com/hulig7/p/4758005.html

你可能感兴趣的文章
【GitHub】常用命令
查看>>
FreeRTOS 临界段和开关中断
查看>>
JS初级-作用域
查看>>
LINUX - gcc
查看>>
【UOJ228】基础数据结构练习题(线段树)
查看>>
【CF995F】Cowmpany Cowmpensation(动态规划,拉格朗日插值)
查看>>
【CTS2019】随机立方体(容斥)
查看>>
APM系统SkyWalking介绍
查看>>
php操作Excel
查看>>
第一个Sprint
查看>>
列表和元组
查看>>
HDU 4699 Editor【模拟栈】
查看>>
Objects
查看>>
科目二终于考过了
查看>>
mysql快捷命令
查看>>
Docker学习(1) 初识
查看>>
APP远程调试及网络自动化测试
查看>>
java文档注释规范(一)
查看>>
linux下查看所有用户及所有用户组
查看>>
python深度优先、广度优先和A star search
查看>>