4.移植uboot-使uboot支持DM9000网卡

时间:2022-04-29 11:51:50

上一章,使uboot能够支持nor、nand

本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件


首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的dm9000x.h、dm9000x.c

1.DM9000C介绍

参考之前写的移植DM9000C驱动章节, 我们的DM9000是放在2440的bank4(0X20000000)的片选上面

而DM9000的CMD引脚接在bank4的LADDR2上面

也就是说当向0X20000000地址上读写数据时, 此时CMD为低,则读写的便是DM9000C的地址

向0X20000000+4地址上读写数据时,此时CMD为高,则读写的便是DM9000C的数据

2.修改内存控制器时序

由于之前在start.S里,就调用了board/samsung/smdk2440/lowlevl_init.S来初始化各个bank的配置、时序。所以我们只需要在那里修改bank4的内容即可

(也可以直接在dm9000x.c里的dm9000_initialize()函数设置)

参考之前写的移植DM9000C驱动里的时序

由于兼容DM9000E,所以修改的值尽量大一点,设为:

.long 0x00000740;    //BANKCON4

3.修改宏,通过Makefile把dm9000x编译进uboot

3.1 查找宏

cd drivers/net
vi Makefile

找到:

4.移植uboot-使uboot支持DM9000网卡

找到有两个宏: CONFIG_CS8900、CONFIG_DRIVER_DM9000

由于uboot默认定义的是CONFIG_CS8900宏,而我们板子上的网卡是dm9000C,所以我们要修改为CONFIG_DRIVER_DM9000宏(宏位于include/configs/smdk2440.h)

将:

#define CONFIG_CS8900             /* we have a CS8900 on-board */
#define CONFIG_CS8900_BASE 0x19000300
#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */

改为:

#define CONFIG_DRIVER_DM9000                    /*DM9000*/
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)

4. 然后来看看初始化dm9000c的流程

1)uboot重定位后进入第二阶段board_init_r():

void board_init_r(gd_t *id, ulong dest_addr)        //gd    uboot重定位地址
{
... ...
#if defined(CONFIG_CMD_NET)
puts("Net: ");
eth_initialize(gd->bd); // 以太网初始化 #if defined(CONFIG_RESET_PHY_R)
debug("Reset Ethernet PHY\n");
reset_phy(); #endif
#endif
... ...
}

2)然后进入board_init_r()->eth_initialize():

int eth_initialize(bd_t *bis)
{
... ...
if (board_eth_init(bis) < ) //初始化 单板上的以太网
printf("Board Net Initialization Failed\n");
... ... if (!eth_devices) { //初始化失败,打印"No ethernet found.\n"
puts ("No ethernet found.\n");
bootstage_error(BOOTSTAGE_ID_NET_ETH_START);
}
... ...
}

3)进入board_eth_init(), 位于board/samsung/smdk2440/smdk2440.c

int board_eth_init(bd_t *bis)
{
int rc = ;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(, CONFIG_CS8900_BASE); //初始化cs8900
#endif
return rc;
}

4.1从上面代码看到,单板初始化board_eth_init()函数里,只支持初始化CS8900,没有DM9000C

搜索其它单板的board_eth_init()是如何初始化DM9000C的,如下图所示:

4.移植uboot-使uboot支持DM9000网卡

所以,我们修改2440单板的board_eth_init(),使它支持DM9000C

修改代码如下(位于board/samsung/smdk2440/smdk2440.c):

int board_eth_init(bd_t *bis)
{
int rc = ; #ifdef CONFIG_CS8900
rc = cs8900_initialize(, CONFIG_CS8900_BASE); //初始化cs8900
#endif #ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis); //初始化DM9000C
#endif return rc;
}

5.编译测试

使用loady命令重新烧写uboot,打印如下图所示:

4.移植uboot-使uboot支持DM9000网卡

然后试验,来ping下PC机,输入:

set ipaddr 192.168.2.103
ping 192.168.2.101

打印如下图所示:

4.移植uboot-使uboot支持DM9000网卡

上面表示,MAC(硬件地址)没有设置,我们需要设置ethaddr,来更改MAC地址

输入(参考别人的MAC地址):

set ethaddr :00:3e::0a:5b    //设置MAC地址
ping 192.168.2.101 //重新ping

便可以ping通.

5.1 使用tftp工具,通过网卡来下载内核

tftp工具是通过电脑来设置本机为服务器,然后开发板作为客户端,便可以读取到PC机里的文件了

1)PC机打开tftp工具,设置文件根目录,以及PC本机的IP地址

2)进入开发板,输入:

set serverip   192.168.2.101                //设置PC机地址
tftp uImage //下载PC机设置的tftp根目录下的uImage文件
bootm //使用bootm命令启动内核代码

启动内核时,打印如下图所示:

