[嵌入式AI从0开始到入土]15_orangepi_aipro欢迎界面、ATC bug修复、镜像导出备份

[嵌入式AI从0开始到入土]嵌入式AI系列教程

注:等我摸完鱼再把链接补上
可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。

第1期 昇腾Altas 200 DK上手
第2期 下载昇腾案例并运行
第3期 官方模型适配工具使用
第4期 炼丹炉的搭建(基于Ubuntu23.04 Desktop)
第5期 炼丹炉的搭建(基于wsl2_Ubuntu22.04)
第6期 Ubuntu远程桌面配置
第7期 下载yolo源码及样例运行验证
第8期 在线Gpu环境训练(基于启智ai协作平台)
第9期 转化为昇腾支持的om离线模型
第10期 jupyter lab的使用
第11期 yolov5在昇腾上推理
第12期 yolov5在昇腾上应用
第13期_orangepi aipro开箱测评
第14期 orangepi_aipro小修补含yolov7多线程案例
第15期 orangepi_aipro欢迎界面、ATC bug修复、镜像导出备份
未完待续…


文章目录

  • [嵌入式AI从0开始到入土]嵌入式AI系列教程
  • 前言
  • 一、ATC报错
    • 1、报错详情
    • 2、解决办法
  • 二、欢迎界面
    • 1、一些有趣的软件
    • 2、效果展示
      • 1、lolcat
      • 2、figlet
      • 3、toilet
      • 4、cowsay
      • 5、sl
      • 6、cmatrix
    • 3、修改欢迎界面
      • 1、源文件
      • 2、添加的内容
      • 3、效果
  • 三、镜像导出
    • 1、折腾历程
    • 2、wsl2环境导出
      • 1、重新编译内核
      • 2、安装驱动
      • 3、导入脚本,安装依赖
      • 4、执行
      • 5、卸载sd卡
    • 3、VMware虚拟机
    • 4、注意事项
  • 四、问题
    • 1、添加的欢迎信息不显示
    • 2、apt报错
  • 总结


前言

注:本文基于orangepi_aipro于2023.2.3公布的ubuntu_desktop镜像
上一期中在atc转换时有个报错,但是不影响结果,这期做一个修复;然后添加本次修补的信息到ssh欢迎界面,以便后续使用;最后是导出我们制作好的镜像,并且压缩备份。

一、ATC报错

1、报错详情

PermissionError: [Errno 13] Permission denied: '/usr/local/Ascend/ascend-toolkit/7.0.0/opp/vendors/customize/op_impl/ai_core/tbe/customize_impl/rescale.py'

我手动寻找了这个文件,发现在/usr/local/Ascend/ascend-toolkit/7.0.0/opp/vendors/customize/op_impl/ai_core/tbe/customize_impl/目录是有这个文件的,这时我怀疑的是权限问题。
于是我去我安装了相同版本CANN的wsl2内去查看,不幸的是发现/usr/local/Ascend/ascend-toolkit/7.0.0/这个目录下就已经没有opp这个文件夹了。
在这里插入图片描述

2、解决办法

后面经过一阵搜索,终于在论坛上找到了办法。

sudo chmod a+rx -R /usr/local/Ascend/ascend-toolkit/7.0.0/opp/vendors/customize/op_impl/

这行命令的意思是以超级用户权限,递归地为指定目录及其所有子目录和文件设置所有用户的读和执行权限
在这里插入图片描述
之后再次运行便不会收到这个错误了。

二、欢迎界面

1、一些有趣的软件

这里系统内置了lolcatfiglet这两个软件。当然,这远远不够我们整活的。于是

sudo apt install -y cowsay sl cmatrix toilet

关于用法直接使用-h参数即可(虽然有些会报错,但你就说给没给说明吧)

2、效果展示

1、lolcat

ll | lolcat
lolcat "This is a test text!"

在这里插入图片描述

2、figlet

figlet

在这里插入图片描述

3、toilet

 toilet -f term -F border --gay "This is a test text!"
 echo "This is a test text!" | toilet -f term -F border --gay

在这里插入图片描述

4、cowsay

cowsay "toolsmanhehe" | lolcat	#这里结合lolcat实现彩色
echo "This is a test text!" | cowsay

在这里插入图片描述

5、sl

sl

嗯,没错,跑过一辆小火车
在这里插入图片描述

6、cmatrix

cmatrix

经典黑客帝国背景,很帅的啦。
在这里插入图片描述

3、修改欢迎界面

