u-boot移植(五)使支持DM9000
来源:互联网 发布:自学python看什么书 编辑:程序博客网 时间:2024/05/21 16:23
DM9000的移植比较简单,因为其实u-boot内部已经支持了DM9000网卡,不过smdk2410默认使用的是cs8900网卡,我们要做的工作就是将支持DM9000的
相关代码链入u-boot,然后将cs8900的相关代码替换成DM9000的相关代码。
DM9000的初始化函数为eth_initialize(gd->bd),它在u-boot中的位置参见http://blog.csdn.net/r21nn/article/details/73718514
我们再来看看eth_initialize(gd->bd)的执行流程
eth_initialize -->miiphy_init -->board_eth_init -->cs8900_initialize -->dev->init = cs8900_init; -->dev->halt = cs8900_halt -->dev->send = cs8900_send -->dev->recv = cs8900_recv -->eth_register(dev)我们需要把这个执行留下改为如下
eth_initialize -->miiphy_init -->board_eth_init -->dm9000_initialize(其实改动的只有这个部分,下面的部分会随着这个函数的改变而改变) -->dev->init = dm9000_init -->dev->halt = dm9000_halt -->dev->send = dm9000_send -->dev->recv = dm9000_rx -->eth_register(dev)所以我们要将cs8900_initialize改为dm9000_initialize,改完之后编译,会有错误提示没有dm9000_initialize,这是因为我们还并没有将DM9000
相关的代码链入u-boot,分析u-boot-2012.04.01\drivers\net目录下的Makefile文件,文件中有如下一行
COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
所以只要定义宏CONFIG_DRIVER_DM9000便可将dm9000x.o链入,于是在smdk2440.h中增加如下一行
#define CONFIG_DRIVER_DM9000
再次编译,会提示没有CONFIG_DM9000_BASE,DM9000_IO,DM9000_DATA三个变量,于是再次在smdk2440中定义这三个变量,关于这三个变量怎么定义
我们可以参考u-boot中其他板级文件中的代码,注意:有时候在sourceinsight的当前工程中可能搜索不到这三个量在其他板级文件中的定义,因为我们
在建立sourceinsight工程时没有添加其他板级文件,这时我们需要到Linux中搜索 grep “DM9000_IO” * -nR 。按照其他文件中的模板定义这三个量如下
#define CONFIG_DM9000_BASE0x20000000#define DM9000_IOCONFIG_DM9000_BASE#define DM9000_DATA(CONFIG_DM9000_BASE + 4)现在来说说这三个量的含义,CONFIG_DM9000_BASE顾名思义是DM9000的基地址,因为在s3c24440中DM9000接在BANK4上,而BANK4起始地址为0x20000000
网卡跟其他内存类接口有些不一样,其他内存类接口的地址范围是从起始地址到终止地址,而网卡却是只有两个确定的地址DM9000_IO和DM9000_DATA
关于这两个值的确定要参考s3c2440的原理图
当基地址为0x20000000时,DM9000被选中,但是具体要使用哪个地址还得看addr2引脚的电平,addr=1 DM9000_DATA,addr=0 DM9000_IO。
做完这些之后MD9000的移植就结束了,但是我们还需注意,因为DM9000是接在BANK4上,所以我们在lowlevel_init.S中设置存储控制器时,
有关BANK4的内容要按照DM9000的要求来设置,主要是位宽和时序及等待信号,因为这里使用默认的设置即可,所以才不做变动。如果不行的话
可以将BANKCON4设置为0x00000740。
现在再次编译,没有问题,将u-boot.bin烧入开发板
set ipaddr 192.168.236.3 (我的Windows的IP是192.168.236.5,保持开发板和pc机为同一网段)
set ethaddr 00:0c:29:78:78:75 (随便设,但是第一个段必须为00,可以参考实际的机器设)
ping 192.168.236.5
有如下内容说明DM9000移植成功
注意:我在做DM9000的移植的时候犯了一个很重要的错误,因为我的电脑不能联网,所以在查我的电脑的IP地址的时候,并没有IP(ip没有显示出来)
在安装有虚拟机的物理机上有三个网卡,eth0(本地链接),VMnet1(虚拟网卡),VMnet8(虚拟网卡)。之前没有搞清楚这三个网卡的区别,我之前
一直ping的是后两个网卡地址,这是不可能成功的,注意!!!必须ping本地链接的网卡。如果你的环境跟我一样,电脑不能联网(这时ipconfig不能
查到本地链接网卡的ip地址),你可以按如下步骤做。
1、打开网络共享中心
2、点击更改适配器
3、打开本地连接的属性框
4、在属性框的 此连接使用下列项目中选中Internet协议版本4(TCP/IPV4),再次点击属性,打开协议版本属性框
5、在协议版本属性框中属性框中做如下填写
- u-boot移植(五)使支持DM9000
- TQ2440 u-boot-2012.04.01移植五支持DM9000
- ok6410 u-boot-2012.04.01移植五支持DM9000
- u-boot移植(十二)---代码修改---支持DM9000网卡
- 移植u-boot-2012.04----支持DM9000网卡
- U-boot移植 (v2012.04.1 S3C2440平台) (五) DM9000驱动支持,yaffs文件系统下载支持
- fl2440 移植u-boot-2010.09全纪录3----------DM9000网卡支持
- u-boot-2016.01移植笔记之支持dm9000
- u-boot-2016.05移植:(5)、支持DM9000网卡
- u-boot-2011.03在mini2440/micro2440上的移植(三)——支持DM9000
- u-boot-2014.10移植第17天----添加DM9000网卡支持(一)
- u-boot-2014.10移植第18天----添加DM9000网卡支持(二)
- 移植u-boot-2015.07-rc3之修改代码支持DM9000网卡(七)
- u-boot移植(五)添加norflash支持
- u-boot移植第四弹——2013.10u-boot增加dm9000的支持
- u-boot移植--3、DM9000网卡移植
- u-boot-2016.09移植(6)-dm9000
- u-boot移植 (五)
- Flex 布局教程:实例篇
- 一分钟了解“老师说的写国基的要点”
- 在 Markdown 实现段首缩进
- logrotate切割nginx日志
- warning MSB8004: Output Directory does not end with a trailing slash.
- u-boot移植(五)使支持DM9000
- Codeforces 821B Okabe and Banana Trees 题解
- 互斥锁、同步锁、读写锁的区别
- crond和crontab 调研
- 信息论(2-4章)笔记
- View Animation——视图动画
- YOLO源码详解(三)- 前向传播(forward)
- c++中return this和return *this的区别
- 润乾v5填报-分片问题分析