【北京迅为】《iTOP-3588开发板nfstftp烧写手册》

news2024/11/20 20:25:57

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP,内置NPU,支持INT4/INT8/INT16/FP16混合运算能力,支持安卓12和、Debian11、Build root、Ubuntu20和22版本登系统。了解更多信息可点击迅为官网   

【粉丝群】824412014

【实验平台】:迅为RK3588开发板

【内容来源】《iTOP-3588开发板nfs&tftp烧写手册》

【全套资料及网盘获取方式】联系淘宝客服加入售后技术支持群内下载

【视频介绍】:【强者之芯】 新一代AIOT高端应用芯片 iTOP -3588人工智能工业AI主板


第1章 TFTP&NFS网络烧写

使用网络烧写的方式来进行调试是非常方便的,本章将介绍使用tftp在服务器下载Linux内核镜像和设备树,并使用NFS网络挂载根文件系统的方法。

文档中使用的开发环境:Ubuntu20.04 LTS

平台:迅为iTOP-3588开发板

此外,开发板和Ubuntu的IP.0要在同一网段,本文档Ubuntu的IP地址为192.168.1.19,开发板的IP地址设置为192.168.1.2,关于网络配置不再赘述。

手册以buildroot系统为例,如使用ubuntu系统,Debian系统,yocto系统等系统,也可以参考本手册。

1.1 安装TFTP服务端

首先在ubuntu 中执行以下命令安装 TFTP 服务:

apt-get install tftp-hpa tftpd-hpa

 

安装完成以后创建 TFTP 服务器工作目录,并对TFTP的服务配置文件进行修改,具体步骤如下:

输入以下命令在家目录创建tftpboot文件夹,如下图所示:

mkdir -p /home/topeet/tftpboot

然后输入以下命令修改tftpboot文件夹权限,如下图所示:

chmod 777 /home/topeet/tftpboot

最后修改配置文件,打开配置文件以后如下图所示:

vim /etc/default/tftpd-hpa

 

修改为如下内容:

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/topeet/tftpboot/"

TFTP_ADDRESS=":69"

TFTP_OPTIONS="-l-c-s"

修改完成如下图所示:

 

修改完成保存退出,在终端输入以下命令重启tftpd-hpa服务。

service tftpd-hpa restart

如下图所示:

 

 

1.2 安装NFS服务 

首先执行以下命令安装 NFS 服务:

apt-get install nfs-kernel-server

 

然后使用以下命令创建ubuntu20desktop文件并赋予其权限如下图所示:

mkdir ubuntu20desktop

chmod 777 ubuntu20desktop/

 

使用以下命令编辑/etc/exports 文件,并添加 NFS 服务的工作目录的路径:

vim /etc/exports

添加 NFS 目录:

以/home/topeet/ubuntu20desktop 为例,将其添加到/etc/exports 文件中, 如下所示:

/home/topeet/ubuntu20desktop *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

 

使用以下命令编辑/etc/exports 文件,并添加 NFS 服务的工作目录的路径:

vim /etc/exports

添加 NFS 目录:

以/home/topeet/ubuntu20desktop 为例,将其添加到/etc/exports 文件中, 如下所示:

/home/topeet/ubuntu20desktop *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

 

配置参数说明:

rw :读写访问

sync :所有数据在请求时写入共享

async :NFS在写入数据前可以相应请求

secure :NFS通过1024以下的安全TCP/IP端口发送

insecure :NFS通过1024以上的端口发送

wdelay :如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay :如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

no_hide 共享NFS目录的子目录

subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限

no_subtree_check 和上面相对,不检查父目录权限

all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。

no_all_squash 保留共享文件的UID和GID

root_squash root用户的所有请求映射成如anonymous用户一样的权限no_root_squas root用户具有根目录的完全管理访问权限

使用以下命令重启 NFS 服务:

service nfs-kernel-server restart

