x210-2023-03-23

发布时间 2023-03-23 12:44:20作者: migui

1、前面移植mmc驱动因为有网络文章作为提示和参考,应该要配置哪些宏已经简单粗暴地告知你了,但是你怎么知道哪些宏必须配哪些可以不配(或者说要配置的宏你应该从哪找),这个问题在本次移植DM9000驱动时特别留意了一下,发现最重要的还是要知道从根抓起,也就是从board_init_r()开始找到MMC找到NET的初始化入口函数,然后顺藤摸瓜已经能找到一部分宏了,再就是源文件被编译进uboot时会需要一个关键宏(像这次DM9000,由于Makefile需要编译dm9000x.o所以要定义CONFIG_DRIVER_DM9000这个宏),除了这些,预初始化函数和初始化函数的调用和书写需要学着模仿uboot源码其它板子的,因为DM9000驱动虽然uboot提供了,但是在uboot-2012.10的s5p_goni中没有调用过,不过在比较接近S5PV210的smdkc100.c中,它是在board_init()中放的预初始化函数,而初始化函数是在smdkc100.c文件末尾的board_eth_init()中调用的,可是在S5PV210的goni.c中根本就没有board_eth_init()这个函数(因为从如果有从NET初始化入口分析过来就会知道这个board_eth_init()是weak定义的),鉴于s5p_goni还没调用过DM9000,所以就需要自己重新定义该函数,那么应该写成什么样、写完放哪都需要考虑(所以说要模仿),写的对不对以及整个函数放的位置对不对,自己编译一遍烧到板子看有没有出来现象就知道对不对了。

第一次尝试ping的时候,由于着急看效果,但是完全没注意serverip其实是没设置过的,所以会ping不通,因为在配置文件的宏中只添加了默认都会需要用的IP、子网掩码和网关,MAC地址都是执行ping测试时系统提示没设置才补的,调试ping的时候没留意看开发板网口灯亮没亮(因为桌子小而且为了插拔卡方便所以把开发板的SD卡接口这边朝向了自己,而网口刚好在另一侧所以刚好不方便观察,但是开发板网口灯只会在执行ping过程中闪烁,闪烁的时间比较短暂,前期ping不通的时候忙着往别的原因排查但其实忘了这里原本就有一个很好的排查现象)。

在这次过程中,其实折腾的时间相对多的是id读不到 (一直为0x00000000),ERROR: resetting DM9000 -> not responding的这个现象,这个现象网上也有说过解决办法,那就是修改时钟配置的SROMC配置,但当时改了烧进去现象没变(按说改完这里应该就可以的了),然后再想是不是漏宏了,改了一下把IP、子网掩码和网关宏加了、BANK1的宏没漏、要禁用EEPROM的宏业没漏,然后烧进去现象还是没变化,然后看到网上文章提示说要留意网口灯,所以这时专门留意了一下,发现网口灯会闪,所以ping命令能执行,那就应该不是移植不全的问题,再下来,从入口函数开始细查,看到dm9000_reset()函数开头第一句有一个DM9000_DEBUG()宏,而且这时刚好看到别的文章提示可以开打印信息,所以尝试了一下开启打印宏,烧进去结果发现现象还是没变,这时已经能发觉问题所在了,打印信息应该变多的,但是现象还是原来的现象,说明什么,说明烧的uboot不是最新的改完的那份,所以往前翻uboot的时间打印信息,发现是同一份(因为打印指向的都是同一个时间),这时想起来可能和直接拔插SD读卡器,ubuntu中没有识别到卡已经拔走了,于是ls /dev/sd*打印了一下,sdb分区竟然还保留着,明明现在都没插着卡,所以每次烧录都烧进去那个旧的挂载点了。

另外就是因为开发板端没有将ICMP的echo做到uboot中去,所以无论是PC还是ubuntu,在这一侧都是无法ping到开发板的,由于这个内容是在开发环境搭建时提及的,但是等这个时候真正试验起来已经有点想不起来了,所以当时还在疑惑为什么ping不到,然后就陷入了找答案的漩涡中;其实最后面查找原因的过程中发现,如果要看互相ping通其实也还是有办法的,就是在PC/ubuntu上准备ping开发板ip的命令(其实主要是ubuntu上会比较明显,因为ubuntu),然后点击发送,再在开发板串口终端这边发送ping命令去ping正在下发ping命令的PC(或者ubuntu),因为开发板ping主机是能通的,在通的这个短暂瞬间(也就是网口灯闪烁的这几秒)开发板tftp端口开放,等ping命令执行完开发板端tftp端口再次关闭,所以就能看到有互相ping通的过程。

2、由于开发板和笔记本PC的连接中间是用的USB转RJ45(绿联的AX8872C),但是这个USB转网口有个问题是,插上以后能自动装驱动,但是开发板插上网线连到它之后,它的USB再插入PC,会显示网络电缆被拔出(无论开发板是否上电),不仅是这款,以前用的一个USB转网口线也是这个现象,所以才买的现在这个绿联USB转网口就是为了排除这个问题,但是至少经过现在使用验证,其实还没有太多影响(不过还是要设置好桥接并且USB转网口这个转接线的网卡要和开发板在同一个网段下),其实一开始看到这个本地连接上显示的红叉,会自然而然地觉得可能用不了于是想着找找是什么问题导致或者有办法解决的没有,但可惜的是,并没有看到比较有效的答案,另一个原因是,虚拟机那边添加网络适配器,一般来说会通过“自定义(U):特定网络”这个下拉选项选择已经桥接的网卡,此时桥接的网卡旁边会有()注明是桥接的,但是实际却并没有,所以也在怀疑是不是这个USB转网口的红叉带来的影响。

另外就是测试tftp,因为ping只能通过开发板端向PC/ubuntu去ping,并且已经ping通,但是由于相反过程无法看到现象,所以一开始tftp测试时遇到无法下载也是没什么办法,后面查看网上文章提示到要关闭防火墙,因为服务端tftpd64是在windows上(而网卡方面能够选择作为载体的除了本身的无线网卡,但是不能选,因为是自动获取的,和USB转网口的网卡1.7、开发板1.130根本就不在同一个网段,所以就只能选USB转网口的这个网卡作为tftpd64服务端),所以尝试把PC的域网络、专用网络、公用网络防火墙全部关闭,再进行测试发现能够下载成功了。