在Ubuntu系统中,SSH登录的欢迎信息通常显示在用户成功通过SSH登录后看到的第一条消息。这个欢迎信息存储在文件/etc/motd中,该文件的名字是“Message of the Day”的缩写。
请注意,这里会有一个动态生成的motd,它会覆盖您直接编辑的/etc/motd文件。在这种情况下,您可能需要修改负责生成这个动态消息的脚本,位于/etc/update-motd.d/目录下的脚本。

我们选其中一种就行了,注意,前面数字越小的越先被执行

sudo vim /etc/update-motd.d/01-orangepi-startup-text #直接修改原来的欢迎界面
sudo vim /etc/update-motd.d/02-user-text	#新建新的信息

1、源文件

我们先来看下原来的内容

#!/bin/sh
figlet -tk -w 120 "Orange Pi"
printf "Welcome to Orange Pi Ai Pro\n"
[ -r /etc/lsb-release ] && . /etc/lsb-release

if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
        # Fall back to using the very slow lsb_release utility
        DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi
printf "This system is based on %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"
printf "\n"
printf "This system is only applicable to individual developers and cannot be used for commercial purposes.\n"
printf "\n"
printf "By using this system, you have agreed to the Huawei Software License Agreement.\n"
printf "\n"
printf "Please refer to the agreement for details on https://www.hiascend.com/software/protocol\n"
printf "\n"

2、添加的内容

toilet -f term -F border -w 100 --metal "Fix the bug that the hibernation cannot wake up,configure the vnc desktop  (accessed using ip:5901),add opencv4.9.0 with CANN support enabled,add torch_npu support."
cat /etc/motd.cowsay	#至于为什么这么写,看问题区第一点

3、效果

这是我魔改完的效果
在这里插入图片描述

三、镜像导出

这里我研究了好几天,终于成功导出镜像。不要问我不是有许多工具的吗,随便找一个就好了,不信你试试就好,不缺硬盘的除外。

1、折腾历程

开始,我使用Ascend AI Devkit Imager备份功能进行备份,但是似乎有bug,不管选不选压缩,它都会压缩。这里备份没有问题,备份的镜像也没问题。这里使用了19G左右空间的64G卡备份完的test.img.zip是14G多,比我最后使用的方法获得的打2倍以上。
但是刷入备份镜像的时候你就会发现问题,明明条子读完了,过了一会,却还是没提示烧录完成。通过任务管理器,会发现sd卡还在被写入。
于是我更换balenaEtcher烧录,发现原来是1:1备份的,也就是卡多大,镜像多大
我知道有人会说,啊,用个镜像压缩工具把空白的区域去掉不就行了嘛。于是我掏出了祖传的pishrink.sh,然而挂载img镜像后,执行这个脚本却提示超级块损坏,有人说用win32diskimager备份的镜像就可以。不幸的是,还是1:1备份,而且也是同样的报错提示。
好嘛,那我掏出祖传的DiskGenius,显示第二个分区确实后面没有被使用,那就直接resize,不幸的是,提示文件损坏,无法调整。
好嘛,那我手动压缩(直接去除后面没有使用的空间),行了吧。

losetup /dev/loop0 test.img	#使用losetup将.img文件映射为一个块设备。
fdisk -l /dev/loop0			#使用fdisk或parted查看分区的详细信息
parted /dev/loop0			#使用parted工具来缩小第二个分区的大小。
	resizepart 2 20GB   # 假设要将分区缩小到20GB
	q                   # 退出parted
e2fsck -f /dev/loop0p2  	# 检查文件系统
resize2fs /dev/loop0p2 20GB  # 调整文件系统大小
dd if=/dev/loop0 of=test_resized.img	#使用dd命令备份修改后的分区到新的镜像文件。
losetup -d /dev/loop0		#卸载分区并删除loop设备

然而不幸的是,在调整文件系统大小这一步报错。到这里我心态真的要崩溃了,复制一次源文件就得60G的样子,搞了快10次。

然后我就好奇官方的镜像是如何出来的,于是翻文档,终于,成功了,导出镜像6G多一点。

2、wsl2环境导出

1、重新编译内核

尽管我们通过usbipd-win项目能够将usb设备连接到wsl,而且WSL2-Linux-Kernel内核中已经包含USB驱动,但不幸的是默认内核配置并没有自动加载USB存储驱动模块。所以,还得自己动手编译内核。
在wsl内执行以下命令

su
apt update
apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev autoconf libudev-dev libtool	#安装依赖
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git	#下不动用下面的码云镜像仓库
git clone https://gitee.com/mirrors/WSL2-Linux-Kernel.git
cd WSL2-Linux-Kernel
git checkout linux-msft-wsl-$(uname -r | cut -d- -f1)	#切换到我们当前版本内核分支
cp /proc/config.gz config.gz	#复制当前内核的配置文件
gunzip config.gz
mv config .config
make menuconfig

