最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

u-boot移植4--支持DM9000

来源:动视网 责编:小OO 时间:2025-09-23 23:50:29
文档

u-boot移植4--支持DM9000

U-boot移植5--支持DM9000开发板的原理图中得知:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。1、在eth_initialize(文件中有两个,代码较长的那个)的#ifdefined(CONFIG_MII)||(CONFIG_COMMANDS&CFG_CMD_MII)miiphy_init();#endif
推荐度:
导读U-boot移植5--支持DM9000开发板的原理图中得知:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。1、在eth_initialize(文件中有两个,代码较长的那个)的#ifdefined(CONFIG_MII)||(CONFIG_COMMANDS&CFG_CMD_MII)miiphy_init();#endif
U-boot移植5--支持DM9000

开发板的原理图中得知:

第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。

1、在eth_initialize(文件中有两个,代码较长的那个)的

#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)

    miiphy_init();

#endif后面添加上下面的代码

if (board_eth_init(bis) < 0)

    cpu_eth_init(bis);

并在本文件前面增加如下代码:

static int __def_eth_init(bd_t *bis)

{

    return -1;

}

int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));

2、在mao2440.c中添加上面函数的实现

#include

extern int dm9000_initialize(bd_t * bd);

#ifdef CONFIG_DRIVER_DM9000

int board_eth_init(bd_t *bis)

{

    return dm9000_initialize(bis);

}

#endif

3、在include/configs/mao2440.h中注释CS00的代码,如下:(62行)

#if 0

#define CONFIG_DRIVER_CS00    1    /* we have a CS00 on-board */

#define CS00_BASE        0x19000300

#define CS00_BUS16        1 /* the Linux driver does accesses as shorts */

#end if

并添加DM9000的宏, 由上图知DM9000在BANK4上,所以定义为0x20000300如下:

#define CONFIG_DRIVER_DM9000         1

#define CONFIG_DM9000_BASE     0x20000300

#define DM9000_IO       CONFIG_DM9000_BASE

#define DM9000_DATA       (CONFIG_DM9000_BASE+4)

#define CONFIG_DM9000_USE_16BIT    1

#define CONFIG_NET_MULTI    1

4、网上说要修改dm9000x.c的eth_init(bd_t * bd)的内容,此步我的板不用

eth_init(bd_t * bd)

{

    ...............

    /* Set Node address */

    /*for (i = 0; i < 6; i++)

     ((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);

    */

    char *tmp = getenv ("ethaddr");

        char *end;

     for (i=0; i<6; i++) {

bd->bi_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;

        if (tmp)

            tmp = (*end) ? end+1 : end;

    }

    ……………….

    #if 0    

    i = 0;

    …………

    #endif

    return 0;

}

红色的字符是要做的修改:功能是屏蔽原有获取MAC地址的语句,替换成从U-Boot的参数区读取数据并存到bd->bi_enetaddr[i]中

功能是屏蔽无用的语句。其实被屏蔽的语句是MII接口用的,放在这显然是错误的,无端的浪费了10秒钟

5、再修改dm9000x.c里的函数:

因为里面的四个函数跟include.h/net.h中的定义的结构eth_device参数不同,所以eth_init,eth_halt,eth_send,eth_rx每个函数增加一个参数struct eth_device *dev,且作为第一个参数;并把函数名改为:dm9000_init,dm9000,dm9000_send,dm9000_rx。因为include/net.h中已经声明了net/eth.c中的这些函数。

接着删掉dm9000x.c的函数eth_initfirst()。

6、接着添加默认地址如下:

#define CONFIG_ETHADDR        08:00:3e:26:0a:5b

#define CONFIG_NETMASK          255.255.255.0

#define CONFIG_IPADDR        192.168.1.230

#define CONFIG_SERVERIP        192.168.1.2

7、添加ping命令

在宏CONFIG_COMMANDS中增加CFG_CMD_PING如下:

#define CONFIG_COMMANDS \

            (CONFIG_CMD_DFL     | \

            CFG_CMD_CACHE     | \

            CFG_CMD_PING     | \

            CFG_CMD_NAND     | \

结果

Uboot-2009.08中:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中),此函数又调用bord_eth_init函数,此函数需自己实现并调用相应的网卡驱动函数。DM9000的驱动在drivers/net/dm9000x.c,入口函数是dm9000_initialize。故mao2440.c中添加bord_eth_init的实现函数如下:

#include

#include

extern int dm9000_initialize(bd_t *bis);

#ifdef CONFIG_DRIVER_DM9000

int board_eth_init(bd_t *bis)

{

    return dm9000_initialize(bis);

}

#endif

在mao2440.h中添加相应的宏

#define CONFIG_DRIVER_DM9000    1 

#define CONFIG_NET_MULTI    1

#define CONFIG_DM9000_NO_SROM    1

#define CONFIG_DM9000_BASE    0x20000300

#define DM9000_IO        CONFIG_DM9000_BASE

#define DM9000_DATA        (CONFIG_DM9000_BASE + 4)

并注释掉cs00的代码

还有:

#define CONFIG_CMD_PING        1

#define CONFIG_CMD_NET        1

设置IP等,如上

结果:

文档

u-boot移植4--支持DM9000

U-boot移植5--支持DM9000开发板的原理图中得知:第二阶段从在lib_arm的board.c的start_armboot函数开始,其中有一个是跳到网卡初始化的eth_initialize函数(在net/eth.c中)(上面的宏CONFIG_NET_MULTI,等会要实现)。1、在eth_initialize(文件中有两个,代码较长的那个)的#ifdefined(CONFIG_MII)||(CONFIG_COMMANDS&CFG_CMD_MII)miiphy_init();#endif
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top