hi3516 nfs


原文链接: hi3516 nfs

hi3516dv300+imx385

setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.100.100:/Users/pytool/nfs/imx385/rootfs ip=192.168.100.10:192.168.100.100:192.168.100.1:255.255.255.0::eth0:off init=/linuxrc'

hisilicon # print
bootdelay=1
baudrate=115200
ethaddr="00:00:23:34:45:66"
netmask="255.255.255.0"
bootfile="uImage"
bootcmd=sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000
bootargs=mem=256M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)
ipaddr=192.168.3.11
serverip=192.168.3.10
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (May 26 2016 - 19:18:21)

Environment size: 433/262140 bytes
hisilicon # 

支持从NFS开发:

1、Linux主机添加Nfs目录
sudo vi /etc/exports 

    /home/book/nfs_root *(rw,sync,no_root_squash)
    /home/book/rootfs_glibc *(rw,sync,no_root_squash)

Macos NFS server
sudo vi /etc/exports

/Volumes/firefly -maproot=root -alldirs -rw     # /                                   Everyone

sudo nfsd restart
showmount -e

2、重启nfs
sudo /etc/init.d/nfs-kernel-server restart

3、实验自己挂接自己
sudo mount -t  nfs 192.168.3.106:/home/book/rootfs_glibc /mnt

ls  /mnt
sudo umount /mnt

挂载 NFS 文件系统的操作命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xx.xx.xx.xx:/your-nfs-path /mnt


支持从nfs启动文件系统

4、配置内核支持nfs启动
cd /home/book/Hi3531A_SDK_V1.0.3.0/osdrv/opensource/kernel/linux-3.10.y
sudo cp arch/arm/configs/hi3531a_full_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux-  menuconfig

修改配置 
Networking support–>Networking options 
–>[]IP: DHCP support 
–>[
]IP: BOOTP support 
–>[*]IP: RARP support

< CONFIG_IP_PNP_BOOTP=y
< CONFIG_IP_PNP_RARP=y

File systems  --->     
[] Network File Systems  ---> 
<
>   NFS client support                                                      
   <>     NFS client support for NFS version 2                                
   <
>     NFS client support for NFS version 3                                
   []       NFS client support for the NFSv3 ACL protocol extension           
   <
>     NFS client support for NFS version 4                                
   []     Provide swap over NFS support                                       
   [
]   NFS client support for NFSv4.1                                        
   (kernel.org) NFSv4.1 Implementation ID Domain                               
   []   Root file system on NFS             / 必须选上 */

make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux-  uImage

5、内核写入Flash
hisilicon# mw.b 0x42000000 ff 0x400000        /* 对内存初始化*/
hisilicon# tftp 42000000 uImage  从tftp下载内核到42000000

hisilicon# sf probe 0 /探测并初始化SPI flash/
hisilicon# sf erase 0x100000 0x400000 /擦除 1M大小/   
hisilicon# sf write 0x42000000 0x100000 0x400000 /从内存写入SPI NOR Flash/

6、设置uboot启动参数

bootargs=mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=hi_sfc:1024K(Uboot),3072K(kernel),28672K(rootfs)'

// 设置nfs启动参数 hi3516dv300+imx385
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.100.100:/Users/pytool/nfs/imx385/rootfs ip=192.168.100.11:192.168.100.100:192.168.100.1:255.255.255.0::eth0:off init=/linuxrc'
setenv bootargs 'mem=512M console=ttyAMA0,115200 root=/dev/nfs rw nfsroot=192.168.100.100:/Users/pytool/nfs/imx385/rootfs ip=192.168.100.11:192.168.100.100:192.168.100.1:255.255.255.0::eth0:off init=/linuxrc'

// 从spi flash 加载内核,并启动
sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000

8.nfs 远程挂在文件夹形式的根文件系统:
原bootargs为:(这是告诉内核如何从硬件设备中启动rootfs;或者怎么启动rootfs)
bootargs=mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)

原bootcmd为: (这是告诉uboot 怎么启动内核,从哪里/设备 中读取内核源码,进行启动)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000

因为我们只远程挂在根文件系统,所以,我们只需要修改bootargs 就可以。
修改后的bootargs为:(一下是设置命令)

setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.141:/work/rootfs_hi/rootfs_glibc ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttyAMA0,115200 mem=64M

注意:
  1. bootargs 一定要加上mem=64M。否则内核起不起来。(我猜想海思因为内存要做两用,所以他在内核启动前会校验是否设置的系统的内存分配。否则不启动)
  2. 因为内核启动需要知道内存是怎么被分配的,就是 系统运行需要多少,mpp视频处理需要多少。这里mem=64M,指的是系统运行需要多少。设置一个就行。因为这里是rootfs启动需要的,所以不需要设置mpp需要的内存。
  3. 为什么这里是64M,这是因为,这里要和mpp/ko/load3516cv500 文件中的os_mem_size的值一样,或者说只要这两个值一样就行,但因为load3516cv500中设置成了64M,我们懒的该,所以也使用64M.
    (而且这是海思分配的,人家考虑的是比较全面的。所以我们按照人家的来就行。)
    #DDR start:0x80000000, kernel start:0x80000000, OS(64M); MMZ start:0x84000000
    mem_total=256 # 256M, total mem
    mem_start=0x80000000 # phy mem start
    os_mem_size=64 # 64M, os mem
    mmz_start=0x84000000; # mmz start addr
    mmz_size=192M; # 192M, mmz size


setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.1.102:/home/felix/nfs ethmac=00:00:ff:ff:00:00 ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc'

其中关键是对ip参数的设置:

ip=<;client-ip>::::::::

bootargs中关于nfs的参数解释如下:
root=/dev/nfs rw nfsroot=192.168.1.102:/home/felix/nfs 表示挂载的 nfs 服务器 ip 是
192.168.1.102,挂载的目录是/home/felix/nfs(注意:/home/felix/nfs是前面搭建 nfs 服务器设置的);
ethmac=00:00:ff:ff:00:00表示网卡的地址是00:00:ff:ff:00:00,该地址在网卡驱动加载成功后会打印出来;
ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off中ip192.168.1.103是我们开发板的ip地址, ip192.168.1.102是nfs服务器的ip,ip192.168.1.1是开发板的网关,255.255.255.0 是子网掩码,eth0是网卡设备的名称。

对bootargs的设置可以放在设备树中或者u-boot中,并且u-boot的bootargs的优先级更高,会将设备树中的bootargs覆盖了。具体请参考内核文档:

    Documentation/kernel-parameters.txt
    Documentation/filesystems/nfs/nfsroot.txt

————————————————
版权声明:本文为CSDN博主「kuangdoushi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kuangdoushi/article/details/79952611

`