1.配置tftp服务器
在网上找一个:
2.按照HI3519V101的SDK安装以及升级使用说明来操作
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,空间就没了,因此烧录文件系统时候会提示空间不足。
果然如此!那么怎么办呢?我们的方法有三种:
下面我们主要讨论使用网络加载内核和文件系统:
我们的目标: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