做网站比较好的软件,网站建设 石家庄,网站设计与建设代码,北京网络公司有哪些[嵌入式AI从0开始到入土]嵌入式AI系列教程
注#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间#xff0c;后期会考虑出视频教程#xff0c;务必催更#xff0c;以防我变身鸽王。
第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…[嵌入式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、lolcat2、figlet3、toilet4、cowsay5、sl6、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 arx -R /usr/local/Ascend/ascend-toolkit/7.0.0/opp/vendors/customize/op_impl/这行命令的意思是以超级用户权限递归地为指定目录及其所有子目录和文件设置所有用户的读和执行权限 之后再次运行便不会收到这个错误了。
二、欢迎界面
1、一些有趣的软件
这里系统内置了lolcat和figlet这两个软件。当然这远远不够我们整活的。于是
sudo apt install -y cowsay sl cmatrix toilet关于用法直接使用-h参数即可虽然有些会报错但你就说给没给说明吧
2、效果展示
1、lolcat
ll | lolcat
lolcat This is a test text!2、figlet
figlet3、toilet toilet -f term -F border --gay This is a test text!echo This is a test text! | toilet -f term -F border --gay4、cowsay
cowsay toolsmanhehe | lolcat #这里结合lolcat实现彩色
echo This is a test text! | cowsay5、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 \n2、添加的内容
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 oftest_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]
kernelD:\\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 设备连接到 WSLWindows 将无法使用它。 附加到 WSL 后任何作为 WSL 2 运行的分发版本都可以使用 USB 设备。 然后在wsl内执行
lsusb
lsblk3、导入脚本安装依赖
我提取了相关脚本上传至本文置顶资源。 同时我们也可以从产品详情页下载源码。 我们只需要这两个文件
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.img和linux.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.cowsay2、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现在应该只剩下硬件问题了这个是真的要费脑子了。