移植4- uboot之网卡驱动移植

时间:2022-04-05 16:35:04
linux 中,网络分为许多层。网卡处理物理与DATA LINK层, linux驱动就是将DATALINK层的数据包送到TCP/IP层进行处理,主要是通过struct net_device这个结构。
struct net_device实现了支持不同的网络,802.3, 802.11, 802.15, SLIP等等网络。
所以linux网络驱动的作用就是对网卡进行配置,将data link数据包取出来,送到 tcp/ip 协议栈中去。
2014.10.8
2014.10.15原本以为kernel中有dm9000驱动代码,在uboot中,只要配置一下就能工作,但是仿佛不行!kernel的驱动框架与uboot的驱动框架一样吗?到底是什么关系呢?kernel中的驱动代码如何挖到uboot中使用? kernel中那些platform.probe之类的东西,在uboot下有吗?
搜索dm9000 uboot 移植的文章很多,参照着做
2014.10.26 uboot中driver与kernel driver有很大的不同,虽然有些取自kernel,但是还是需要改一改!
2014.10.26 参照网上的教程进行了配置,编译通过,没有调试,不明白srom controller为何能接ethernet, 不明白dm9000_data是干什么的?(index port 与 data port)
                        SROM控制控制SROM读写,包括sram等,ethernet的寄存器属于sram因此要配置SROM controller,否则能怎么读写外部sram呢?
2014.11.9 按照http://blog.csdn.net/liukun321/article/details/7315098进行移植,有点问题。crc err, rx length too big
2014.11.16 完全按照http://blog.csdn.net/liukun321/article/details/7315098, fifo err, rx length too big,好像是什么地方配置错误了,必须在仔细的看一些spec,本以为很好搞定的东西,却花费了许多时间,太弱了
DM9000_IO ,DM9000_DATA how set? DM9000A datasheet is sheet! please see DM9000A application notes!
cpu and DM9000A  through cmd,iow/ior, SD0-SD15
2014.11.17 去掉了网络检测,去掉了halt, 调节了时钟节拍,但是依旧不对,rx too length!
2014.11.20  看了uboot的net/net.c与dm9000.c的代码,没有发现有什么问题,那为何受到的数据长度太大呢?比mtu大了10倍,难道arp包没有发送? 回去分析一下
                     uboot ping 流程: 1. send arp packet 2. loop check arp-timeout and received packet

                     看看这篇文章,是否有所启发?http://www.embedu.org/Column/Column344.htm
                     根据linux kernel中的arch/arm/mach-s5pv210/dm9000_set来配置一下uboot,看能用否?
2014.11.22 根据板子带的kernel中ethernet的配置来配置uboot, 结果还是rx err, 难道tx有问题,还是借个hub来测试一下


pinmux的设置在哪里? 是否应该写到driver中去? 不应该写到driver中去,而应该写到arch/arm/mach-xxx/xxx.c文件中,这样每个人都可以看到,driver可以更加的通用
2014.11.24 DM9000 support auto-mdix 可以检测直连还是交叉连接
2014.11.24 使用交叉连接线,确认DM9000没有发送出去数据包,为什么呢?配置错了?但dm9000 tx没有报错呀?!
2014.12.07 使用uboot nand scrub后,将ok210自带的系统烧写进去,发现ethernet是好用的,看来还是我的uboot driver写的有问题,到底啥问题? 头疼

2015.2.22 我将SROM的io仔细的看了看,发现配置没有问题。看io就是看用到的接口是否复用,使用要进行设置。其他的寄存器也认真查看,发现没有问题,我将配置顺序修改了了一下,先配置SROM_BW, 再配置SROM_BC1,就好用了,好像是这个地方的问题。这个驱动高的时间太长了,好几个月了,汗颜


总结:要写驱动,一定要认真的读datasheet,一般soc的datasheet是保密的,即使有,也不是很详细,所以非芯片厂商写driver比较困难。

            还有就是设备的接口一定要将mux的仔细配置
相关代码已传至:http://download.csdn.net/detail/yazhouren/8454013