Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    芒果派 MPi-MQ1 全志 D1s 开发板初体验

    MR Series
    1
    1
    2268
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Y
      ytf4425 LV 3 last edited by ytf4425

      本文首发于 https://www.neko.ooo/mongopi-mq1-hands-on ,采用 BY-NC-SA 许可协议。转载请注明出处。

      购入历程

      自从写 RISC-V 教学操作系统之后,一直用的是 QEMU 虚拟机来模拟操作系统的运行,配合 GDB 调试起来确实非常方便,而且可定制程度很高。

      后来见了 K210 开发板,我就考虑买一块来尝试把系统跑在真实硬件上,结果发现 K210 采用的 RISC-V 标准比较古老,最新的工具链都不支持了,另外它 8MB 的内存确实有亿点点小。其他热度比较高的 RISC-V 开发板价格基本都在千元以上,这岂是我能承受的。

      2021 年中,全志发布了基于阿里平头哥 RISC-V 芯片打造的哪吒开发板,价格五六百,虽然比树莓派贵了许多,但是板子的芯片作为 RISC-V 这一新生指令集架构的版本新且功能完善的 SoC,买来尝尝鲜也是可以接受的。

      在年底上全志论坛逛的时候,发现全志又出了内置 64MB DDR2 的 D1s 处理器,论坛里已经有做板子的厂家预热了几款搭载这一芯片的开发板,其中便有仅售 9.9 刀的麻雀 MPi-MQ1,看到这价格,我直呼之前的哪吒买亏了😭。D1s 与 D1(现在改名叫 D1-H 了)相比,除了内置 RAM 外,去掉了 HDMI 输出和 HiFi4 DSP,减少了一个 I2S 音频接口和通用 ADC。这些阉割对我来说没什么影响,不额外加内存也足够用,但麻雀的价格不到哪吒的七分之一,对我确实有十足的诱惑力。

      我买的是 WiFi 版的麻雀,价格比不带 WiFi 的稍贵一些,80 元不包邮,虽然现在我们的系统还没有做到 WiFi 驱动,但是以后会不会做谁知道呢哈哈,有总比没有强,也差不了几块钱。

      编译 OpenSBI 与操作系统

      全志提供的 SDK 中的 OpenSBI 居然还是 v0.6 的上古版本,之前我们曾 fork 过 OpenSBI 的官方仓库,为 v0.9 的 OpenSBI 添加了 D1 的一系列支持, 仓库地址在这 ,方便起见,这一版本直接硬编码了D1需要的驱动并做了加载,经测试适用于麻雀开发板。

      好消息是,OpenSBI v1.0 已经正式官方适配平头哥 C906 平台了,因此我们可以直接使用最新版的 OpenSBI,但坏消息是,如果不通过 TF 卡/闪存烧录固件启动,而是直接进入 FEL 模式将二进制文件写入内存后启动,将会跳过 Boot ROM 中一段加载设备树与修改 a1 寄存器的程序(猜的,也许官方的 OpenSBI 也是硬编码的,没有设备树),而官方默认编译出来的 OpenSBI 二进制版本正是通过 a1 寄存器的值来确定设备树的存放地址的。

      好在,OpenSBI 提供了可嵌入设备树的编译参数,因此,我们还需要手动编写 dts 文件并编译成 dtb 文件,随后 clone OpenSBI 的官方仓库,切到 v1.0 的 tag,执行 make PLATFORM=generic FW_FDT_PATH=<dtb 文件路径> CROSS_COMPILE=riscv64-linux-gnu- 以生成带 dtb 的固件。全志提供的 SDK 中有几个 dts 文件可供参考,但不可直接使用,因为其中 compatible 属性与 OpenSBI 能探测的不一致。

      上述编译参数中,PLATFORM=generic 指定固件平台为 generic,这一平台对 C906 做了兼容。FW_FDT_PATH=<dtb 文件路径> 附加指定的 dtb 到 OpenSBI 的 .rodata 段,并将 a1 寄存器设置为其初始地址,这一行为由 firmware/fw_base.S 第 241-244 行(寄存器赋值)与第 826-835 行(嵌入 DTB 与设置空白占位空间)、firmware/objects.mk 与 firmware/external_deps.mk 配合实现。CROSS_COMPILE=riscv64-linux-gnu- 指定交叉编译工具链的前缀是 riscv64-linux-gnu-,根据当前系统安装的交叉编译工具链的不同请自行修改。

      编译好的附带 dtb 的 OpenSBI v1.0 与采用的比较简陋的 dts、dtb 文件均可在 这里 下载,目前dts中添加设备较少,如有需要可自行参考SDK中的dts添加并重新编译,这一版本可将dtb通过a1寄存器传递给下一阶段加载。硬编码驱动加载的OpenSBI v0.9可在 这里 下载,不附带dtb需要主动给下一阶段系统提供设备树或硬编码。

      操作系统采用的是我们自己编写的一个玩具操作系统,目前外设也只驱动了 PLIC、UART 和 RTC,因此不如就拿这些整了个活,做了一个基于串口终端的打飞机游戏, 代码在这 。编译成平铺二进制文件直接加载进内存即可。

      上电测试

      开发板必不可少的 OTG 口、FEL 键、调试用串口一个不少,但是到货之后发现并没有随机附赠数据线和串口调试线(倒是送了条 WiFi 天线),无法做到开箱即用,还好我提前咨询了一下,把哪吒附赠的数据线和调试线给带了回来,不然就得额外花一笔小钱了。

      麻雀的调试串口的针脚没有和哪吒一样单独引出到一个角落里,而是和众多扩展排针做在了一起,如果用哪吒附赠的调试线,将黑线接到任意一个 GND(这里选 1 号),白线接到 7 号口(UART0-TX),绿线接到 8 号口(UART0-RX),红色的 VCC 不需要接。

      MQ1_Serial.jpg

      麻雀没有自带闪存芯片,在背面留有一个空焊位,可以自己焊接,或者使用 TF 卡烧录系统。不过我不用官方的 Tina Linux,既然有自己写的操作系统,当然是要尝试把它移植上去咯。

      跑自己的操作系统最简单的方法就是进入 FEL 模式,用 xboot 大神做的 XFEL 工具将裸文件(平铺的二进制文件)直接写入 DDR,然后从 DDR 直接启动,这样就能省去从 TF 卡加载系统的部分了。

      将串口调试线接上麻雀与电脑,串口驱动应该就会自动装上,随后就可以在串口通信软件里找到它了。这里我选择的软件是 MobaXterm 。设置正确的串口端口,选择波特率为115200(OpenSBI给阿里平头哥平台初始化的调试串口的默认波特率),连接上即可。

      按住下图蓝框中麻雀 OTG 接口背面的 FEL 按钮(其实不用按,麻雀不插卡上电默认进入 FEL 模式),然后将数据线一头连接麻雀的 OTG 口,一头连接电脑,即可进入 FEL 模式,通电后正面的绿色 LED 灯会亮起。此时因为麻雀还停留在 FEL 状态等待接收指令,因此串口也没有任何的输入。Windows 下第一次使用 XFEL 需要进入 Drivers 目录安装对应驱动(macos 似乎是需要用 Homebrew 安装 libusb)。

      MQ1_FEL.jpg

      MQ1_LED.jpg

      装完驱动后执行 .\xfel.exe sid 就能看到麻雀的 sid 信息了。如果没有请检查驱动安装情况。

      随后可以执行 .\xfel.exe ddr ddr2 来初始化麻雀的 DDR,这时候串口会有信息出现。使用 .\xfel.exe write <address> <file> 分别将 OpenSBI 和操作系统内核裸文件写入地址 0x80000000 与 0x80200000,随后执行 .\xfel.exe exec 0x80000000 从内存地址 0x80000000 处开始执行指令。OpenSBI 会在初始化完成后跳转至 0x80200000,因此我们需要把内核写到这部分内存。这些地址都是写在 OpenSBI 的源码和编译配置中的,当然都是可以改的,不过简单起见没有必要的话就不做修改了。

      串口参数设置

      DDR 初始化

      MobaXterm_opensbi.png

      MobaXterm_game.png

      感觉很不错,就是 UART 有点慢。制作驱动的过程中掉进很多坑,如果想看如何简陋地把设备驱动起来,可以先来 这里 参考一下还未完工的文档。

      连接 CKLINK 使用 GDB 调试

      程序出了错误就得调试,调试可以靠在程序的不同位置输出各种信息,但更方便的方法还是直接上调试器。平头哥的芯片也有配套的调试器 CKLink,淘宝上有各种不同的版本,当然也可以自己打板贴片烧程序自己山寨一个,我选择在淘宝上花 79.9+邮费买了个第三方的成品,卖家声称获得了 CKLink 的授权,具体不得而知。除了调试器之外,由于调试接口与 TF 卡卡槽的引脚共用,因此最好还有个转接板方便调试,可以从 这个帖子 找到别人设计好的板上嘉立创免费打个板,如何接线可以参考 这个帖子 。

      将转接板插入 TF 卡槽,用杜邦线或者排线连上调试器,随后将调试器 USB 线接上电脑,连接就完成了。

      CKLink_board.jpg

      CKLink_debugger.jpg

      前往 平头哥开发者网站 下载最新版 DebugServer,安装时会自动安装上所需的驱动,安装完成后打开默认开启了 GDB server 服务,可以使用支持 RISC-V 的 GDB 远程调试,软件界面上会给出连接指令,在 GDB 中输入后即可像平时使用 GDB 一样使用了。如需 Windows 版支持 RISC-V 的 GDB 需要自行下载 GDB 源码编译,或者使用 芯来预编译好的 GDB (缺点是编译选项不能自己控制,比如没有编译 TUI 功能)。

      DebugServer 启动后,XFEL 就控制不了内存了。要想使用 FEL 模式的烧录功能,就需要在关闭 server 服务的状态接入 OTG 线进入 FEL 模式,初始化 DDR 并烧入数据,随后不要直接使用 exec 跳转运行,不然可能来不及打断点。此时打开 server,随后运行 GDB,输入远程连接指令连上,先打上断点,再使用 jump 指令跳转到预定的地址。具体步骤见下图。

      CKLink_step.png

      之后调试过程与在 QEMU 中调试区别不大,总得来说还是比较方便的。

      总结

      其实自从购入麻雀后一直没什么机会把玩,在写文的时候才好好试用了一下,跑了一遍日常调试的流程。麻雀给我的最深刻印象就是小、廉价。我印象中的开发板的大小基本是在树莓派那一档,也见别人玩过更大的 FPGA 开发板和更小的 ESP32 和 8266 的板子,但是功能如此强大完整、接口丰富、性能有保证的“迷你电脑”级开发板能做到这个尺寸还是让人非常惊讶的。至于其廉价性是和全志哪吒的开发板相比的,虽然我知道少了很多零部件,但是不到七分之一的价格也着实吓了我一跳,并且功能可以完全满足我们开发玩具操作系统与教学使用了,在促进推广和教学中低廉的成本将是巨大优势(毕竟穷学生hhh)。

      最后还是希望大家可以多多支持我们正在开(gu)发(gu)中的教学操作系统项目,为我们加一个 star😂。

      1 Reply Last reply Reply Quote Share 2
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策