Device Drivers --> USB support ---> USB Mass Storage support开启usb驱动加载
使用方向键上下移动,回车进入,找到后按两下空格,使其变为<*>,然后方向键向右移动到save,保存,最后,移动到exit,一步步退出,直到提示configuration witten to.config
在这里插入图片描述
接下来需要修改一个配置,确保CONFIG_X86_X32没有被开启

vim .config

在这里插入图片描述
接下来就让你的电脑风扇咆哮吧

sudo make -j$(nproc)
sudo make modules_install -j$(nproc)
sudo make install -j$(nproc)

大概5-10分钟就可以编译完成。编译结果如下
在这里插入图片描述
接着把这个vmlinux文件放到win上,我是放到了存放wsl文件的地方,cp命令或者直接资源管理器复制都可以。
然后来到win用户根目录,也就是C:\Users\xxx,新建.wslconfig文件

[wsl2]
kernel=D:\\wsl\\vmlinux	#路径自行修改

然后重新启动wsl就可以了,注意,应该使用wsl --shutdown命令关闭。

2、安装驱动

WSL 本身并不支持连接 USB 设备,因此你需要安装开源 usbipd-win 项目。
注意,必须是wsl2,否则无法挂载usb设备到wsl内。什么,你还没有,那么按照我之前的这篇教程安装一下吧,很快的。
首先安装驱动,详情请查看官方文档,在powershell内执行(为了方便,请直接使用管理员权限打开)

wget https://github.com/dorssel/usbipd-win/releases/download/v4.1.0/usbipd-win_4.1.0.msi	#下载完记得手动安装一下
winget install --interactive --exact dorssel.usbipd-win	#github下载慢的话用这个

不幸的是这俩我都下的十分缓慢,这里疑似版权问题,CSDN不让我发。
安装之后,我们继续在powershell内执行(假设我现在需要连接的设备是2-6)
在这里插入图片描述

usbipd list		#列出所有连接到 Windows 的 USB 设备
usbipd bind --busid 2-6	#将其设为共享状态
usbipd list		#确保其状态变为share
usbipd attach --wsl --busid 2-6	#将USB设备连接到wsl

在这里插入图片描述
连接成功应有如下提示
在这里插入图片描述
注意,应该确保 WSL 命令提示符处于打开状态。 请注意,只要 USB 设备连接到 WSL,Windows 将无法使用它。 附加到 WSL 后,任何作为 WSL 2 运行的分发版本都可以使用 USB 设备。
然后在wsl内执行

lsusb
lsblk

在这里插入图片描述

3、导入脚本,安装依赖

我提取了相关脚本,上传至本文置顶资源。
同时我们也可以从产品详情页下载源码。
在这里插入图片描述
在这里插入图片描述
我们只需要这两个文件

