香橙派 AIPro开发板上手测评

前言

最近拿到了一个新玩具:香橙派 AIPro。一个只比银行卡大一点点的开发板能带给我们多少惊喜呢?接下来就跟我一起来体验下这块开发板的魅力。


一、硬件配置

CPU:配备了4核64位ARM处理器,其中默认预留1个给AI处理器使用
NPU:集成了华为昇腾310BAI处理器,拥有4TFOPS的FP16算力核8TOPS的INT8算力
内存:标配LPDDR4X的规格,有8G核16G两种配置可供选择
存储:板载32MB的SPI Flash,内置1个Micro SD卡槽、1个eMMC插座、M.2插槽(2280规格)
以太网:板载10/100/1000Mbps自适应RJ45口
无线通讯:2.4+5双频WIFI核BT4.2
USB:2个USB3.0 Host接口、1个Type-C接口(USB3.0)
摄像头:预留了2个MIPI CSI 2 Lane接口
显示:2个HDMI接口,支持同时4K@60HZ输出、一个MIPI DSI 2 Lane接口支持外接显示屏
音频:除了2个HDMI接口还有一个3.5MM耳机孔
40PIN扩展口:支持UART、I2C、SPI、PWM、GPIO等
风扇接口:4PIN接口,12V供电,支持PWM调速
电池接口:2PIN,用于接3串电池,支持快充
调试串口:板载Micro USB接口的调试串口
操作系统:目前支持Ubuntu-22.04核OpenEuler 22.03两种

二、开箱展示

外包装:

在这里插入图片描述

外包装不是太豪华,可以说比较简易了,但这没有关系,因为我们注重的是内在。品牌型号下面醒目的为AI而生已经很明确地向我们诠释了香橙派 AIPro的应用场景。

包装盒内部:
在这里插入图片描述

在这里插入图片描述

整体包装还是严密的,上下各有一个泡沫作为缓冲,很好的保护了运输过程中的安全。开发板也是在密封的真空袋里面的,需要拆开真空包装才能取出开发板。

正面:

在这里插入图片描述

可以看到散热风扇占了不小的面积,4PIN的风扇插口和2PIN的电池插口都在散热器下面,正面是看不到的。右上角就是Type-C的电源供电,官方标配65W的PD电源(20V 3.25A)。给了一个简易的外接天线,包括蓝牙和WIFI的天线集成到了一起。

背面:

在这里插入图片描述
从图上可以看到M.2插槽,规格是2280。我插了一个256G的SSD,我的SSD使用的是SATA协议,顺序读取速度和顺序写入速度只能达到500MB/S左右,如果使用NVME协议的话速度就相当惊喜了。目前系统还是烧录在SD卡里面的,SSD只是存储数据用的。

M.2上边就是EMMC的扩展卡槽,需要另行购买,系统可以烧录进EMMC卡里面去。实测SSD的速度还是快于EMMC的,所以如果把系统烧录进SSD的话能获取最好的性能。

侧面:

在这里插入图片描述

可以看到所有的接口之间都留了足够的距离,相互之间不会影响。

特别是HDMI0和HDMI1的接口中间隔着一个3.5MM耳机孔,我只能说在细节上很出色,因为HDMI数据线其实会向两边延展一些,如果两个HDMI紧挨着无疑会导致难以插拔;而Type-C的接口竖着放这个设计也要点个赞,虽然我不知道是不是工程师刻意为之,在我看来如果两个叠放的Type-A的接口都插满数据线的话,竖着放无疑流出了相当大的操作空间,不会因为排列紧挨着而导致难以插拔的问题。

三、刷写系统

开发板支持分别从TF卡、EMMC和SSD三种介质启动操作系统,板子上有两个拨码分别是BOOT1和BOOT2,每个拨码有打开和关闭两种状态,总共就是4种状态。以下是详细的配置:

在这里插入图片描述

注意:无论那种方式都需要先把系统刷写到SD卡上,然后再在开发板里面将系统镜像刷写到其它介质。

1.烧录到TF卡

