uboot移植之网络驱动移植--移植操作--7.29
来源:互联网 发布:垂直同步 知乎 编辑:程序博客网 时间:2024/05/18 00:14
1、网卡驱动文件介绍
uboot/drivers/net/dm9000x.c和dm9000x.h。
这个驱动来自于linux kernel源代码。所以我们uboot中是移植而不是编写。
2、网卡移植的关键:初始化
(1)网卡初始化代码地方在:
start_armboot
init_sequence
board_init
dm9000_pre_init这个函数就是移植的关键
(2)必须要结合开发板原理图来分析,然后决定这个函数怎么编程。
BW寄存器
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (1<<7)|(1<<6)|(1<<5)|(1<<4);
BC寄存器
SROM_BC1_REG =((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));
MP0_1CON寄存器
tmp = MP01CON_REG;
tmp &= ~(0XF<<4);
tmp |=(2<<4);
MP01CON_REG =tmp ;
(3)#define DM9000_16BIT_DATA这个宏用来表示DM9000工作在16位总线模式下。根据上节课的硬件原理图的分析,可以看到我们开发板上DM9000确实工作在16位模式下。
(4)从三星版本的代码中可以看出,它操作的是bit20-bit23,对照数据手册中寄存器定义,可以看出三星的开发板DM9000是接在Bank5上的。而我们接在bank1上的,因此我们需要操作的bit位是bit4-bit7
(5)总结:三个寄存器的修改。主要是三星的开发板DM9000接在bank5,我们接在了bank1上,因此要做一些修改。
3、基地址的配置等
(1)驱动分为2部分:代码和数据。代码不用动,数据要修改。
(2)CONFIG_DM9000_BASE是DM9000网卡通过SROM bank映射到SoC中地址空间中的地址。这个地址的值取决于硬件接到了哪个bank,这个bank的基地址是SoC自己定义好的。譬如我们这里接到了bank1上,bank1的基地址是0x88000000.
(3)DM9000_IO表示访问芯片IO的基地址,直接就是CONFIG_DM9000_BASE;DM9000_DATA表示我们访问数据时的基地址,因为DM9000芯片的CMD引脚接到了ADDR2,因此这里要+4(0b100,对应ADDR2)
(4)本来这样配置就完了,重新编译运行网卡就应该工作了。但是实际测试发现不工作,要怎么样修改呢?修改方式是将CONFIG_DM9000_BASE改成0x88000300就工作了。
问题?这个0x300从哪里来的?我得出的感觉最靠谱的解释是:跟DM9000网卡芯片型号版本有关,我认为这个0x300是DM9000网卡本身的问题,他本身的内部寄存器就有一个0x300的一个偏移量。
- uboot移植之网络驱动移植--移植操作--7.29
- uboot移植之网络驱动移植--移植理论知识--7.29
- 移植3- uboot之nandflash驱动移植
- 移植4- uboot之网卡驱动移植
- uboot移植之网络驱动移植--网卡驱动如何工作--7.30
- uboot norflash 驱动移植
- uboot移植spi驱动
- 移植6- uboot之sd/mmc驱动移植
- Uboot移植TQ2440之NOR驱动之一
- UBOOT 移植操作(1)
- UBOOT 移植操作(2)
- UBOOT 移植操作(3)
- UBOOT 移植操作(4)
- UBOOT 移植操作(1)
- UBOOT 移植操作(2)
- UBOOT 移植操作(3)
- UBOOT 移植操作(4)
- uboot移植--nor flash驱动移植
- servlet的一些基本原理。
- 求矩阵的最大和路径问题
- web框架学习前复习——html
- Maven2的配置文件settings.xml
- Java 堆内存和桟内存的详解
- uboot移植之网络驱动移植--移植操作--7.29
- 多项式求和 链表
- CentOS 7.0系统安装配置图文教程
- Android开发方向
- replace indexOf 正则表达式
- VS2013
- php在windows2008运行的问题
- CentOS 7.0 安装配置LAMP服务器方法(Apache+PHP+MariaDB)
- 304. Range Sum Query 2D - Immutable