在Makefile中添加uboot的DM9000网卡驱动

在drivers/net/Makefile文件中找到,如下面的:

可知,要支持DM9000,我们需要在配置文件里添加CONFIG_DRVIER_DM9000的宏定义:

然后我们make一下进行编译:

发现编译出错,原因是有一个DM9000_DATA 的宏未定义,我们使用grep "DM9000_DATA" * -nR 命令查看一下其的定义:

可以看到这些configs文件里面的头文件都定义了相应的DM9000_DATA 的宏,我们打开其中一个参考一下:

例如上面的pm9261.h 文件中,我们看到还需要定义DM9000_IODM9000_DATA 这些宏,我们把这些宏补充到我们的配置文件中:

  • BASE 的地址为s3c2440的(nGCS4),所以地址为 0x2000_0000 ~ 0x0x2800_0000 时都会使能nGCS4,选中网卡。
  • CMD 连接LADDR2 地址,当CMD 接高电LDATA 充当数据线,当LDATA为低电平充当 Index port。

我们再重新make一下:

自此,我们就重新成功将DM9000 编译进我们的uboot了,但现在还不一定能运行。

设置配置内存控制器

时序分析


根据对DM9000CEP的处理器读写操作时序,结合s3c2440芯片的内存控制器时序分析,如上图所示。我们可以得出内存控制器的设置为下面的表格所示。

时间 取值
Tacs 0 clk
Tcos 0 clk
Tacc 1或2clk
Tcoh 1 clk
Tcah 1 clk
Tacp 取默认值
PMC 取默认值

