[嵌入式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-releaseif [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then# Fall back to using the very slow lsb_release utilityDISTRIB_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   # 假设要将分区缩小到20GBq                   # 退出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,现在应该只剩下硬件问题了,这个是真的要费脑子了。

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

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

相关文章

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工…

WebGL中开发科学数据可视化应用

WebGL在科学数据可视化领域有广泛的应用&#xff0c;可以用于呈现和解释复杂的科学数据。以下是在WebGL中开发科学数据可视化应用时的一些建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.选择合…

2、电源管理入门之开机详解

目录 1. 硬件上电 2. ATF运行 3. Linux启动 3.1 内核启动start_kernel 3.2 平台启动setup_arch 3.4 DTS初始化psci_dt_init 3.5 系统rest创建kernel_init线程 3.6 SMP初始化smp_init 3.7 PSCI接口psci_cpu_on 3.8 SMC返回secondary_entry 系统开机牵扯到:“我是…

记录人工智能领域的人、事、社区

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要关注人物OpenAI团队成员 关注事件2015年2016年2017年2018年2019年2020年2021年2022年2023年2024年 关注社区OpenAITensorFlowPyTorchMIT Technology ReviewReddit Machine LearningIEEE Transactions on Neural Net…

java 使用documents4j将XML转为pdf文件的方式

1.背景&#xff1a; 通过spire.doc.free将word转换成PDF时存在缺陷&#xff1a;只能获取前3页。获取全文另外需支付费用。 2.解决办法 使用documents4j&#xff0c;documents4j会保留原word文件中更多的样式&#xff0c;如修订模式下的差异化字体颜色、文档右侧修订记录等。 …

Android Studio基础(下载安装与简单使用)

1、搭建Android开发平台 1.1 Android Studio 下载地址及版本说明 Android 开发者官网&#xff1a; https://developer.android.com/index.html&#xff08;全球&#xff0c;需科学上网&#xff09; https://developer.android.google.cn/index.html&#xff08;国内&#xff…

十三、集合进阶——单列集合 及 数据结构

单列集合 及 数据结构 13.1 集合体系结构13.1.2 单列集合1. Collection2.Collection 的遍历方式迭代器遍历增强for遍历Lambda表达式遍历 3.List集合List集合的特有方法List集合的遍历方式五种遍历方式对比 4.数据结构1).栈2).队列3&#xff09;数组4&#xff09;链表小结5&…

PyTorch – 逻辑回归

data 首先导入torch里面专门做图形处理的一个库&#xff0c;torchvision&#xff0c;根据官方安装指南&#xff0c;你在安装pytorch的时候torchvision也会安装。 我们需要使用的是torchvision.transforms和torchvision.datasets以及torch.utils.data.DataLoader 首先DataLoa…

营销系统黑名单优化:位图的应用解析 | 京东云技术团队

背景 营销系统中&#xff0c;客户投诉是业务发展的一大阻碍&#xff0c;一般会过滤掉黑名单高风险账号&#xff0c;并配合频控策略&#xff0c;来减少客诉&#xff0c;进而增加营销效率&#xff0c;减少营销成本&#xff0c;提升营销质量。 营销系统一般是通过大数据分析建模…

2024年了,如何从 0 搭建一个 Electron 应用

简介 Electron 是一个开源的跨平台桌面应用程序开发框架&#xff0c;它允许开发者使用 Web 技术&#xff08;如 JavaScript、HTML 和 CSS&#xff09;来构建桌面应用程序。Electron 嵌入了 Chromium&#xff08;一个开源的 Web 浏览器引擎&#xff09;和 Node.js&#xff08;一…

游戏行业洞察:分布式开源爬虫项目在数据采集与分析中的应用案例介绍

前言 我在领导一个为游戏行业巨头提供数据采集服务的项目中&#xff0c;我们面临着实时数据需求和大规模数据处理的挑战。我们构建了一个基于开源分布式爬虫技术的自动化平台&#xff0c;实现了高效、准确的数据采集。通过自然语言处理技术&#xff0c;我们确保了数据的质量和…

【PostgreSQL实现psql连接时候提示用户的密码有效时间】

如下内容使用session_exec插件结合自定函数实现。类似于触发器的原理。 功能需要严格在测试环境测试后&#xff0c;才可在正式环境使用。没有相关要求&#xff0c;还是建议直接查询pg_roles/pg_authid/pg_user&#xff1b; 一、判断是否需要修改用户密码和有效期的检查SQL 首…

【Emgu CV教程】7.1、图像锐化之Laplacian(拉普拉斯)算子锐化

文章目录 一、介绍二、举例1.原始素材2.代码3.运行结果 一、介绍 前面几篇讲的是图像平滑&#xff0c;就是抑制或消除噪声&#xff0c;并使得图像亮度及颜色变化更平缓的操作。在图像处理领域&#xff0c;与平滑操作相对应的&#xff0c;叫图像锐化。 图像锐化就是增强图像的边…

python OpenCV:seamlessClone泊松融合

一、seamlessClone函数的用法 翻译 https://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp/ def seamlessClone(src, dst, mask, p, flags, blendNone): # real signature unknown; restored from __doc__"""seamlessClone(src, dst, mask, …

【Hudi】Upsert原理

17张图带你彻底理解Hudi Upsert原理 1.开始提交&#xff1a;判断上次任务是否失败&#xff0c;如果失败会触发回滚操作。然后会根据当前时间生成一个事务开始的请求标识元数据。2.构造HoodieRecord Rdd对象&#xff1a;Hudi 会根据元数据信息构造HoodieRecord Rdd 对象&#xf…

2024年【起重机司机(限桥式起重机)】试题及解析及起重机司机(限桥式起重机)证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 起重机司机(限桥式起重机)试题及解析考前必练&#xff01;安全生产模拟考试一点通每个月更新起重机司机(限桥式起重机)证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过起重机司机(限桥式起重机)理论考试很…

linux ext3/ext4文件系统(part2 jbd2)

概述 jbd2&#xff08;journal block device 2&#xff09;是为块存储设计的 wal 机制&#xff0c;它为要写设备的buffer绑定了一个journal_head&#xff0c;这个journal_head与一个transaction绑定&#xff0c;随着事务状态的转移&#xff08;运行&#xff0c;生成日志&#…

我为什么不喜欢关电脑?

程序员为什么不喜欢关电脑&#xff1f; 你是否注意到&#xff0c;程序员们似乎从不关电脑&#xff1f;别以为他们是电脑上瘾&#xff0c;实则是有他们自己的原因&#xff01;让我们一起揭秘背后的原因&#xff0c;看看程序员们真正的“英雄”本色&#xff01; 一、上大学时。 …

Backtrader 量化回测实践(1)—— 架构理解和MACD/KDJ混合指标

Backtrader 量化回测实践&#xff08;1&#xff09;—— 架构理解和MACD/KDJ混合指标 按Backtrader的架构组织&#xff0c;整理了一个代码&#xff0c;包括了Backtrader所有的功能点&#xff0c;原来总是使用SMA最简单的指标&#xff0c;现在稍微增加了复杂性&#xff0c;用MA…

k8s除了可以直接运行docker镜像之外,还可以运行什么? springboot项目打包成的压缩包可以直接运行在docker容器中吗?

Kubernetes&#xff08;k8s&#xff09;主要设计用于自动部署、扩展和管理容器化应用程序。虽然它与Docker容器最为密切相关&#xff0c;Kubernetes实际上是与容器运行时技术无关的&#xff0c;这意味着它不仅仅能够管理Docker容器。Kubernetes支持多种容器运行时&#xff0c;包…