Hi3519AV100 uboot下网络正常 kernel下无网络的问题及解决

172 阅读3分钟

本文已参与 [新人创作礼] 活动,一起开启掘金创作之路。​

项目中硬件为Hi3519AV100,SDK为Hi3556AV100_MobileCam_SDK_V2.0.1.1。按照《HiMobileCam SDK安装使用说明》的指导一步步进行配置、编译,之后将编译出来的各个分区镜像通过HiTool中的Hiburn工具进行烧录,如下图所示:

烧录是通过网口进行烧录的,也就是先通过串口烧录uboot,之后再在uboot下通过网口烧录其他镜像。这一步是完全没有问题的,都能够成功烧录,之后通过串口调试,能够看到系统已经跑起来了,如下图所示:

但问题出来了,在串口终端下运行ifconfig -a命令,只会显示本地回环设备lo,而没有eth0。这是为什么?uboot中可以通过网口进行烧录,也就意味着硬件连接是正确的,uboot中的网卡设备也是好的,那为什么到了kernel下不能被识别出来?

尝试了各种方法:1.参考网上的帖子,修改dts和dtsi;2.参考网上的帖子,内核设备驱动加入Realtek网卡的支持;3.自行研读网络mdio和phy部分源码,尝试根据终端提示发现其中的错误。但是均无功而返,每次都是满怀希望,觉得这次终于找到了原因,但每次修改之后问题都还在那里。

与供应商联系,他们提供了在他们那里运行正常的镜像。在我们的板子上烧录后,也可以正常出现eth0,并且工作也是正常的。根据他们的建议,将kernel替换为我们自己的,看看是否仍然能找到eth0,如果仍然可以,则说明不是kernel的问题;如果不能找到,则说明就是kernel的问题。结果发现替换kernel后仍然能够跑起来,那么看来不是kernel的问题。

再次尝试将uboot也替换为我们自己的,看看是否仍然能正常出现eth0,结果eth0依旧正常出现。

就这个现象与供应商进行沟通,他们给的建议是,全部镜像都用我们自己的,只是在uboot中通过bootm直接加载的方式启动kernel,而绕过那些liteos相关的分区,试一下,如果可以正常找到eth0,则就是liteos端把eth0关了。按照他们的方法尝试,果然如他们的设想,当直接启动kernel(tftp 42160000 uImage; bootm 42160000),而非在uboot中通过启动参数启动时(setenv bootargs 'mem=128M quiet console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p7 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),1M(rawparam),1M(rawparambak),8M(media_app.bin),1M(resImage),5M(uImage),15M(rootfs.ext4),32M(appfs.ext4),-(storage)'; setenv bootcmd 'mmc read 0 0x24f00000 5800 800;mmc read 0 0x27000000 800 800;mmc read 0 0x27100000 1000 800;cread 0x27000000 0x27100000 0x10000 0x24e00000;mmc read 0 0x22000000 1800 4000;go_a53cpu1 0x22000000;mmc read 0 0x27000000 6000 2800;bootm 0x27000000'),是能够正常出现eth0的。这样看来,就是liteos的这几个分区影响了eth0的正常出现和使用。