Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32343
  • 博文数量: 12
  • 博客积分: 445
  • 博客等级: 下士
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-06 16:49
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: 嵌入式

2012-10-21 22:55:06

8、u-boot支持DM9000网卡

    u-boot-2010.03版本已经对CS8900和DM9000X网卡有比较完善的代码支持(代码在drivers/net/目录下),而且在S3C24XX系列中默认对CS8900网卡进行配置使用。只是在个别地方要根据开发板的具体网卡片选进行设置,就可以对S3C24XX系列中CS8900网卡的支持使用。代码如下:

  1.                     在头文件smdk2440.h中
  2. /*
  3.  * Hardware drivers
  4.  */
  5. #define CONFIG_NET_MULTI
  6. #define CONFIG_CS8900        /* we have a CS8900 on-board */
  7. #define CONFIG_CS8900_BASE    0x19000300   /*注意:对不同的开发板就是要修改这个片选地址参数,这个参数值就看开发板上网卡的片选引脚是接到ARM芯片存储控制器的哪个Bank上 */
  8. #define CONFIG_CS8900_BUS16    /* the Linux driver does accesses as shorts */
    现在修改对我们开发板上DM9000X网卡的支持。首先,我们看看drivers/net/目录下有关DM9000的代码,发现dm9000x.h中对CONFIG_DRIVER_DM9000宏的依赖,dm9000x.c中对CONFIG_DM9000_BASE宏、DM9000_IO宏、DM9000_DATA等宏的依赖,所以我们修改代码如下:

  1. /*
  2.  * Hardware drivers
  3.  */
  4. #if 0        /*屏蔽掉u-boot默认对CS8900网卡的支持*/
  5. #define CONFIG_NET_MULTI
  6. #define CONFIG_CS8900        /* we have a CS8900 on-board */
  7. #define CONFIG_CS8900_BASE    0x19000300
  8. #define CONFIG_CS8900_BUS16    /* the Linux driver does accesses as shorts */
  9. #endif 

  10. #define CONFIG_NET_MULTI        1
  11. #define CONFIG_DRIVER_DM9000        1
  12. #define CONFIG_DM9000_BASE        0x20000300
  13. #define DM9000_IO             CONFIG_DM9000_BASE
  14. #define DM9000_DATA             (CONFIG_DM9000_BASE 4)
  15. #define CONFIG_DM9000_NO_SROM        1

  16. #define CONFIG_CMD_PING
  17. #define CONFIG_ETHADDR     1a:2b:3c:4d:5e:6f   //开发板MAC地址
  18. #define CONFIG_NETMASK 255.255.255.0
  19. #define CONFIG_IPADDR        172.16.175.8       //开发板IP地址
  20. #define CONFIG_SERVERIP        172.16.175.6      //Linux主机IP地址
注意:
u-boot-2010.03 可以自动检测DM9000网卡的位数,根据开发板原理图可知网卡的数据位为16位,并且网卡位于CPU的BANK4上,所以只需在 board/samsung/smdk2440/lowlevel_init.S中设置 #define B4_BWSCON (DW16) 即可,不需要此处的 #define CONFIG_DM9000_USE_16BIT 1

    在board/samsung/smdk2440/smdk2440.c中添加DM9000网卡初始化函数,代码如下:

  1. #ifdef CONFIG_CMD_NET
  2. int board_eth_init(bd_t *bis)
  3. {
  4.     int rc = 0;
  5. #ifdef CONFIG_CS8900
  6.     rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
  7. #endif

  8. #ifdef CONFIG_DRIVER_DM9000
  9.         rc = dm9000_initialize(bis);
  10. #endif

  11.     return rc;
  12. }
  13. #endif

    修改dm9000x.c文件,注释掉出错返回语句,代码如下:

  1. /* Activate DM9000 */
  2.     /* RX enable */
  3.     DM9000_iow(DM9000_RCR, RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN);
  4.     /* Enable TX/RX interrupt mask */
  5.     DM9000_iow(DM9000_IMR, IMR_PAR);

  6. #if 0 
  7.     i = 0;
  8.     while (!(phy_read(1) & 0x20)) {    /* autonegation complete bit */
  9.         udelay(1000);
  10.         i ;
  11.         if (i == 10000) {
  12.             printf("could not establish link\n");
  13.             return 0;
  14.         }
  15.     }
  16. #endif

    然后重新编译u-boot,下载到NandFlash中从NandFlash启动,查看启动信息和环境变量,操作如下:


    可以看到,启动信息里面显示了Net:dm9000,printenv查看的环境变量也和include/configs/my2440.h中设置的一致。
阅读(881) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~