Uboot相关问题总结
开发板
底板:MYB-SAMA5D3X
核心板:SAMA5D36
U-BOOT配置相关
0 开发环境基本情况说明
0.1开发环境
系统:PC端为win10,在win10下安装virtualBox,virtaulBox里安装ubuntu16.04
主机与虚拟机网络情况如下图:
其中win10 ip:192.168.137.1
Ubuntu ip:192.168.137.72
0.2开发板情况
开发板底板:MYB-SAMA5D3X
主板:SAMA5D36
1 Uboot ping不通问题
情况说明:
主机PC
ip:192.168.137.1 netmask:255.255.255.0
烧写完uboot直接ping 192.168.137.1不通
1.1解决方法:
1.1.1 设置ethaddr
U-Boot>setenv ethaddr 12:34:56?cd:ef
1.1.2 设置ip
U-Boot>setenv ipaddr 192.168.137.3
此时如果直接ping 192.168.137.1会显示:
host 192.168.137.1 is alive,说明配置成功,PC ping仍ping不通。
1.1.3 设置serverip
U-Boot>setenv serverip 192.168.137.72
(注意因为在使用tftp中开发板是与ubuntu通信,从ubuntu中下载文件,因此这里设置serverip为192.168.137.72,而不因该是192.168.137.1,此处要特别注意)
1.1.4设置autostart
U-Boot>setenv autostart no
1.1.5 保存设置
U-Boot>saveenv
然后按reset重启开发板,此时再次ping 192.168.137.1 显示内容:host 192.168.137.1
is alive
然后PC去ping 192.168.137.3,仍然ping不通。
1.1.6 运行tftp
U-Boot>tftp
此时主机再ping 192.168.137.3发现可以ping通。
2 tftp设置
2.1 开发板tftp客户端设置
注意要设置setenv serverip 192.168.137.72
2.2 ubuntu tftp服务器端设置
接下来,就是要在开发环境上安装TFTP服务器,使开发板可以通过TFTP协议下载的uImage这个文件。在ubuntu下,可以通过下面的命令安装TFTP服务器,这个服务是通过inet监听的。
sudo apt-get install atftpd openbsd-inetd
安装完以后,需要配置一下TFTP的默认查找目录,我将其设定为/srv/tftp。确认/etc/inetd.conf文件中有如下一行:
#:BOOT:TFTP服务主要用于启动。大多数网站 #仅在充当“启动服务器”的计算机上运行。 tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp |
---|
因为TFTP服务主要是给UBOOT提供内核镜像文件,为了避免每次内核编译完以后都拷贝到/srv/tftp目录中,在/srv/tftp目录中,建立了一个符号文件,指向/opt/linux/Linux-at91/linux-at91/arch/arm/boot/uImage。
ln -s /opt/linux/Linux-at91/linux-at91/arch/arm/boot/uImage /srv/tftp/uImage
可以通过下面的命令重启inetd,保证这个supper服务器能够监听TFTP端口:
sudo service openbsd-inetd restart
可以通过查看端口确认inetd是否真的在监听TFTP端口:
root@ep-VirtualBox:~#netstat -a |grep tftp
udp 0 0 *:tftp *?
可以通过下面的命令测试一下TFTP服务是否正常工作:
root@ep-VirtualBox:~# tftp localhost
tftp>get uImage
在0.3秒内收到3578106字节。
3 编译内核,设置其可以通过NFS挂载根文件系统
对于sama5d3xek开发板提供的内核源码,解压后直接运行:
#./make_image.sh linux-512mb
对于通用的内核源码,解压后直接:
make menuconfig
关于NFS挂在有关的选项如下:
- Networking support->Networking options->IP:kernel level autoconfiguration
注意,这个选项下面的 IP:DHCP support / IP:BOOTP support / IP:RARP aupport
不能选。因为我的开发环境中没有安装 DHCP server。开发板的 IP
是在内核启动参数中指定的。
- File systems -> Network File System -> NFS client support
File systems -> Network File System -> NFS client support for NFS version 3
File systems -> Network File System ->Root file system on NFS
4 设置nfs服务器
接下来是配置NFS服务器,用于开发板上内核启动以后挂载开发环境的ROOTFS。通过下面的命令安装nfs服务器:
sudo apt-get install nfs-kernel-server
安装完成以后,还需要修改/etc/exports文件,设置NFS共享的文件目录。我们需要将/opt/rootfs设置为NFS共享目录。
# Example for NFSv2 and NFSv3:
#/srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#Example for NFSv4:
#/srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
#/srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
/opt/rootfs 192.168.137.3(rw,no_root_squash,no_subtree_check)
注:192.168.137.3为开发板的ip。如果此处设置为了开发板ip,下面本机测试时将挂在deny。要想本机挂载测试成功可将ip改为*
每一次修改/etc/exports这个文件,都需要重新启动NFS服务器