首先找到dm9000目录下的makefile,可以看到一般有两种网卡,cs8900和dm9000,我们用的是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
#endif

然后重新编译,可以看到如下错误:

dm9000x.c: In function 'dm9000_outblk_8bit':
dm9000x.c:156: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c:156: error: (Each undeclared identifier is reported only once
dm9000x.c:156: error: for each function it appears in.)
dm9000x.c: In function 'dm9000_outblk_16bit':
dm9000x.c:165: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_outblk_32bit':
dm9000x.c:173: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_inblk_8bit':
dm9000x.c:180: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_inblk_16bit':
dm9000x.c:189: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_inblk_32bit':
dm9000x.c:197: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_rx_status_32bit':
dm9000x.c:204: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c:206: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_rx_status_16bit':
dm9000x.c:213: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c:215: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_rx_status_8bit':
dm9000x.c:221: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c:224: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_probe':
dm9000x.c:243: error: 'CONFIG_DM9000_BASE' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_send':
dm9000x.c:420: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c: In function 'dm9000_rx':
dm9000x.c:484: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'DM9000_ior':
dm9000x.c:574: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c:575: error: 'DM9000_DATA' undeclared (first use in this function)
dm9000x.c: In function 'DM9000_iow':
dm9000x.c:584: error: 'DM9000_IO' undeclared (first use in this function)
dm9000x.c:585: error: 'DM9000_DATA' undeclared (first use in this function)
/home/book/Par_Uboot/mk_uboot/u-boot-2012.04.01/config.mk:312: recipe for target 'dm9000x.o' failed
make[1]: *** [dm9000x.o] Error 1
make[1]: Leaving directory '/home/book/Par_Uboot/mk_uboot/u-boot-2012.04.01/drivers/net'
Makefile:485: recipe for target 'drivers/net/libnet.o' failed

在所有文件张搜索DM9000_DATA,可以看到使用dm9000时还得定义一些其他的东西,先复制过来

#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_NO_SROM
#define CONFIG_DM9000_BASE    0x20100000
#define DM9000_IO        CONFIG_DM9000_BASE
#define DM9000_DATA        (CONFIG_DM9000_BASE + 2)

这里的基地址是根据不同的开发板的内存分布会有不同的值,所以分析2440的内存分布来确定上面宏定义的值:

                            

dm9000是有nGCS4来选取的,所以当内存控制器发出的地址在0x20000000 和 0x28000000之间就会选中DM9000,这时候的基地址是0x20000000,然后根据cmd引脚确定data的地址

#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_NO_SROM
#define CONFIG_DM9000_BASE    0x20000000
#define DM9000_IO        CONFIG_DM9000_BASE
#define DM9000_DATA        (CONFIG_DM9000_BASE + 4)

然后查看原来的内存设置,确定是否需要修改

SMRDATA:.long 0x22011110  //BWSCON.long 0x00000700    //BANKCON0.long 0x00000700  //BANKCON1.long 0x00000700  //BANKCON2.long 0x00000700  //BANKCON3  .long 0x00000740    //BANKCON4.long 0x00000700  //BANKCON5.long 0x00018005  //BANKCON6.long 0x00018005  //BANKCON7.long 0x008C04F4  // REFRESH.long 0x000000B1  //BANKSIZE.long 0x00000030  //MRSRB6.long 0x00000030    //MRSRB7

改完内存重启后仍然发现无法找到网卡:

然后看网卡原来的初始化函数,以确定问题,下面是原来的网卡初始化流程:

    eth_initialize(gd->bd);        //board.crc = cs8900_initialize(0, CONFIG_CS8900_BASE);        //smdk2410.c

从这里可以看到原来的初始化函数是初始化cs8900的,所以现在需要改成dm9000,uboot下搜索的目录dm9000的初始化函数,借鉴别的单板是怎么设置dm9000的

book@www.100ask.org:~/Par_Uboot/mk_uboot/u-boot-2012.04.01$ grep "dm9000_initialize" * -nR
board/atmel/at91sam9261ek/at91sam9261ek.c:277:    return dm9000_initialize(bis);
board/altera/nios2-generic/nios2-generic.c:79:    rc += dm9000_initialize(bis);
board/scb9328/scb9328.c:66:    return dm9000_initialize(bis);
board/ronetix/pm9261/pm9261.c:280:    return dm9000_initialize(bis);

从而去修改2440的网卡初始化

int board_eth_init(bd_t *bis)
{int rc = 0;
#ifdef CONFIG_CS8900rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif#ifdef CONFIG_DRIVER_DM9000rc = dm9000_initialize(bis);#endifreturn rc;
}

烧写运行

U-Boot 2012.04.01 (Sep 24 2019 - 15:31:45)CPUID: 32440001
FCLK:  400 MHz
HCLK:  100 MHz
PCLK:   50 MHz
DRAM:  64 MiB
WARNING: Caches not enabled
Flash: fwc addr (null) cmd f0 00f0 16bit x 16 bit
fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit
fwc addr 00005554 cmd 55 0055 16bit x 16 bit
fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit
fwc addr (null) cmd f0 00f0 16bit x 16 bit
JEDEC PROBE: ID c2 2249 0
2 MiB
NAND:  256 MiB
*** Warning - bad CRC, using default environmentIn:    serial
Out:   serial
Err:   serial
Net:   dm9000