准备一个至少32G的TF卡(至少Class10级别),一台Windows电脑(Linux也行),一个TF卡读卡器。安装BalenaEtcher烧录软件。

首先,将TF卡插入读卡器并将读卡器插入Windows电脑,确保读卡器被电脑识别。

其次,打开BalenaEtcher软件并选择要烧录的系统,这里烧录Ubuntu-22.04。
在这里插入图片描述

等待烧录完成即可

在这里插入图片描述

烧录完成会校验数据,必须要校验成功才行。

在这里插入图片描述

最后,退出软件并弹出读卡器。将TF卡从读卡器拔下来并插入开发板的TF卡槽里,这一步一定要断电,防止烧坏设备。确定插紧之后就可以接电源线了,设备会自动开机,等待进入桌面即可。

2.烧录到EMMC

EMMC默认是不配的,需要自行花钱采购,如果你确实需要就采购一个,具体型号可以咨询商家。

我们这里烧录到EMMC需要借助TF卡,前面烧录到TF卡的教程已经说过了,确保你已经通过TF卡进入了操作系统。

首先,在关机断电的前提下将EMMC插入卡槽上,这个卡槽在背面。
在这里插入图片描述

通过命令确认系统已经识别了EMMC,类似于下面这样:

fdisk -l

Disk /dev/mmcblk0: 28.91 GiB, 31037849600 bytes, 60620800 sectors

然后,将要烧录的 Linux 镜像文件压缩包上传到 TF 卡的 Linux 系统中。

最后,使用香橙派系统中自带的balenaEtcher将镜像烧录进EMMC即可。

在这里插入图片描述

烧录完成后需要关机并拔掉电源,将BOOT1和BOOT2拨码拨动到启动EMMC的位置即可,重新插上电源等待进入桌面。

题外话:

还有一种方法烧录到EMMC的方法我觉得是可行的,有一种专门读取EMMC的读卡器,就像下面这样:

在这里插入图片描述

我恰好就有一个,只不过是给RK3399用的,和手上的香橙派 AI Pro不配套。如果你恰巧有一个配套的EMMC读卡器,那么理论上直接将镜像烧录进EMMC也是可行的,比起上面的方法会节省一些时间。不过,为了这个方式买一个EMMC读卡器是不是值得就看你自己怎么想了。

3.烧录进SSD

现在这个时代估计机械硬盘成了稀罕货了,估计以后只能在机房里看到了。想起来早些年买电脑还是小容量SSD+机械的搭配,放在那个SSD天价的时代也是无奈之举。

现在好了,随着技术的发展和国内的厂商的跟进,虽说SSD没有夸张到白菜价,至少比起以前也是一个天上,一个地下了吧!

这块板子支持的SSD是M.2 2280的插槽,速度标准是PCIe3.0x4的速度,如果你的SSD超过这个标准,比如三星980 Pro是PCIe4.0x4的速度,就只能跑在PCIe3.0x4的速度了。我之前买的三星970 Pro就是这个标准,最大读取速度3500MB/S,最大写入速度2500MB/S,这个速度比起TF或EMMC已经是快很多了,满足生产力也肯定是没问题的。

注意:现在的NVME SSD只测试过梵想、金士顿和三星,目前只有三星的SSD能稳定运行操作系统!其他品牌的目前不建议将系统烧录到SSD上,等待官方发布新的更新即可解决这个问题。

首先,将开发板关机并下电,不要带电操作,可能烧坏设备。将SSD插入背板的M.2插槽上:

在这里插入图片描述

一定要用螺丝将SSD固定好再开机,防止脱落引发不必要的损坏。

其次,和前面一样烧录SSD也需要借助TF卡,这个过程就不介绍了。确保你的SSD是走的NVME协议,通过以下命令查看是否备操作系统识别:

sudo fdisk -l

Disk /dev/nvme0n1: 238.47 GiB, 256060514304 bytes, 500118192 sectors

所有的NVME协议的SSD都是以/dev/nvme开头的,注意不要看错了。

