IMX6-UBOOT-从网络启动内核与文件系统

随着前面qt环境搭建完毕,开始有空搭建TFTP&NFS启动。
系统:ubuntu14 LTS
VM设置:网卡设置为桥接模式,复制物理网络连接状态


IMX6-UBOOT-从网络启动内核与文件系统_第1张图片
网卡设置

在ubuntu的系统设置-网络-选项-IPV4设置里配置固定IP


IMX6-UBOOT-从网络启动内核与文件系统_第2张图片
ubuntu网卡设置

IMX6-UBOOT-从网络启动内核与文件系统_第3张图片
配置固定IP

从上图配置可以看出,我设置了固定IP方便以后调试用,IP是192.168.1.235,这个IP从开发板的角度看就是server ip。
TFTP:主要用于从服务器下载内核和设备树
在ubuntu安装tftp服务
sudo apt-get install tftp-hpa tftpd-hpa
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
sudo vi /etc/default/tftpd-hpa
/*
 # /etc/default/tftpd-hpa
 TFTP_USERNAME="tftp"
 TFTP_DIRECTORY="/tftpboot" # 这里是你的tftpd-hpa的服务目录,这个想建立在哪里都行
 TFTP_ADDRESS="0.0.0.0:69"
 TFTP_OPTIONS="-l -c -s" #这里是选项,-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录,上面已经指定
*/
sudo /etc/init.d/tftpd-hpa restart//关机后需再重新开启
//记得把编译好的uImage和dtb放入tftp的目录下
IMX6-UBOOT-从网络启动内核与文件系统_第4张图片
tftp配置

IMX6-UBOOT-从网络启动内核与文件系统_第5张图片
把编译好的uImage和dtb放入tftp的目录下

NFS:主要用于挂载文件系统(如果你喜欢,内核和设备树也可以用nfs的语法挂载,请自行研究,这里不做扩展)
在ubuntu安装nfs服务

sudo apt-get install nfs-kernel-server
sudo mkdir /nfsdir//新建一个nfs目录在根目录下
sudo chmod 777 -R /nfsdir
cd rootfs//进入你的文件系统目录
sudo cp -a * /nfsdir  //把文件系统拷贝到nfs的目录下
sudo vi /etc/exports//打开配置文件
将下面这句话追加在exports文件末尾
/nfsdir *(rw,sync,no_root_squash,no_subtree_check)
/*
  *:允许所有的网段访问,也可以使用具体的IP
   rw:挂接此目录的客户端对该共享目录具有读写权限
  sync:资料同步写入内存和硬盘
  no_root_squash:root用户具有对根目录的完全管理访问权限。
  no_subtree_check:不检查父目录的权限。
*/
sudo /etc/init.d/nfs-kernel-server restart//重启服务
sudo mount -t nfs 192.168.1.235:/nfsdir /mnt  //测试挂载文件系统
sudo umount /mnt //卸载文件系统
IMX6-UBOOT-从网络启动内核与文件系统_第6张图片
配置文件

配置开发板的u-boot
说实话,这里浪费了我很多时间,网上的参数一大堆还牵扯了一大堆变量,最后整理如下:

开机按任意键,进入uboot环境(这里我修改为生产环境的内网IP)
>setenv bootargs 'noinitrd console=ttymxc0,115200 root=/dev/nfs ip=11.107.51.112:11.107.51.110:11.107.51.1:255.255.255.0:imx6q:eth0:off nfsroot=11.107.51.110:/nfsdir rootwait rw consoleblank=0 init=/sbin/init'
/*
root=/dev/nfs  这里指定开发板内核开启后的nfs设备文件(/dev/)所在路径,注意不要要萌萌哒写上你服务器的nfs文件路径(不是/nfsdir)!

ip=11.107.51.112:11.107.51.110:11.107.51.1:255.255.255.0:imx6q:eth0:off  
        ip=ip-addr:server-ip-addr:gateway:netmask:device-name:which netcard:off
        ip-addr(开发板IP地址)、server-ip-addr(nfs服务器IP)、gateway(网关)、netmask(子网掩码)、device-name(设备名)、which netcard(开发板上的哪个网卡设备)、off(网络模式,设置为off就行)

nfsroot=11.107.51.110:/nfsdir    //这里设置nfs的IP和路径,中间用冒号隔开,通过此参数去挂载nfs设备(就是前面的/dev/nfs设备)
其他参数请查看前面的编译uboot的文章。
*/
>setenv nfsload  'tftp 11ffffc0 uImage;tftp 18000000 imx6q-krt.dtb'
/*这个nfsload变量是下面的bootcmd中使用run命令引用的,他负责吧内核和设备树文件用tftp拷贝到内存指定的位置。0x11ffffc0是内核要拷贝在内存中的位置,0x18000000是设备树要拷贝在内存中的位置,请查询芯片手册。*/
>setenv bootcmd 'run nfsload;  bootm 0x11ffffc0 - 0x18000000'
/*bootcmd是uboot运行结束后要执行的命令,也就是说他执行了两条命令。
run nfsload;//运行 nfsload这个变量所存的质量
 bootm 0x11ffffc0 - 0x18000000;//运行内核和设备树,后面的地址是文件在内存中的位置*/
>setenv serverip 11.107.51.110;setenv gatewayip 11.107.51.1;setenv netmask 255.255.255.0;setenv ethaddr 08:00:00:00:22:02;setenv ipaddr 11.107.51.112;
>saveenv//保存环境变量
>reset//重启开发板




----------------------------------下面是开机后进入uboot打印出的环境变量内容

CPU:   Extended Commercial temperature grade (-20C to 105C) at 32C
Reset cause: POR
Board: MX6-SabreSD
I2C:   ready
DRAM:  2 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024x768)
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC [PRIME]
Normal Boot
Hit any key to stop autoboot:  0
=> printenv bootargs
bootargs=noinitrd console=ttymxc0,115200 root=/dev/nfs ip=192.168.1.230:192.168.1.235:192.168.1.1:255.255.255.0:imx6q:eth0:off nfsroot=192.168.1.235:/nfsdir rootwait rw consoleblank=0 init=/sbin/init
=> printenv bootcmd
bootcmd=run nfsload;  bootm 0x11ffffc0 - 0x18000000
=> printenv nfsload
nfsload=tftp 11ffffc0 uImage;tftp 18000000 imx6q-krt.dtb
=>
IMX6-UBOOT-从网络启动内核与文件系统_第7张图片
打印出来的U-BOOT参数

IMX6-UBOOT-从网络启动内核与文件系统_第8张图片
####代表从网络加载内核中
IMX6-UBOOT-从网络启动内核与文件系统_第9张图片
在服务器端新建一个测试文件

IMX6-UBOOT-从网络启动内核与文件系统_第10张图片
开发板立马就能看见了

有些人会遇到wrong image format for bootm command
error: can't get kernel image!的错误
注意要使用uImage,而不是zImage ,两者差着一个表头的格式。因为我之前单独编译过内核,如下链接,可以使用bootm启动,若使用zImage,请使用go命令替换bootm。
https://www.jianshu.com/p/f1233447e3e9

你可能感兴趣的:(IMX6-UBOOT-从网络启动内核与文件系统)