3519V101的kernel的RTL8201百兆网卡配置以及tftp、nfs

1.配置tftp服务器

在网上找一个:

2.按照HI3519V101SDK安装以及升级使用说明来操作

1)、配置tftp服务器

    # 可以使用任意的tftp服务器,并将package/image_uclibc_xxx(或image_glibc_xxx)下的相关文件拷贝到tftp服务器目录下。

2)、参数配置

    # 单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。

    setenv serverip xx.xx.xx.xx

    setenv ipaddr xx.xx.xx.xx

    setenv ethaddr xx:xx:xx:xx:xx:xx

    setenv netmask xx.xx.xx.xx

    setenv gatewayip xx.xx.xx.xx

    ping serverip,确保网络畅通。

3)、烧写映像文件到SPI Flash

    以16M SPI Flash为例。

    (1)地址空间说明

        |      1M       |      3M       |      12M      |

        |---------------|---------------|---------------|

        |     boot      |     kernel    |     rootfs    |

        以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。

   (2)烧写u-boot

        mw.b 82000000 ff 100000

        tftp 0x82000000 u-boot-hi3519.bin

        sf probe 0

        sf erase 0 100000

        sf write 82000000 0 100000  

        reset

请注意,reset之后需要重新设置网络参数。

   (3)烧写内核

        mw.b 82000000 ff 300000

        tftp 82000000 uImage_hi3519

        sf probe 0

        sf erase 100000 300000

        sf write 82000000 100000 300000

   (4)烧写文件系统

        mw.b 82000000 ff C00000

        tftp 0x82000000 rootfs_hi3519_64k.jffs2

        sf probe 0

        sf erase 400000 C00000

        sf write 82000000 400000 C00000

    (5)设置启动参数(注意linux-3.18.y kernel默认文件系统只读,需要在bootargs中加入rw选项,文件系统才可读写)

        setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'

        setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'

 sa

问题来了!我们使用的spi flash的大小是4MB的,按照上述的空间分布,我们烧录到kernel,空间就没了,因此烧录文件系统时候会提示空间不足。

果然如此!那么怎么办呢?我们的方法有三种:

  1. 增大spi flash至16MB,轻松解决!
  2. 通过pcie加载kernel和文件系统,需要主控,我没搞过,不会!
  3. 通过网络加载kernel和文件系统,也就是tftp和nfs

下面我们主要讨论使用网络加载内核和文件系统:

我们的目标:tftp:kernel

                   nfs:rootfs

参数的设置:

1)set bootm ‘tftp 0x82000000 uImage;bootm 0x82000000’

2)set bootargs 'noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsroot=192.168.1.103:/tftpboot/rootfs/ ip=192.168.1.105:192.168.1.103:192.168.1.1:255.255.255.0::eth0:off console=ttyAMA0,115200'

但是我搞了很久没有搞定,老是打印连不上网!

同时被误导了一些东西,具体就不说了。实在没办法,我把spi flash换成了16MB。(其实是网络不通)

按照SDK安装以及升级使用说明来操作都是没问题的

但ping网络的时候,是ping不通的,这时才发现内核的网络没有调好!!!!

3.3519v101的百兆网卡RMII配置

因为对设备树不是很熟悉,一直在make menuconfig里面尝试,同时参考网上的资料:

http://www.doc88.com/p-7048640315926.html,这个资料第一个时钟配置是错的!

下面就是总结起来的操作,包括对设备树和menuconfig的修改:

1)cd ~/sambashare/hisilicon/hi3519v101/hi3519v101/osdrv/opensource/kernel/linux-3.18.y/arch/arm/boot/dts/

将这四个文件中的两个.dts文件中的rgmii改成rmii:

此时我又试了很久还是不通,最后请教大神,被一眼看出来了原因!

2)内核网络驱动的时钟修改

我们看下用户指南的数据手册

 

我们看到7对应的是0111,bit 3是0,关闭时钟的!!!!且bit2 是在复位,并未撤销复位!!!

因此需要对此寄存器进行修改!我们改成0xa。

此时我们看到网络通了!!!!

下面就可以干我们想做的事情了!

4.nfs挂载根文件系统

首先对内核进行配置!

Networking中选中[*] IP: kernel level autoconfiguration)

    File systems  --->

        Network File Systems  --->

            <*> NFS file system support                        ## 必选

                [*]   Provide NFSv3 client support             ## 可选

            [*] Root file system on NFS                        ## 必选

    Networking  --->

        [*] Networking support

            Networking options  --->

                [*]   IP: kernel level autoconfiguration       ## 必选

 

***************************************************************************

Device Drivers

Network device support

PHY Device support and infrastructure

Drivers for Realtek PHYs

也可能下面这个不用改,懒得试了!

 然后编译内核,加载uImage! 启动uboot然后设置参数,是成功的!

参数设置:

set bootargs 'noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsroot=192.168.1.100:/tftpboot/rootfs/ ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off console=ttyAMA0,115200'

挂载成功!

5.非根文件系统的nfs挂载!

mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.1.100:/tftpboot/rootfs /mnt