最后使用命令:“showmount -e ”查看nfs目录是否成功挂载(这里也可能要重启ubuntu才会又挂载目录),如下图所示:

 

至此,Ubuntu nfs 服务器端的配置完成。

1.3 配置开发板网络

连接好网线,上电启动开发板,在加载阶段点击“ctrl+c”进入uboot命令行,如下图所示:

 

然后来到ubuntu虚拟机终端,输入命令“ifconfig”来查看虚拟机ubuntu的ip,如下图所示: 

可以看到ubuntu虚拟机的ip地址为192.168.1.19,然后输入以下命令设置开发板的网络,设置完成如下图所示:

setenv ipaddr 192.168.1.2

setenv serverip 192.168.1.19

setenv gateway 192.168.1.1

 

然后输入以下命令测试开发板与ubuntu虚拟机之间的网络是否畅通,测试成功如下图所示:

 ping 192.168.1.19

 

如果环境变量不知道哪里设置错了,或者想要恢复成emmc启动,可以使用以下命令重置环境变量

env default -a

saveenv

注:若saveenv打印如下内容,需要进u-boot源码使用make menuconfig命令修改如下配置:

 

Environment --->

Select the location of the environment

(X) Environment in a block device

 修改完配置,使用以下命令覆盖默认配置文件,重新编译烧写uboot镜像。

cp .config configs/rk3588_defconfig

1.4 tftp加载内核和设备树

内核镜像boot.img和设备树镜像rk3588-evb7-lp4-v10-linux.dtb需要通过Linux源码编译获得,具体的源码编译步骤可以查看“【北京迅为】itop-3588开发板源码编译手册v1.0.pdf”文件。

内核源码编译完成之后将内核镜像boot.img和设备树文件rk3588-evb7-lp4-v10-linux.dtb拷贝到第一小节创建的“/home/topeet/tftpboot”目录下,拷贝完成如下图所示:

 

然后根据上一小节内容配置自身ip和server ip,设置完成之后,使用以下命令将内核和设备树通过网络加载进内存之中,如下图所示:

setenv bootcmd "tftpboot 0x08300000 rk3588-evb7-lp4-v10-linux.dtb;tftpboot 0x0027f800 boot.img ; bootm 0x0027f800 - 0x08300000"

 

通过以上命令将boot.img镜像下载到首地址为0x0027f800的内存空间;将rk3588-evb7-lp4-v10-linux.dtb设备树镜像将下载到首地址为0x08300000的内存空间;随后输入以下命令,等待网络下载内核和设备树,如下图所示:

env run bootcmd

 

系统启动完成如下图所示: 

注意,本小节内容只是对内核、设备树进行了加载,可以更便捷的进行内核和设备树的调试,而如果想要进行文件系统的网络调试可以进行下一小节内容的学习。

1.5 nfs挂载文件系统

要实现nfs挂载文件系统,进入内核源码目录使用make menuconfig命令进入内核配置界面进下如下配置,如下图所示:

[*] Networking support  --->

Networking options  --->

[*]   IP: kernel level autoconfiguration

[*]     IP: DHCP support

[*]     IP: BOOTP support

[*]     IP: RARP support

File systems  --->

[*] Network File Systems  --->

[*]   Root file system on NFS   

 

 

配置完使用以下命令覆盖默认配置文件,然后重新编译烧写内核。

cp .config arch/arm64/configs/rockchip_linux_defconfig

1.5.1 获取文件系统镜像

由于文件系统类型较多,为了统一,使用以下两种方法来进行文件系统镜像的获取。

1.Linux源码编译

第一种方法为通过Linux源码编译获得,具体的镜像编译步骤可以查看“【北京迅为】itop-3588开发板源码编译手册.pdf”手册。编译完成之后,来到源码目录下的rockdev文件夹,其中rootfs.ext4就是要烧写的文件系统镜像,如下图所示:

