文档章节

U-boot在S3C2440上的移植详解(四)---支持DM9000EP网卡

宁宁爸
 宁宁爸
发布于 2015/11/27 15:58
字数 945
阅读 80
收藏 2

在这一篇中,我们首先让开发板对CS8900或者DM9000X网卡的支持,然后再分析实现u-boot怎样来引导Linux内核启动。因为测试u-boot引导内核我们要用到网络下载功能。

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

 

现在修改对我们开发板上DM9000X网卡的支持。
首先,我们看看drivers/net/目录下有关DM9000的代码,发现dm9000x.h中对CONFIG_DRIVER_DM9000宏的依赖,dm9000x.c中对CONFIG_DM9000_BASE宏、DM9000_IO宏、DM9000_DATA等宏的依赖,所以我们修改代码如下:

#gedit include/configs/my2440.h

#define CONFIG_BOOTDELAY	3
/*#define CONFIG_BOOTARGS	"root=ramfs devfs=mount console=ttySA0,9600" */
#define CONFIG_ETHADDR	08:00:3e:26:0a:5b
#define CONFIG_NETMASK          255.255.255.0
#define CONFIG_IPADDR		192.168.0.119
#define CONFIG_SERVERIP		192.168.0.111
#define CONFIG_GATEWAYIP	192.168.0.1
#define CONFIG_OVERWRITE_ETHADDR_ONCE
/*#define CONFIG_BOOTFILE	"elinos-lart" */
/*#define CONFIG_BOOTCOMMAND	"tftp; bootm" */


/* * Hardware drivers */  屏蔽掉u-boot默认对CS8900网卡的支持
//#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
//#define CS8900_BASE          0x19000300
//#define CS8900_BUS16         1 /* the Linux driver does accesses as shorts */
 
//添加u-boot对DM9000X网卡的支持
#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)
#define DM9000_IO CONFIG_DM9000_BASE
//#define CONFIG_DM9000_USE_16BIT 1
注意:
u-boot-2009.08 可以自动检测DM9000网卡的位数,根据开发板原理图可知网卡的数据位为16位,并且网卡位于CPU的BANK4上,所以只需在 board/samsung/my2440/lowlevel_init.S中设置 #define B4_BWSCON (DW16) 即可,不需要此处的 #define CONFIG_DM9000_USE_16BIT 1

#undef CONFIG_DM9000_DEBUG
 
//给u-boot加上ping命令,用来测试网络通不通
#define CONFIG_CMD_PING

添加板载DM9000网卡初始化代码,如下:

#gedit board/samsung/my2440/my2440.c

#include <net.h>
#include <netdev.h>
 
#ifdef CONFIG_DRIVER_DM9000
extern int dm9000_initialize(bd_t *bis);
int board_eth_init(bd_t *bis)
{
    return dm9000_initialize(bis);
}
#endif

修改MD9000网卡驱动代码,如下:

#gedit drivers/net/dm9000x.c  // 需要三处修改,以下三处可能顺序不对,读者自行校正

        #if 1
	i = 0;
	while (!(phy_read(1) & 0x20)) {	/* autonegation complete bit */
		udelay(1000);
		i++;
		if (i == 3000) {
			printf("could not establish link\n");
			return 0;
		}
	}
	#endif
	
。。。。。。
。。。。。。
	
/*
  Stop the interface.
  The interface is stopped when it is brought.
*/
static void dm9000_halt(struct eth_device *netdev)
{
#if 0 
 DM9000_DBG("%s\n", __func__);
 /* RESET devie */
 phy_write(0, 0x8000); /* PHY RESET */
 DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
 DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */
 DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */
#endif 
}

。。。。。。
。。。。。。

/*
   Read a word from phyxcer
*/
// phy_read 函数中只修改了 带/* Wait read complete */标注的一行
static u16
phy_read(int reg)
{
 u16 val;
 /* Fill the phyxcer register into REG_0C */
 DM9000_iow(DM9000_EPAR, DM9000_PHY | reg);
 DM9000_iow(DM9000_EPCR, 0xc); /* Issue phyxcer read command */
 udelay(1000); //udelay(100);   /* Wait read complete */
 DM9000_iow(DM9000_EPCR, 0x0); /* Clear phyxcer read command */
 val = (DM9000_ior(DM9000_EPDRH) << 8) | DM9000_ior(DM9000_EPDRL);
 /* The read data keeps on REG_0D & REG_0E */
 DM9000_DBG("phy_read(0x%x): 0x%x\n", reg, val);
 return val;
}

net/nfs.c

#if defined(CONFIG_CMD_NET) && defined(CONFIG_CMD_NFS)
#define HASHES_PER_LINE 65 /* Number of "loading" hashes per line */
#define NFS_RETRY_COUNT 30
#define NFS_TIMEOUT (CONFIG_SYS_HZ/1000*2000UL) //2000UL


此博文是两篇博文的合体:

http://www.embeddedlinux.org.cn/html/jishuzixun/201303/16-2496.html

http://www.linuxidc.com/Linux/2011-05/35982p4.htm


注:移植网卡这一块,经常碰到的问题是,不能ping通主机,本人也遇到了,参考以上两篇文章后,当以XP(自己的家用电脑),为主机时,可以ping通,以WIN7(公司电脑,防火墙受管理员控制,自己改不了设置)为主机时,不能ping通,最后判断,网卡移植没问题,问题是:公司电脑防火墙的问题。

最后,发个能ping通的画面

网卡搞定后,就可以下载了

直接上图吧:

上图,成功将1.bin文件下载到NAND FLASH的0x60000位置上


本文转载自:http://www.embeddedlinux.org.cn/html/jishuzixun/201303/16-2496.html

宁宁爸
粉丝 82
博文 58
码字总数 26478
作品 0
高级程序员
私信 提问
关于uboot在jz2440上的移植问题

由于书上的介绍与板子上不大一样,遇到很多问题,将查找到的资料综合一下,以便使用! 1)开发环境 1.开发板:勤研2440, nor flash:没移植改变nor flash前,显示Amd29LV400BB 512K,但实际...

文剑Boy
2015/03/05
0
0
嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http:...

nothingfinal
2012/06/19
0
0
移植Linux2.6.22.6到s3c2410/2440开发板成功

主要还是参考tekkaman的文章http://blog.chinaunix.net/u1/34474/showart.php?id=369449自己修改了网卡移植这一部分。交叉编译器用的是arm-linux-3.4.1版本。 一、将Linux2.6.22.6内核源码放...

YACHE
2011/07/04
1K
0
U-boot在S3C2440上的移植详解(一) --- NOR FLASH 启动u-boot

一、移植环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步骤 1. 了解u-boot主要的目......

宁宁爸
2015/11/24
262
0
linux-2.6.14移植到S3C2440

linux-2.6.14移植到S3C2440 嵌入式开发交流群2:289195589,欢迎加入! 现在应该很少使用2.6.14的内核了,但由于项目需要,最近移植了2.6.版本的内核到S3C2440上,并移植了CS8900网卡驱动(网...

长平狐
2013/06/03
321
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
18
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部