S3C2440移植uboot之支持DM9000
上一节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的更多相关文章
- ok6410 u-boot-2012.04.01移植五支持DM9000
继ok6410 u-boot-2012.04.01移植四后,开发板基本已支持MLC NAND,但还有一些细节地方修改,这节增加DM9000支持,通过网卡tftp程序到内存,接着通过NAND命令写到NA ...
- 4.移植uboot-使uboot支持DM9000网卡
在上一章,使uboot能够支持nor.nand 本节继续修改让uboot支持DM9000C网卡,便可以通过网络来传输文件 首先uboot已带有dm9000网卡的驱动,位于drivers/net/下的d ...
- mini2440移植uboot 2014.04(一)
最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...
- 移植u-boot.2012.04.01
/*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...
- ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)
继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND.DM9000等.但还需要完善比如环境变量.mtdpart分区.裁剪.制作补丁等.下面的工作就是完善移植的u-b ...
- 移植U-Boot时遇到的问题
1. 在lowlevel_init过程中,本来想实现一个串口直接打印字符串的过程,编译的时候出现了问题,说是发现代码执行段没有对齐:“unaligned opcodes detected in exe ...
- mini2440移植uboot 2014.04(四)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...
- mini2440移植uboot 2014.04(二)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...
- mini2440移植uboot 2014.04(三)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...
- 04.移植u-boot
1.读readme获取信息 1.1 由Building the Software可知,需修改顶层makefile,指定架构和编译器 ifeq ($(HOSTARCH),$(ARCH)) ...
随机推荐
- SSPRQ码型设计
serdes速率超过50G之后,在VSR光模块场景下SSPRQ使用较为广泛.SSPRQ用于PAM4光模块眼图压力,闭合率测试. 但是有很多serdes IP不支持此功能.出于测试需要需要新设计SSPR ...
- Head First Java学习:第九章-构造器和垃圾收集器
对象的前世今生 对象如何创建.存在何处以及如何让保存和抛弃更有效率. 会述及堆.栈.范围.构造器.超级构造器.空引用等. 1.内存的两个区域:堆和栈 堆(heap):对象的生存空间,又称为可垃圾回收的 ...
- cocos2d-Js 各类碰撞检测
这里总结一下点.圆.矩形之间的简单碰撞检测算法(矩形不包括旋转状态) 点和圆的碰撞检测: 1.计算点和圆心的距离 2.判断点与圆心的距离是否小于圆的半径 isCollision: function(p ...
- Java8新特性Stream流
1.是什么? Stream(流)是一个来自数据源的元素队列并支持聚合操作 2.能干嘛? Stream流的元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而是按需计算. 数 ...
- 探秘扫雷游戏的C语言实现
1 引言 1.1 为什么写这篇文章? 项目仓库地址:基于 C 语言实现的扫雷游戏 我决定写这篇文章的初衷是想分享我在使用C语言开发扫雷游戏的经验和心得.通过这篇文章,我希望能够向读者展示我是如何利用C ...
- TensorFlow C++ 初始化 Tensor 内存 到GPU 内存
最近使用TensorFlow C++版本实现神经网络的部署,我通过GPU 处理得到网络的输入值,因此输入值在GPU内存上保存, TF 输入tensor 的调用语句为 Tensor inputTenso ...
- python操作mongodb基本使用
使用pymongo,具体可以参考官方文档: 语法上基本和原生mongodb是一样的,所以非常容易入手... https://pymongo.readthedocs.io/en/stable/tutor ...
- SpringBoot对象拷贝
目录 概述 定义实体类 Car size carInfo 造测试数据 Spring BeanUtils Apache BeanUtils Cglib BeanCopier MapStruct 性能测试 ...
- 华企盾DSC造成扫描仪无法扫描成pdf文件
解决方法:去掉缩略图策略,重启电脑
- 《HelloGitHub》第 93 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...