最后,还是借用香橙派系统自带的balenaEtcher软件将镜像烧录进SSD里面,方法和烧录TF卡一样,唯一需要注意的是SSD是大容量设备,注意备份数据,这个操作会删除所有的数据,且不可恢复!

烧录完成后关机并断开电源,将BOOT1和BOOT2的拨码拨动到启动NVME的位置即可插电源上电,然后等待进入系统。

四、系统初探

我手上拿到的这款自带32GB的闪迪SD卡,操作系统预装了Ubuntu-22.04。系统本身加上预装的开发软件占用了大概17G的空间,剩余11G左右的空间。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G   17G   11G  61% /
tmpfs           3.7G  4.0K  3.7G   1% /dev/shm
tmpfs           1.5G   15M  1.5G   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
tmpfs           128M  6.0M  123M   5% /var/log
/dev/mmcblk1p3   50M  2.0K   50M   1% /exchange
tmpfs           755M   76K  755M   1% /run/user/0
tmpfs           755M   80K  755M   1% /run/user/1000
/dev/sda1       239G  3.2G  236G   2% /mnt/data

实测这个SD卡的顺序写入速度大概是30MB/S,大致是A1的级别。安装软件过程中没有感受到任何卡顿,但复制大文件会等待更长的时间。想要更好的体验还是换速度更快的TF卡或者干脆更换成SSD获得更好的体验。

找一个支持HDMI的显示器连接到HDMI0接口上即可看到桌面,遗憾的是我拿到这块开发板的时候暂时还不支持2个HDMI口同时输出,目前默认HDMI0是有输出信号的,HDMI1是无输出信号的,以后软件更新会修复这个问题的。
在这里插入图片描述

默认的桌面是Xfce的,且支持在不同的工作区之间进行切换。另外,还附带了Gnome和KDE桌面,有需要的可自行切换。不同的人有不同的使用习惯,比如我本人使用Gnome更多一些,这一点考虑的很周到。

实测WIFI信号是满格的:
在这里插入图片描述
目前无法看到WIFI实际的速率,按照往常的经验大概率是433M,这个速率对于开发板来说够用了。

实测蓝牙也是可以正常连接的:
在这里插入图片描述
目前支持蓝牙传输文件,但是速率略慢。用来声音输出没有任何问题,音质也没有任何影响 。

桌面里面的功能就不过多介绍了,像日常用到的网络管理、蓝牙、WIFI都是自带的,常用的应用程序功能基本是应有尽有,感兴趣的小伙伴请自行体验吧。

五、性能评测

1.CPU性能评测

我们已经知道开发板搭载的NPU的确切性能是8TOPS,接下来就是用UnixBench测试下CPU的性能。

因为默认有一个核心被分配给了NPU,我们需要先把这个核心要回来,等待测完再还给它

先查询下当前的分配策略:

npu-smi info -t cpu-num-cfg -i 0 -c 0

        Current AI CPU number          : 1
        Current control CPU number     : 3
        Current data CPU number        : 0

AI CPU就是分配给NPU的核心数,control CPU就是分配给系统的核心数,默认是1:3的策略,可以通过命令更改这个分配策略。简单解释下就是说分配给NPU的核心是独占的,你的Linux系统不会把非AI的任务调度到这个核心上,通俗点说就是日常使用只有3个核心可用了。这个比例可以通过命令调整,比如0:4。如果你非常确定你的模型没有运行在CPU上的算子,你就可以从NPU临时回收这个核心。

切记:你一定要很确定才能这么做,有些模型是会把算子分配到CPU上运行的,强行回收可能导致严重的性能问题!

下面地命令就是重新分配:

sudo npu-smi set -t cpu-num-cfg -i 0 -c 0 -v 0:4:0

        Status                         : OK
        Message                        : The cpu-num-cfg of the chip is set successfully. Reset system for the configuration to take effect.

注意:一定要重启系统才能生效!每次更改分配策略都要重启系统。

重启之后再检查下:

npu-smi info -t cpu-num-cfg -i 0 -c 0

        Current AI CPU number          : 0
        Current control CPU number     : 4
        Current data CPU number        : 0

AI CPU变成0说明策略生效了!