Tacc 需要大于等于10ns,结合我们的内存控制器使用的时钟是HCLK 为100MHZ,一个Clock 正好为10ns,为了效率我们可以去1个Clock 时间,为了保险我们也可以取2个Clock时间。(实测下来得取2clk,在最后面我会说明1个clk时遇到的问题

Tcoh 保持时间,进行写操作时,我们需要在撤销#IOW后再保持3ns的SD数据,因此我们得让#CS引脚至少再维持1个clk 的时钟

Tcah 正常可以取0Clock,但是DM9000CEP 两次连续的读写操作之间(IOR#和IOW#)需要有一个时间间隔,这个间隔综合下来不能少于2个Clock,而我们的Tacs 和Tcos 都是0个Clock,为了防止可能连续操作可能出现时序问题。我们就让Tcah 来填充这个2个Clock的间隔。而前面的Tcoh又正好处于两次读(写)操作之间,减去Tcoh的一个时钟,我们的 Tcah就只需要一个时钟就可以了

源码修正

修改lowlevel_init.S 的代码,如图所示,我修改了BANK4 的配置寄存器的配置信息。(未取两个clk的情况)

修改board/samsung/smdk2440.c 文件在原来smdk2410使用的cs8900网卡的基础上,新添一个DM9000网卡的初始化操作。通过宏开关来操纵。

修改smdk2440.h 文件:

SERVERIP:我设置为了我编译内核的ubuntu 18.04 STL的网卡地址。

IPADDR:为了使其和我的ubuntu能够互联,这里将ip地址设置为与ubuntu同一子网的地址。

测试

添加厂商id


我们第一次烧入,然后ping 我们的ubuntu 主机,发现出现dm9000 not found at 0x20000000 id: 0x2b2a2928的错误。我们在ubuntu中使用grep "dm9000 not found" * -nR 定位我们的错误语句出现的地方。

在dm9000x.c 文件的第252行:

我们发现DM9000_ID 定义的设备号和厂商ID组合是0x90000A46,对比数据手册发现我们的DM9000CEP的不同,因此我们在246行处添加我们的DM9000CEP芯片的设备ID和厂商ID的组合。

其ID在数据手册中的定义如下图所示:

我们再重新编译烧入。

修改时钟为2clk

重新烧写入后又发现了新的问题,我们同样使用grep 命令进行定位:

ISR寄存器里面记录的DM9000的数据传输位宽,结合数据手册(下图),我们发现正常读取ISR寄存器应该是的第7、6位应该是00才对,而结合输出错误读出了11,所以我们猜测是内存控制器设置出现了问题。


最后在实际测试下来将Tacc设置为2clk时钟后就不会出现上面的问题。

最后一次烧入

至此,我们就使我们的uboot可以成功支持DM9000CEP网卡了。

总结

我们往uboot中添加DM9000CEP网卡经历了以下过程:

  1. 修改drivers/net/Makefile 文件,将DM9000的代码编译进uboot。为此我们需要在s3c2440.h配置文件中添加CONFIG_DRVIER_DM9000的配置项;
  2. 同时还要在配置文件中添加DM9000_DATACONFIG_DM9000_BASEDM9000_DATA三个使用DM9000x.c代码需要的宏定义。它们用于指定DM9000被映射到内存控制器的内存地址;
  3. 修改内存控制器,需要分析DM9000CEP的处理器读写操作时序;
  4. 修改dm9000x.c 的源码,添加DM9000CEP的设备ID和厂商ID;
  5. 使用ping 命令测试连通性;

s3c2440_uboot移植(六)添加DM9000网卡相关推荐

  1. linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx

    linux内核移植步骤添加dm9000网卡驱动(设备树).docx LINUX内核移植步骤2015年05月13日星期三上午1105往设备树中添加网卡驱动1.选平台,指定交叉编译工具链1.在MAKEFI ...

  2. linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx

    Linux内核移植步骤_添加DM9000网卡驱动(设备树) Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1.选平台,指定交叉编译工具链:(1).在Make ...

  3. u-boot-2014.10移植第18天----添加DM9000网卡支持(二)

    硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 修改代码 一不小心把这篇 ...

  4. S3C2440实现dm9000网卡驱动程序移植

    20150419 S3C2440实现dm9000网卡驱动程序移植 2015-04-19 Lover雪儿 首先附上厂家提供的完整的dm9000程序: 1 /* 2 3 dm9ks.c: Version ...

  5. 以太网卡驱动程序移植linux,基于S3C2440的DM9000网卡驱动的移植

    摘  要: 主要研究了基于Linux内核的网卡驱动的移植.Linux网络设备驱动程序的体系结构可以分为4层,首先分析了各层的具体功能实现,并在此基础上充分利用S3C2440开发板完成DM9000网卡驱 ...

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

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

  7. ok6410 u-boot-2012.04.01移植六完善MLC NAND支持

    继ok6410 u-boot-2012.04.01移植四.五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的n ...

  8. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A(对比原子和NXP官方测试板的网络芯片LAN8720A , KSZ8081 (也是飞凌)唯独复位引脚不同595芯片也涉及改动)

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

  9. 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通

    基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通 最近有个学生毕业设计需要实现基于ARM的DM9000网卡通信,但是linux2.6.30.4内核已经把DM9000网卡 ...

最新文章

  1. 还在使用Future轮询获取结果吗?CompletionService快来了解下。
  2. Labview串口通信
  3. JUST技术:管理海量空间数据的利器-空间填充曲线
  4. C++中查看数据类型的方法
  5. android 解决华为 SlidingMenu出现白屏
  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...
  7. python爬取百度文库_利用Python语言轻松爬取数据
  8. 保存时间 默认_操作技能|WORD文档没保存,有办法恢复吗?
  9. 5-10多分支网络结构
  10. Div+CSS教程----DivCSS布局绝对定位和浮动
  11. PaddleOCR问题汇总(1)
  12. 自然场景下文本检测主要数据集
  13. 编程基本功:找到问题的合理解释,才算解决问题
  14. 软件工程(敏捷过程和极限编程)
  15. 量化投资--技术篇(4) 投资组合策略
  16. 区块链项目_数字资产控股DAH_清算结算
  17. GreenHills基本操作:通过 R寄存器和上下文变量 定位异常
  18. #1163 : 博弈游戏·Nim游戏(数学博弈)
  19. 堆和栈的区别 之 数据结构和内存
  20. n719 rom 卡刷 android 4.3,三星 N719官方4.3纯净版ROM刷机(线刷)获取ROOT权限

热门文章

  1. layui多文件上传讲解_Laravel 使用 layui 文件上传组件批量上传图片
  2. 如何使用12tool二维码合成器将多张二维码图片生成一张动态GIF图?
  3. ddr3ddr4 lpddr4速率_lpddr3和ddr4的区别
  4. 制作浮雕效果等高线的原理与实践
  5. qnx学习笔记-QNX系统下载graphic镜像
  6. MySQL8.0解压版安装
  7. 一个https域名访问多种服务器
  8. JS模板引擎sychelTemplate
  9. STM32 USB无法枚举问题
  10. JAVA WEB课设心得——大学生毕业设计管理系统