在第二小节中创建的nfs目录为“/home/topeet/ubuntu20desktop”,将rootfs.ext4文件拷贝到“/home/topeet”目录下,拷贝完成如下图所示: 

然后使用以下命令将文件系统挂载到ubuntu20desktop文件夹,如下图所示:

mount rootfs.ext4  ubuntu20desktop/

 

至此ubuntu虚拟机中的配置就完成了。

  1. update.img解包

为了方便,提供好的镜像为多个独立镜像整合在一起的update.img镜像文件,可以使用RKDevTool 工具来进行update.img的解包,获得rootfs.img文件系统镜像,可以通过“【北京迅为】itop-3588开发板快速烧写手册.pdf”手册中的4.4 小节“解包 update.img”来进行解包解包完成之后如下图所示:

 

在第二小节中创建的nfs目录为“/home/topeet/ubuntu20desktop”,将rootfs.img文件拷贝到“/home/topeet”目录下,拷贝完成如下图所示: 

然后使用以下命令讲文件系统挂载到ubuntu20desktop文件夹,如下图所示:

mount rootfs.img  ubuntu20desktop/

至此ubuntu虚拟机中的配置就完成了。

1.5.2 网络挂载

开发板最新的uboot镜像已经适配了网络功能,iTOP-3588开发板俩个网口都支持uboot网络,作者选择使用eth1。

Ubuntu虚拟机配置完成之后,回到开发板uboot终端,输入以下命令设置要挂载的文件系统,注意:标黄的部分是nfs挂载目录,要根据实际情况进行修改。

setenv bootargs "root=/dev/nfs root=/dev/nfs  nfsroot=${serverip}:/home/topeet/ubuntu20desktop,v3 rw  ip=${ipaddr}:${serverip}:${gateway}:255.255.255.0::eth1:off"

saveenv

 

最后输入以下命令进行文件系统的网络挂载,挂载成功如下图所示:

env run bootcmd

系统正常启动完成之后,如下图所示: 

至此nfs挂载文件系统章节就结束了。 

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

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

相关文章

力扣HOT100 - 4. 寻找两个正序数组的中位数