接下来开始UnixBench测试,为了缩小Desktop对测试结果的影响,我先切换到命令行模式:

sudo systemctl isolate multi-user.target

然后再把风扇的速度手动调到最大,规避掉过热导致的降频:

#首先调速模式必须切换为手动,否则无法更改速度
sudo npu-smi set -t pwm-mode -d 0

#调速比调整为100,也就是全速运转
sudo npu-smi set -t pwm-duty-ratio -d 100

sudo reboot

这样开发板重启后就进入命令行界面了,关掉多余的进程就可以开始测试了。

测试获得906.4的综合得分,比6核心的RK3399 CPU综合性能强30%,比6核心的Atlas-200 CPU综合性能强50%。这个结果让我眼前一亮,本以为区区4核心不够看的,没想到这么快就打脸了。虽说分数没有到夸张的程度,不过作为定位AI的产品也是足够了。

注:Atlas-200的8核CPU必须至少分给NPU两个,所以至多只能使用6个核心。

2.硬解码能力评测

支持2路4K@60HZ的视频输出,这个在嵌入式设备上相当出色了,现在同时使用2个显示器的场景还蛮多的,这个设计无疑迎合了一些人的需求。

这个能力背后需要的正是硬解码的支持,接下来我们就来看看它的解码能力到底怎么样,我们后面在实际场景中演示中会非常依赖硬解码。以下测试以单路1920x1080@30FPS视频流为测试对象:

实测H264平均每帧解码耗时:1-2ms
在这里插入图片描述

实测H265平均每帧解码耗时:1-2ms
在这里插入图片描述
接下来2路4K@60HZ测试,结果平均每路最大12ms:
在这里插入图片描述
按照60HZ的输出标准来看的话平均每帧解码不能超过16ms,测试结果证明符合描述。

注:我本人测试了下jpeg的编码和解码速度都在几毫秒范围内,应该来讲我们做推理用的最多的是H264或H265的解码能力,jpeg用的并不多,所以就一笔带过了。

六、推理性能评测

作为定位AI场景的开发板,这是最主要的功能了。接下来就测试下开发板的AI推理能力。

1.目标检测

目标检测应该是使用的最多的场景之一了,这里使用YOLOv5s,它是 YOLOv5 系列中较为轻量的网络模型,适合在边缘设备部署,进行实时目标检测。这里检测以1080p视频为输入。

实测每帧处理速度大概是51ms左右:
在这里插入图片描述
在这里插入图片描述
关于准确率,除了完全遮挡的情况下无法识别,基本上没什么问题。真实使用场景中并不是每一帧都要检测,我之前做的很多项目都是可以通过抽帧解决,所以这个速度能够满足一定场景的需求,但如果对帧数要求特别高,就略显吃力了。

2.OCR

OCR两阶段方法一般包含两个模型,检测模型负责找出图像或视频中的文字位置,识别模型负责将图像信息转换为文本信息。使用的检测模型为CTPN,识别模型则是SVTR。

以下图为例:

在这里插入图片描述

识别结果:

在这里插入图片描述

cost: 262.5029296875
det result: 536,184,536,200,651,200,651,184
rec result: 开启开发者之旅
det result: 249,89,249,122,920,122,920,89
rec result: 从入门到进阶,开启昇腾开发者成长之旅

可以看出准确识别出了文字,速度的话是262ms左右,能够满足一些场景的使用,不太能满足对实时性要求很高的场景。

3.图片卡通化

使用cartoonGAN模型对输入图片进行卡通化处理,输入正常图像,输出卡通图像。

输入:
在这里插入图片描述
输出:
在这里插入图片描述
从结果可以看出来细节的保留做的还是相当好的。

速度测试:

in pre_process, use time:0.0037565231323242188
in inference, use time:0.2697789669036865
cost: 270.003173828125
in post_process, use time:0.0645606517791748

前处理和后处理几乎不消耗时间,推理的话消耗270ms左右,能够满足一些场景的需求,视频流场景需要做抽帧处理,不能够满足实时检测。

4.其他模型