4.移植uboot-使uboot支持DM9000网卡

由于uboot没有配置mtdparts命令,所以启动内核没成功.

接下来,在下章-设置默认环境变量,裁剪,分区里会讲到如何配置mtdparts命令

4.移植uboot-使uboot支持DM9000网卡的更多相关文章

  1. u-boot移植(十二)---代码修改---支持DM9000网卡

    一.准备工作 1.1 原理图 CONFIG_DM9000_BASE 片选信号是接在nGCS4引脚,若要确定网卡的基地址,则要根据片选信号的接口去确定. 在三星2440的DATASHEET中memory ...

  2. ok6410 u-boot-2012&period;04&period;01移植七完善u-boot移植&lpar;u-boot移植结束&rpar;

    继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...

  3. ok6410 u-boot-2012&period;04&period;01移植五支持DM9000

    继ok6410 u-boot-2012.04.01移植四后,开发板基本已支持MLC NAND,但还有一些细节地方修改,这节增加DM9000支持,通过网卡tftp程序到内存,接着通过NAND命令写到NA ...

  4. dm9000网卡 S3C2440

    配置U-Boot支持dm9000网卡 原理图 # vi drivers/net/Makefile obj-$(CONFIG_DRIVER_NET_CS8900) += cs8900.o obj-$(C ...

  5. 【转】基于linux下的dm9000网卡移植全分析

    转自:http://blog.sina.com.cn/s/blog_6abf2c04010189ui.html DM9000可以直接与ISA总线相连,也可以与大多数CPU直接相连.Mini2440采用 ...

  6. 2&period;移植3&period;4内核-使内核支持烧写yaffs2

    在上章-制作文件系统,并使内核成功启动jffs2文件系统了 本章便开始使内核支持烧写yaffs2文件系统 1.首先获取yaffs2源码(参考git命令使用详解) cd /work/nfs_root g ...

  7. Linux网卡驱动移植--Dm9000网卡驱动分析

    1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...

  8. X-008 FriendlyARM tiny4412 uboot移植之copy u-boot到DDR内存

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  9. u-boot 移植 ---&gt&semi;1、u-boot配置(Kbuild)

    早期的U-BOOT的裁剪是没有使用Kbuild工具的,后来就借鉴了Linux的Kbuild同时也是方便使用者裁剪,因为他的原理和Linux内核的配置裁剪原理是相同的.今天拿来分析的U-Boot的版本是 ...

随机推荐

  1. 用php去除bom头

    最近在用dede开发一个网站的时候,发现网站在本地没什么问题,但是上传到服务器上面去之后,在首页会默认的生成一串的字符串,如下图所示: 百度了之后,发现好多的解决方法都是说的把文件存储为utf-8无 ...

  2. 深入理解图优化与g2o:g2o篇

    内容提要 讲完了优化的基本知识,我们来看一下g2o的结构.本篇将讨论g2o的代码结构,并带着大家一起写一个简单的双视图bundle adjustment:从两张图像中估计相机运动和特征点位置.你可以把 ...

  3. Android基本布局

    android基本布局有三种:LinearLayout,RelativeLayout,FrameLayout. 一.LinearLayout 1,这是一种垂直布局(或者水平布局),可以通过下面这一句来 ...

  4. hud 2586 How far away ?

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Description There are n houses in ...

  5. javaweb学习总结十一&lpar;JAXP对XML文档进行DOM解析&rpar;

    一:将内存中写好的xml文件读取到硬盘上 二:DOM方式对xml文件进行增删改查 1:添加节点(默认是在最后的子节点后面添加) @Test // 向元素中添加节点<version>1.0& ...

  6. block&lowbar;dump观察Linux IO写入的具体文件&lpar;mysqld)

      一.使用方法: 二.基本原理: 三.总结 很多情况下开发者调测程序需要在Linux下获取具体的IO的状况,目前常用的IO观察工具用vmstat和iostat,具体功能上说当然是iostat更胜一筹 ...

  7. uboot代码2:stage2代码&comma;启动内核

    一.uboot最终目的: 1.读出内核 do_nand read kernel { flash上存的内核:uImage = 头部 + 真正的内核; } 2.启动内核. do_bootm_linux { ...

  8. Java 8 – Convert a Stream to LIST

    Java 8 – Convert a Stream to LIST package com.mkyong.java8; import java.util.List;import java.util.s ...

  9. HTML 5 &lt&semi;form&gt&semi; enctype 属性

    值 描述 application/x-www-form-urlencoded 在发送前对所有字符进行编码(默认). multipart/form-data 不对字符编码.当使用有文件上传控件的表单时, ...

  10. 手动修改PHP页面返回状态码

    <?php //比如当前页面要返回404状态码 header("HTTP/1.1 404 Not Found"); header("Status: 404 Not ...