su
apt update
apt-get install -y qemu qemu-user qemu-user-static binfmt-support xz-utils
cp library/* /usr/lib64/	#这两个文件我放在我的压缩包跟目录了,自己改下路径
tar zxf image-builder.tar.gz
cd image-builder/src/compress/
vim base.sh
#修改419行
xz -ck -T0 -9 -vv "$3" > "$3".xz || return 1
#改成
xz -c -T$(nproc) -vv "$3" > "$3".xz || return 1

这里做了三个更改

  • 去除-k参数,这样就不会保留原始的linux.img,反正我们一般也不会保留压缩前的,第一次使用这个脚本建议还是留着
  • T0改为T$(nproc):这样使用全部cpu核心去执行压缩操作,加快速度
  • 去除-9这个参数,这个参数表示最大压缩率,虽然去除会导致压缩后的文件变大一些,但是能有效减少内存占用。实测大约需要20G内存执行-9这个压缩级别。内存不够会导致报错。

4、执行

bash base.sh -c ubuntu/22.04 /dev/sdX linux.img		#ubuntu
bash base.sh -c openEuler/22.03/ /dev/sdX linux.img	#openEuler

说明:此处的sdX是上面第二步lsblk显示的编号,或者用fdisk -l查找,就是可能比较乱
等待其提示[COMPRESS] sd card compress success!
然后我们可以在image-builder/src/compress目录下看到linux.imglinux.img.xz两个文件。当然我们选择只保存后者啦。

5、卸载sd卡

在 WSL 中完成设备使用后,可物理断开 USB 设备,或者从 PowerShell 运行
二选一,效果一样

usbipd unbind -b 2-6		#停止共享
usbipd detach --busid 2-6	#卸载这个设备

3、VMware虚拟机

这里遇到一个问题,不知道是不是vm17的问题,我把sd卡连接到虚拟机,提示我驱动不兼容,然后虚拟机内看不到,物理机也看不到。
解决办法很简单,添加物理磁盘就行了。
使用管理员权限启动VMware
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于设备问题,0一般都是你的系统盘,不知道就都试一下,添加后看大小就行了。
其他步骤和wsl内一致。

4、注意事项

导出的镜像不包含你的wifi连接信息,或者说包含,但是首次启动时会写入官方的配置导致无法自动连接wifi。需要通过串口或者网口重新配网。

四、问题

1、添加的欢迎信息不显示

这里我使用以下命令,在终端执行是正常的,但加入motd后不显示

cowsay -W 35 Mirror production time: 24.02.19 Made by toolsmanhehe | toilet -f term --gay

在这里插入图片描述
后面经过查询,得知motd不支持动态输入,但是我们可以曲线实现,把动态输入变为静态。

cowsay -g -W 35 "Mirror production time: 24.02.19" "Made by toolsmanhehe" | toilet -f term --gay > /etc/motd.cowsay	#-g是把眼镜变成$

之后看一下效果,并加入motd内容中

cat /etc/motd.cowsay

在这里插入图片描述

2、apt报错

报错内容如下

Failed to retrieve available kernel versions.
Failed to check for processor microcode upgrades.

虽然不影响使用,但是作为强迫症晚期患者,眼不见为净

sudo vim /etc/needrestart/needrestart.conf
#找到kernelhints和ucodehints,去掉注释,并将其改为
$nrconf{kernelhints} = 0;
$nrconf{ucodehints} = 0;

究极解决办法

sudo apt-get purge needrestart

总结

emmm,现在应该只剩下硬件问题了,这个是真的要费脑子了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

同城系统源码_城市o2o系统源码OctShop

同城系统源码O2O的模式就是一种将线下商品或服务与线上互联网相结合&#xff0c;让互联网成为线下交易的前台。比如&#xff1a;商家企业可以通过线上的方式展示自己商品或服务的详细信息&#xff0c;以及各种营销活动的宣传&#xff0c;引导买家消费者下单&#xff0c;通过线上…

Java的String类

目录 String类的常用方法 1.1 字符串构造 1.2 String对象的比较 1.3 字符串查找 1.4 转换 1.5 字符串替换 1.6字符串拆分 1.7 字符串截取 1.8 其他操作方法 1.9 字符串的不可变性 1.10 字符串修改 String类的常用方法 1.1 字符串构造 String类常用的构造方法有很多…

优化|非强凸问题的一阶算法线性收敛条件(一)

原文信息&#xff08;包括题目、发表期刊、原文链接等&#xff09;&#xff1a;Linear convergence of first order methods for non-strongly convex optimization 原文作者&#xff1a;I. Necoara, Yu. Nesterov, F. Glineur 论文解读者&#xff1a;陈宇文 编者按&#xf…

LabVIEW压电驱动迟滞补偿控制

LabVIEW压电驱动迟滞补偿控制 随着精密控制技术的迅速发展&#xff0c;压电陶瓷驱动器因其高精度和快速响应特性&#xff0c;在微纳精密定位系统中得到了广泛应用。然而&#xff0c;压电材料固有的迟滞非线性特性严重影响了其定位精度和重复性。开发了一种基于LabVIEWFPGA的压…

WSL里的Ubuntu 登录密码忘了怎么更改

环境&#xff1a; Win10 专业版 WSL2 如何 Ubuntu22.04 问题描述&#xff1a; WSL里的Ubuntu 登录密码忘了怎么更改 解决方案&#xff1a; 在WSL中的Ubuntu系统中&#xff0c;忘记了密码&#xff0c;可以通过以下步骤重置密码&#xff1a; 1.打开命令提示符或PowerShel…

HTTP的详细介绍

目录 一、HTTP 相关概念 二、HTTP请求访问的完整过程 1、 建立连接 2、 接收请求 3、 处理请求 3.1 常见的HTTP方法 3.2 GET和POST比较 4、访问资源 5、构建响应报文 6、发送响应报文 7、记录日志 三、HTTP安装组成 1、常见http 服务器程序 2、apache介绍和特点 …

Idea中使用git将多次提交记录合并成一次提交记录

一、查看Idea中的提交记录 查看Idea中的提交记录&#xff0c;我们希望将新增了bbb.txt、新增了ccc.txt、新增了ddd.txt,这三次提交记录合并成一次提交记录。 二、使用Interactively Rebase from Here进行合并 2.1、把鼠标放在新增了bbb.txt这次提交记录上并右键单击 把鼠标放…

文件上传漏洞--Upload-labs--Pass17--条件竞争

一、条件竞争原理&#xff08;结合代码审计&#xff09; 1、首先进行代码审计&#xff0c;查看源代码。 我们可知&#xff0c;将文件上传至服务器后&#xff0c;不会被立即删除&#xff0c;而是做短暂的停留&#xff0c;中间会有一小部分时间差&#xff0c;这部分时间差是代码…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月21日,星期三

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月21日 星期三 农历正月十二 1、 央行&#xff1a;5年期LPR下调25个基点至3.95%。100万元房贷30年少还5.2万元。 2、 民航局等四部门明确&#xff1a;到2025年&#xff0c;机场噪声污染防控标准体系基本建成。 3、 应急…

云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)

在当今的云服务市场中&#xff0c;阿里云、腾讯云、华为云和百度智能云都是领先的云服务提供商&#xff0c;他们都提供了全套的云数据库服务&#xff0c;其中 Redis属于RDS 之后第二被广泛应用的服务&#xff0c;本次测试旨在深入比较这四家云服务巨头在Redis云数据库性能方面的…

相机图像质量研究(25)常见问题总结:CMOS期间对成像的影响--过曝、欠曝

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

欲速则不达,慢就是快!

引言 随着生活水平的提高&#xff0c;不少人的目标从原先的解决温饱转变为追求内心充实&#xff0c;但由于现在的时间过得越来越快以及其他外部因素&#xff0c;我们对很多东西的获取越来越没耐心&#xff0c;例如书店经常会看到《7天精通Java》、《3天掌握XXX》等等之类的书籍…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-23-处理select下拉框-下篇

1.简介 上一篇中宏哥主要讲解和分享了一下&#xff0c;我们常见或者传统的select下拉框的操作&#xff0c;但是近几年又出现了了一种新的select下拉框&#xff0c;其和我们传统的select下拉框完全不一样&#xff0c;那么我们如何使用playwright对其进行定位操作了。宏哥今天就…

[word] 如何将word文本转换成表格? #知识分享#学习方法#媒体

如何将word文本转换成表格&#xff1f; 如何将word文本转换成表格&#xff1f;不管是Word入门新手还是老手&#xff0c;相信这个技巧会让你更加熟练Word&#xff0c;操作起来得心应手&#xff01; 1.文本转换成表格 同样的要怎么把一堆凌乱的数据转换成表格呢&#xff1f;这里…

Java基础常用API(1)

文章目录 1&#xff1a;API 概述1.1 API概述和课程安排1.2 包和导包 2&#xff1a;Scanner2.1 Scanner基本使用2.2 练习(数据求和) 3&#xff1a;Random3.1 Random基本使用3.2 练习(猜数字游戏) 1&#xff1a;API 概述 1.1 API概述和课程安排 我们在讲解面向对象的时候&#…

NestJS入门6:日志中间件

前文参考&#xff1a; NestJS入门1 NestJS入门2&#xff1a;创建模块 NestJS入门3&#xff1a;不同请求方式前后端写法 NestJS入门4&#xff1a;MySQL typeorm 增删改查 NestJS入门5&#xff1a;加入Swagger 1. 安装 nest g middleware logger middleware​ ​ ​ 2. lo…

嵌入式linux开发之LAN8720A网络驱动

网络硬件组成 OSI模型和TCP/IP模型的对比 嵌入式网络硬件分为两部分&#xff1a;MAC 和 PHY。 MAC&#xff08;Medium Access Control&#xff09;和PHY&#xff08;Physical Layer&#xff09;是计算机网络领域中常见的术语&#xff0c;通常用于描述数据链路层&#xff08;…

java数据结构与算法刷题-----LeetCode503. 下一个更大元素 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路&#xff1a;时间复杂度和空间复杂度都是O(n) 此题是739题的衍生题…

Python学习-流程图、分支与循环(branch and loop)

十、流程图 1、流程图&#xff08;Flowchart&#xff09; 流程图是一种用于表示算法或代码流程的框图组合&#xff0c;它以不同类型的框框代表不同种类的程序步骤&#xff0c;每两个步骤之间以箭头连接起来。 好处&#xff1a; 1&#xff09;代码的指导文档 2&#xff09;有助…

Mountain Environment - Dynamic Nature

包含超过470个环境预制件,要运行HD或URP,将包导入到HD或URP项目中,然后在“HD和URP支持”文件夹中的资源中导入支持包。它将替换着色器、预制件和网格,以便它们可以与RP一起使用。另请检查该文件夹中的自述文件。 此包是: 100%扫描资产的大型图书馆,经过精心优化、分类和…