诸如人脸检测和人脸识别这样的模型基本是能够做到实时检测的,有的甚至能够多路并发。由于模型太多就不一一展示了。

5.模型转换

比较好的一点是模型是可以直接在开发板上转换的,别问我为什么这么说,因为我遇到过需要借助其它设备转换的开发板,这些设备往往需要另外掏钱购买。Yolov5转换成om模型大概需要5分钟左右吧,虽说不算快,但也就是喝杯茶的功夫,我觉得可以接受。

七、Camera测试

之前买了个树莓派4B的时候正好买了个MIPI摄像头,今天拿过来插香橙派 AI Pro上看看效果。遗憾的是这个摄像头我当初买的时候不是树莓派官方原装摄像头,我也是抱着试试看的态度,实际是不能正常使用的。如果大家由这类需求的话还是购买官方指定的MIPI摄像头吧。
在这里插入图片描述

八、40PIN测试

这个硬件和AI关系不大,一般无人机、机器人这类场景使用的比较多。正好我手上有一些IO设备,就顺手看下。遗憾的是我经过多方面测试发现目前GPIO基本上是处于不可用的状态,经过多方面查找资料依然没有解决这个问题,只能后续和官方交流后再进一步测试了。

九、说说优缺点

说说优点:

1、高达8TOPS的AI处理器,这个算力可以毫无压力地跑人脸识别、物体识别、物体分类、追踪等等场景。

2、存储的可选性比较多,除了支持Micro SD Card,还支持eMMC和M.2 2280(实测同时支持NVME核SATA两种协议),还可以把系统烧录到SSD上体验飞一般的感觉。

3、支持主动散热,正常使用过程中风扇几乎没有噪音。

4、支持电池供电而且还支持快充,这个功能我以前用过的很多开发板都是没有的,虽然我可能用的不多,但是有的话无疑是要点个赞。

说说缺点:

1、实际使用过程中遇到过好几次假死或网络无故断连的情况,操作系统的稳定性需要再完善下。


总结

1、香橙派 AIPro为AI而生,如果你正在找一款合适的开发板,不妨考虑下。

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

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

相关文章

【Qt常用控件】—— 布局管理器

目录 前言 (一)垂直布局 (二)水平布局 (三)网格布局 (四)表单布局 (五)分组布局 (六)Spacer 总结 前言 之前使⽤Qt在界⾯上…

听说部门来了个00后测试开发,一顿操作给我整麻了

公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司实习半年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍&#xff01…

HTML静态网页成品作业(HTML+CSS)——动漫熊出没介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有3个页面。 二、作品演示 三、代…

使用`War`包部署`Jenkins`(超级详细)

使用War包部署Jenkins(超级详细) 别着急,你看这年复一年,春光不必趁早,冬霜不会迟到。过去的都会过去,该来的都在路上,一切都是刚刚好。 网站说明 https://get.jenkins.io/war-stable/ war包下载地址 https://www.jenk…

AIGC笔记--基于PEFT库使用LoRA

1--相关讲解 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS LoRA 在 Stable Diffusion 中的三种应用:原理讲解与代码示例 PEFT-LoRA 2--基本原理 固定原始层,通过添加和训练两个低秩矩阵,达到微调模型的效果; 3--简单代…

boost asio异步服务器(2)实现伪闭包延长连接生命周期

闭包 在函数内部实现一个子函数,子函数的作用域内能访问外部函数的局部变量。闭包就是能够读取其他函数内部变量。但是由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成程的性能问题&#x…

没开玩笑!高速信号不能参考电源网络这条规则,其实很难做到

高速先生成员--黄刚 看到这篇文章的题目,我相信大家心里都呈现出了这么一个场景:高速信号线在L20层,我只要把L19和L21层都铺上完整的地平面,这不就满足了高速信号线不能参考电源平面这条规则了吗?这难道很难做到吗&…

51驱动DY-SV20F语音播放模块

