教你通过tftp及NFS加载kernel(含dtb)及rootfs,搭建便于嵌入式linux系统/驱动开发的远程调试环境
在/home/zoomlion/Desktop/tftp/路径下创建空文件test(touch /home/zoomlion/Desktop/tftp/test),接着通过在开发板执行tftp -g -r test 192.168.0.123从tftp服务器工作目录中获取名为test的文件,若在开发板控制台当前路径下查看到存在test文件,即可确认配置无误。顺利执行后虚拟机的/home/zooml
问题:
一般的软件开发,开发环境和运行环境是同一个,比如网页开发和网页访问都是在x86/windows环境下进行的。
而嵌入式linux开发则不同,由于嵌入式设备的软件开发环境和软件运行环境不是同一个,开发调试过程中需要多次将开发环境内的软件烧录至运行环境执行,累积起来是既耗时又费力的工作。
所以,我们有没有办法可以优化下呢?
解答:
回答是:肯定有的。
第一步 搭建tftp数据传输环境
1、将虚拟机网络连接设置成桥接模式。开发者一般是在主机为windows系统,虚拟机为linux系统的环境下工作(纯linux环境请忽略),需要打通虚拟机与外界的通信阻碍。如何做?
顺序点击“虚拟机”---“设置”,进入设置页面,
选中“网络适配器”,选择“桥接模式”并勾选“复制物理网络连接状态”后,点击“确定”保存并使能配置。
在这里给不知道“桥接模式”是啥的朋友解释下:桥接模式即Bridged,顾名思义是把虚拟机网络与主机网络通过“桥”搭在一起,实际上也确实是把虚拟机网络变成了一个“实实在在”的,和主机网络在同一个局域网的网络节点,能够像主机网络一样正常地进行网络通讯。记得要将虚拟机网络IP地址设成跟主机网络IP地址同网段!
通过在主机端ping虚拟机IP,或反过来在虚拟机端ping主机IP,可以验证这一步的操作是否实现了桥接。
主机IP:192.168.0.150
虚拟机IP:192.168.0.123
2、在ubuntu服务端安装xinetd、tftp-hpa、tftpd-hpa这3个服务并完成使用配置
sudo apt-get install xinetd
sudo apt-get install tftp-hpa
sudo apt-get install tftpd-hpa
然后编辑/etc/default/tftpd-hpa
图中TFTP_DIRECTORY所指内容即为tftp服务器的工作目录,将默认值/srv/tftp修改为自设路径,假设为/home/zoomlion/Desktop/tftp
再编辑/etc/xinetd.d/tftp
完成上述编辑后,重启服务后设置生效
sudo service tftp-hpa restart
sudo service tftpd-hpa restart
sudo service xinetd restart
如何验证以上配置准确无误?
在/home/zoomlion/Desktop/tftp/路径下创建空文件test(touch /home/zoomlion/Desktop/tftp/test),接着通过在开发板执行tftp -g -r test 192.168.0.123从tftp服务器工作目录中获取名为test的文件,若在开发板控制台当前路径下查看到存在test文件,即可确认配置无误。
第二步 搭建NFS开发环境
1、在虚拟机安装NFS服务包
sudo apt-get install nfs-kernel-server
2、配置NFS服务
sudo vi /etc/exports
3、修改完后重启NFS服务
sudo /etc/init.d/nfs-kernel-server restart
4、验证以上配置
showmount -e
接着在开发板上执行命令:
mkdir /nfs(创建测试用临时文件夹)
mount -t nfs -o nolock,nfsvers=3 192.168.0.123:/home/zoomlion/Desktop/nfs /nfs
顺利执行后虚拟机的/home/zoomlion/Desktop/nfs和开发板的/nfs就实现了实时共享
若开发板内核自身不带NFS客户端功能,会报错:mount: mounting 192.168.0.123:/home/zoomlion/Desktop/nfs on /nfs failed: No such device
要给内核加上NFS客户端功能也很简单,在menuconfig图形化配置界面里勾选这几个选项后编译即可完成
第三步 部署系统文件
将内核文件zImage和设备树文件dtb置于tftp服务器工作目录下
将根文件系统拷贝至NFS服务器工作目录下
第四步 在uboot控制台状态下加载NFS系统
1、在uboot控制台下配置环境变量:
setenv ipaddr 192.168.0.50
setenv netmask 255.255.255.0
setenv serverip 192.168.0.123
2、验证网络通路是否正常
ping 192.168.0.123
3、配置bootcmd(bootcmd保存着uboot默认命令,uboot倒计时结束以后就会执行bootcmd中的命令)
setenv bootcmd 'tftp 0x02007800 zImage;tftp 0x08300000 rv1126-evb-ddr3-v13.dtb;bootz 0x02007800 - 08300000'
4、配置bootargs(bootargs保存着uboot传递给Linux内核的参数)
setenv bootargs "root=/dev/nfs nfsroot=192.168.0.123:/home/zoomlion/Desktop/rv1126_sdk_20240531/rv1126_v3.0.0/buildroot/output/target,v3,proto=tcp rw ip=192.168.0.50:192.168.0.123:192.168.0.1:255.255.255.0::eth0:off"
5、执行boot即启动内核及根文件系统的加载
结束语:
经由以上步骤,便完成了远程调试环境的搭建,我们就能将编出来的kernel、dtb、rootfs快速地部署到板子上进行验证调试,进一步提升开发效率~~~
本文完毕,有意见请指出,谢谢。
更多推荐
所有评论(0)