设置ip。测试网卡功能

set ipaddr 192.168.2.5        设置单板ip

set serverip 192.168.2.2        设置服务器ip

set ethaddr 00:0c:29:6c:b9:36    设置网卡mac

tftp 30000000 uImage_3.5        下载内核进行测试

更改的文件:

smdk2440/smdk2410.c

lowlevel_init.S

smdk2440.h

uboot源码修改之支持DM9000相关推荐

  1. jz2440开发板移植U-boot之修改代码支持DM9000网卡

    今天我们来移植U-boot到jz2440开发板,修改代码支持DM9000网卡.查看之前写的移植记录请点击链接:点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡.我们的U-boot源码里面 ...

  2. 编译FriendlyDesktop的Uboot源码、内核,修改开机图片logo

    1. 安装依赖包 参照官网wiki教程 - 12章节:Nanopi 教程wiki 安装以下依赖包. sudo apt-get -y install bison g++-multilib git gpe ...

  3. BenchmarkSQL 5.0源码修改 -- 支持 人大金仓数据库 KingBase

    benchmarksql 在5.0版本中没有对人大金仓数据库(KingBase)的TPC-C测试支持,本文通过修改部分源码,让benchmarksql 5.0支持KingBase. 个人理解: Ben ...

  4. U-Boot源码目录分析(VScode工程创建及文件夹过滤)

    参考:U-Boot工程目录介绍 作者:一只青木呀 发布时间: 2020-10-21 14:47:30 网址:https://blog.csdn.net/weixin_45309916/article/ ...

  5. uboot源码分析(基于S5PV210)之启动第一阶段

    目录 一.start.S引入 1.u-boot.lds中找到start.S入口 2.SourceInsight中如何找到文件 3.SI中找文件技巧 二.start.S解析 1.不简单的头文件包含 2. ...

  6. 什么是U-Boot以及如何下载U-Boot源码

    参考:什么是U-Boot以及如何下载U-Boot源码? 作者:一只青木呀 发布时间: 2020-10-20 11:05:59 网址:https://blog.csdn.net/weixin_45309 ...

  7. linux uboot 源码分析,UBoot源码分析1.pdf

    UBoot源码分析1 • UBoot源码解析(一) 主要内容 • 分析UBoot是如何引导Linux内核 • UBoot源码的一阶段解析 BootLoader概念 • Boot Loader 就是在操 ...

  8. u-boot源码配置原理分析

    作者:杨老师,华清远见嵌入式学院讲师. u-boot的源代码默认是不针对任何目标平台的,当我们要移植u-boot到一个特定的目标平台时,需要生成针对目标平台的配置文件.u-boot目前已经支持的芯片可 ...

  9. 写一个PE的壳_Part 5:PE格式修复+lief源码修改

    系列汇总 写一个PE的壳_Part 1:加载PE文件到内存 写一个PE的壳_Part 2:ASLR+修复输入表(IAT)+重定位表支持(.reloc) 写一个PE的壳_Part 3:Section里实 ...

  10. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂

    往期回顾: 第一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 第二篇:grbl控制3轴机械臂 原理 实现 (二) 之3D机械臂模拟及实现 第三篇:grbl控制3轴机械臂 原理 ...

最新文章

  1. 解压ubi文件_制作ubi文件系统
  2. OCR-PIL.Image与Base64 String的互相转换
  3. fhq treap ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
  4. SAP Cloud Platform上的WebIDE fullstack在哪里打开
  5. 【汇编语言学习之路】第一章 汇编语言核心方法论
  6. C#_delegate EndInvoke
  7. 谈目标绩效的一种想象
  8. 复旦计算机系统基础课件,复旦大学软件工程考研(MSE)计算机系统基础复习资料.ppt...
  9. 移动设备分辨率(终于弄懂了为什么移动端设计稿总是640px和750px)
  10. python10的负n次方_python的次方
  11. 鸟哥Linux学习笔记(从头学习Linux基础)
  12. 禁止搜索引擎收录网站内容,百度,谷歌,所有等...
  13. linux Permission 0644 for are too open 错误解决方案
  14. springboot实现微信小程序二维码生成
  15. 爱快路由器wifi短信验证上网怎样配置?wifi身份认证方案
  16. U盘文件突然不见却占内存 解决方案
  17. 席绢言情系列书评总序
  18. Krpano学习:全景图补天补地(PTGui + Photoshop)
  19. 一个账号多路由器拨号失败服务器无响应,PPPoE拨号失败 PPPoE拨号失败服务器无响应怎么办?...
  20. SSMS18.9.1证书被颁发者直接吊销

热门文章

  1. AutoCAD二次开发1-环境配置
  2. Win10系统完全卸载52好压的方法
  3. AppSpider:Xposed+JustTrustMe关闭SSL证书验证
  4. 查看Hadoop的版本号
  5. GH4169高温合金执行什么标准
  6. Unity学习笔记--无限地图(地图拼接)
  7. java ip地址定位,Java根据IP地址定位位置
  8. 用广义线性模型进行数据分析(下)
  9. win10磁盘如何解锁bitlocker,解决分区助手无法调整分区问题
  10. matlab lu分解 源代码,矩阵LU分解程序实现(Matlab)