51驱动DY-SV20F语音播放模块 简介模块特征电气参数工作模式配置原理图代码结果图 简介 DY-SV20F 是一款一对一分段触发控制播放器,支持 MP3,WAV 解码格式; 可分段触发 9 首曲目;低电平触发;3.7-5VDC 宽电压供电,直驱 …

expect自动交互

在执行命令或脚本的时候,当控制台提示我们需要输入账号密码、参数等信息的时候,expect可以将预设的参数值自动输入到控制台,实现了自动交互。 1. 安装expect yum install expect 2. 案例: 创建 demo.exp 文件,并添…

英语四级翻译练习笔记③——大学英语四级考试2023年12月真题(第三套)

目录 引言(必看) 四级翻译评分标准分析及真题解析 四级翻译评分标准 四级翻译真题 学生作答 1. 评分 2. 修正翻译中的错误 错误标记: 3. 改正句子 4. 标出错误单词 5. 标准答案 6. 常考万能句子 7.重点单词的中文意思 引言&…

移动应用程序设计详解:基本概念和原理

移动应用程序设计是什么? 一般来说,应用程序设计师的核心职责是让用户有体验应用的欲望,而开发者负责让它正常工作。移动应用程序设计包括用户界面 (UI) 和用户体验 (UX)。设计者负责应用程序的整体风格,包括配色方案、字体选择、…

关于如何通过APlayer+MetingJS为自己的wordpress博客网页添加网易音乐播放器(无需插件)

本文转自博主的个人博客:https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接:点我访问 序言:最近在网上冲浪,发现大家的博客大部分都有一个音乐播放器能够播放音乐,随机我也开始寻找解决方法。可是找来找去我…

达梦数据库查看字符集、页大小

1.查看字符集select UNICODE (); 0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR 2.查看页大小select SF_GET_PAGE_SIZE(); 也可以通过管理工具去查看

【组合数学 放球问题 虚拟点 小于等于转小于】1621. 大小为 K 的不重叠线段的数目

本文涉及知识点 放球问题 组合数学汇总 本题难道分:2198 LeetCode1621. 大小为 K 的不重叠线段的数目 给你一维空间的 n 个点,其中第 i 个点(编号从 0 到 n-1)位于 x i 处,请你找到 恰好 k 个不重叠 线段且每个线段…

菊花链通信技术整理

目录 一、菊花链简介 二、菊花链与CAN通信的区别 三、常见的菊花链AFE芯片 四、菊花链数据结构 五、菊花链方案介绍 一、菊花链简介 首先简单的说一下菊花链以及菊花链的应用,在目前国内的BMS开发中,我们应用最广泛的目前还还是分布式,…

代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信、 15. 三数之和、18. 四数之和

454.四数相加II 题目链接: 454.四数相加II 文档讲解:代码随想录 状态:没做出来,没想到考虑重复的情况! 题解: public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 结果计数…

java的变量关系~使用和扩展

一、变量的概述 1、什么是变量 白话:变量就是一个装东西的盒子。 通俗:变量是用于存放数据的容器。我们通过变量名 获取数据,甚至数据可以修改。 2、变量在内存中的存储 本质:变量是程序在内存中申请的一块用来存放数据的空间,类似我们酒店的房间&a…

基于多源数据的微服务系统失败测试用例诊断

简介 本文介绍由南开大学、华为云及清华大学共同合作的论文:基于多源数据的微服务系统失败测试用例诊断。该论文已被FSE 2024(The ACM International Conference on the Foundations of Software Engineering) 会议录用,论文标题为: Fault D…

JS中的数组很重要,怎样定义(声明)

为什么呢?在java中有集合,数组的作用就弱了,其高光时刻基本都被集合代替了。在JS中没有集合,数组就有点忙不过来了。你说它重要不重要?! 在JS中,怎样定义一个数组呢? 数组的声明方…

动手学操作系统(二、编写MBR主引导记录)

动手学操作系统(二、编写MBR主引导记录) 文章目录 动手学操作系统(二、编写MBR主引导记录)1. 实模式和保护模式2. BIOS与MBR3. MBR程序Reference 在之前的学习内容中,我们已经实现了基本的仿真环境bochs的搭建&#xf…