问题:

一般的软件开发,开发环境和运行环境是同一个,比如网页开发和网页访问都是在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快速地部署到板子上进行验证调试,进一步提升开发效率~~~

本文完毕,有意见请指出,谢谢。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