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
注意:
- bootargs 一定要加上mem=64M。否则内核起不起来。(我猜想海思因为内存要做两用,所以他在内核启动前会校验是否设置的系统的内存分配。否则不启动)
- 因为内核启动需要知道内存是怎么被分配的,就是 系统运行需要多少,mpp视频处理需要多少。这里mem=64M,指的是系统运行需要多少。设置一个就行。因为这里是rootfs启动需要的,所以不需要设置mpp需要的内存。
- 为什么这里是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的参数解释如下: 对bootargs的设置可以放在设备树中或者u-boot中,并且u-boot的bootargs的优先级更高,会将设备树中的bootargs覆盖了。具体请参考内核文档: ————————————————
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是网卡设备的名称。 Documentation/kernel-parameters.txt
Documentation/filesystems/nfs/nfsroot.txt
版权声明:本文为CSDN博主「kuangdoushi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kuangdoushi/article/details/79952611