解题思路: 两个数组合并,然后根据奇偶返回中位数。 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m nums1.length;int n nums2.length;int[] nums new int[m n];if (m 0) {if (n % 2 0) return (nums2…

若依集成mybatis-plus 超详细教程(亲测可用)

文章目录 简介步骤第一步第二步第三步第四步第五步第六步 使用QueryWrapperservice层impl 实现接口类层Mapper层 简介 话不多说 直接跟着下面的教程操作,如果有报错私信我,或者通过博文下面的微信名片加我微信,免费解答哦! 步骤 …

代码随想录刷题随记31-贪心5

代码随想录刷题随记31-贪心5 435. 无重叠区间 leetcode链接 按照右边界排序,从左向右记录非交叉区间的个数。 此时问题就是要求非交叉区间的最大个数。 这里记录非交叉区间的个数还是有技巧的,如图: 左边界排序可不可以呢? 也是…

Unity数据持久化之XML

目录 数据持久化XML概述XML文件格式XML基本语法XML属性 C#读取存储XMLXML文件存放位置C#读取XML文件C#存储XML文件 实践小项目必备知识点XML序列化(不支持字典)XML反序列化IXmlSerializable接口让Dictionary支持序列化反序列化 数据持久化XML概述 什么是…

Docker入门指南:Docker镜像的使用(二)

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 在本章节中,将深入探讨 Docker 镜像的概念,以及如何使用镜像的一系列操作。 📖 正文 1 什么是镜像 1.1 Docker镜像的简…

cocos=》带你全面、系统的了解周期函数(含源码分析)

目录 简介 第一 初步了解周期函数 第二 进一步认识周期函数 一、结合节点树来了解一下周期函数 二、节点激活、脚本组件启用 三、node.parent、setParent、addChild 与 周期函数 四、addComponent 与周期函数 五、exectionOrder 与 周期函数 第三 从源码中 学习周期函…

科学碳目标(SBTI)认证是什么?

科学碳目标(SBTI)认证是一种基于科学的减排目标认证和监测体系,旨在确保企业和国家制定的减排目标符合科学标准,并且能够实现全球气候目标的减缓效应。这个认证体系由全球碳项目和世界资源研究所(WRI)共同开…

如何判断自己是不是强迫型人格障碍?

什么是强迫型人格障碍? 强迫型人格,也叫强迫固执型人格,当某些强迫型行为严重影响到正常的生活,工作和人际关系,且具有长期稳定的持续性特征,即是强迫型人格障碍。 这类思维和行为特征可以概括为&#x…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

【Anaconda】升级Anaconda Navigator提示JSONDecoderError,删除.condarc文件后搞定

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、报错&#xff1a;JSONDecoderError二、错误原因三、解决问题总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 时间长未升级Ana…

本地搭建springboot服务并实现公网远程调试本地接口

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2024/5/9 QTday4

完成定时器制作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);connect(&timer2, &QTimer::timeout, this, &Widget::label_begin);connect(&…

数据库(MySQL)—— 索引

数据库&#xff08;MySQL&#xff09;—— 索引 什么是索引创建索引使用 CREATE INDEX 语句使用 ALTER TABLE 语句在创建表时定义索引特殊类型索引注意事项 举个例子无索引的情况有索引的情况为什么索引快索引的结构 今天我们来看看MySQL中的索引&#xff1a; 什么是索引 MyS…

0509_IO4

练习1&#xff1a; 创建一对父子进程&#xff1a; 父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后&#xff0c;计算长方形的面积 1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 #include <sys/types.h>…

PyCharm安装详细教程

PyCharm安装详细教程 PyCharm简介及其下载网站 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment&#xff0c;集成开发环境)&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm提供了代码编辑、调试、语法高亮…

【BUUCTF】[RoarCTF 2019]Easy Java1

工具&#xff1a;hackbar发包&#xff0c;bp抓包。 解题步骤&#xff1a;【该网站有时候send不了数据&#xff0c;只能销毁靶机重试】 这里的登录界面是个天坑【迷魂弹】 直接点击help&#xff0c;然后进行打开hackbar——通过post请求&#xff0c;再通过bp抓包&#xff0c;…

DetCLIPv3:面向多功能生成开放词汇的目标检测

DetCLIPv3:面向多功能生成开放词汇的目标检测 摘要IntroductionRelated worksMethod DetCLIPv3: Towards Versatile Generative Open-vocabulary Object Detection 摘要 现有的开词汇目标检测器通常需要用户预设一组类别&#xff0c;这大大限制了它们的应用场景。在本文中&…

长难句打卡5.9

For example, the Long Now Foundation has as its flagship project a mechanical clock that is designed to still be marking time thousands of years hence. 例如,今日永存资金会将机械钟表视为旗舰项目,因此该钟表旨在为未来几千年保持计时。 Foundation n.基金会flag…

如何快速注册企业邮箱?只需要三步

快速注册一个企业邮箱&#xff0c;只需要以下三个步骤&#xff1a;一是挑选适合的邮箱版本和邮箱价格&#xff0c;二是填写必要的企业信息&#xff0c;三是完成企业邮箱的基础配置。完成上述三个步骤&#xff0c;企业就能够拥有一个专属的企业邮箱。 一、挑选适合的邮箱版本 …

jpg照片怎么压缩到10k?压缩照片并不难

jpg照片怎么压缩到10k&#xff1f;随着数字摄影的普及&#xff0c;我们手机或电脑中存储的照片数量越来越多&#xff0c;而这些高分辨率的照片往往会占用大量的存储空间。为了节省空间&#xff0c;将JPG照片压缩到较小的文件大小成为了许多人的需求。本文将为您介绍几款可以将J…