上一节S3C2440移植uboot之支持NANDFLASH操作移植了uboot 支持了NANDFLASH的操作,这一节修改uboot支持DM9000。

通过Makefile把dm9000x编译进uboot

cd drivers/net
vi Makefile

  需要在文件中添加以下宏

  在smdk2440.h中修改文件支持DM9000

#if 0
#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 */
#else
#define CONFIG_DRIVER_DM9000 /*DM9000*/
#endif

  编译报错

编译报错 DM9000_DATA

  搜索DM9000_DATA那里定义

grep "DM9000_DATA" *nR

  参考别人配置文件



  在smdk2440.h中修改为如下内容

/*
* Hardware drivers
*/
#if 0
#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 */
#else
#define CONFIG_DRIVER_DM9000 /*DM9000*/
#define CONFIG_DM9000_BASE 0x20000000 /*参考芯片手册 nGCS4*/
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE + 4) /*bit 2 1 0*/
#endif

  我们的DM9000是放在2440的bank4(0X20000000)的片选上面,而DM9000的CMD引脚接在bank4的LADDR2上面。也就是说当0X20000000地址上读写数据时, 此时CMD为低,则读写的便是DM9000C的地址。向0X20000000+4地址上读写数据时,此时CMD为高,则读写的便是DM9000C的数据。

修改内存控制器时序

  由于之前在start.S里,就调用了board/samsung/smdk2440/lowlevl_init.S来初始化各个bank的配置、时序。所以我们只需要在那里修改bank4的内容即可。(也可以直接在dm9000x.c里的dm9000_initialize()函数设置)参考之前写的移植DM9000C驱动里的时序

  由于兼容DM9000E,所以修改的值尽量大一点, 修改\u-boot-2012.04.01\board\samsung\smdk2440\lowlevel_init.S

设为:

.long 0x00000740;    //BANKCON4

  参考手册如下

  BWSCON位宽设置



  时序设置



  编译烧写

网卡的初始化的流程

搜索No ethernet found

  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) < 0) //初始化 单板上的以太网
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 = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE); //初始化cs8900
#endif
return rc;
}

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

支持DM9000C的初始化

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



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

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

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

编译测试

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

set ipaddr 192.168.159.120
ping 192.168.159.100

   打印如下图所示:



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

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

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

便可以ping通.

TFTP下载测试

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

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

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

  2)进入开发板,输入:

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

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

主要修改文件:include/configs/smdk2440.h lowevel_init.s

  下一节S3C2440移植uboot之裁剪和修改默认参数我们将裁剪uboot和修改默认的环境变量。

有任何问题,均可通过公告中的二维码联系我

S3C2440移植uboot之支持DM9000的更多相关文章

  1. ok6410 u-boot-2012.04.01移植五支持DM9000

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

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

    在上一章,使uboot能够支持nor.nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的d ...

  3. mini2440移植uboot 2014.04(一)

    最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...

  4. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  5. ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

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

  6. 移植U-Boot时遇到的问题

    1. 在lowlevel_init过程中,本来想实现一个串口直接打印字符串的过程,编译的时候出现了问题,说是发现代码执行段没有对齐:“unaligned opcodes detected in exe ...

  7. mini2440移植uboot 2014.04(四)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...

  8. mini2440移植uboot 2014.04(二)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...

  9. mini2440移植uboot 2014.04(三)

    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...

  10. 04.移植u-boot

    1.读readme获取信息    1.1 由Building the Software可知,需修改顶层makefile,指定架构和编译器    ifeq ($(HOSTARCH),$(ARCH))   ...

随机推荐

  1. Windows 项目的 CMakeLists 编写

    前言: 项目一直是以 .sln 解决方案打开和处理的,上传到 github 也是需要将 sln 文件包括到项目里,不太优雅(虽然方便),毕竟现在开源项目基本都是使用 CMake 做跨平台编译 因为项目 ...

  2. 自研、好用的ORM 读写分离功能使用

    Fast Framework 作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer O ...

  3. v-for和指令

    . v-for 起遍历作用. 注意点: 1.遍历的里面第一个值是定义的元素的值,第二个值是值的名称,第三个值为下标 2.:key是v-blind:key的简写,是代码中的唯一标识,一般用id来定义 v ...

  4. Tensorflow2.0实现VGG13

    导入必要的库: import os import tensorflow as tf from tensorflow import keras from tensorflow.keras import ...

  5. TCP/IP协议---三次握手和四次挥手

    TCP首部的数据格式 其中, 源端口号和目的端口号各占16位,端口范围1~65535.1024以下为知名端口,1024~65535是供用户使用.源端口,目的端口,源ip,目的ip这四个值唯一确定一个T ...

  6. ElasticSearch之cat anomaly detectors API

    curl -X GET "https://localhost:9200/_cat/ml/anomaly_detectors?v=true&pretty" --cacert ...

  7. linux rz/sz 拖动文件上传

    不需要第三方上传文件直接 rz上传 拖动.以及 sz下载文件 多舒服 那么 他来了 安装与使用 yum安装 yum -y install lrzsz 使用上传文件,执行命令rz,会跳出文件选择窗口,选 ...

  8. SQL优化案例(1):隐式转换

    MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...

  9. Redis 分片集群

    1.Redis分片集群 1.1.搭建分片集群 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题,如图: 分片集群特 ...

  10. Harbor私有镜像仓库搭建

    为什么选择Harbor 你可能会问既然我们已经有了 Docker 镜像仓库为什么还需要 Harbor 呢?嗯,Harbor 是 Docker 镜像仓库的企业级扩展,用途更广泛.这些新的企业级功能包括: ...