Orange Pi 5でAndroid/Linux共にM.2 SATA SSDから起動できるようになった


Orange Pi 5の中国語DownloadページのAndroid镜像リンクをたどってみたところ、SPIFlash-SATA SSDというディレクトリが・・・

え?と思って、ダウンロードしてRKDevToolを使って書き込みを試して見るも「Switch into SATA storage Fail, did not support to switch in」というエラーで成功しない。

改めて中国ページの官方工具にあるマニュアルを確認してみると「OrangePi_5_RK3588S_用户手册_v0.7.pdf」と英語ページにあるマニュアルよりだいぶバージョンが上がっている。

ただ、M.2 SATA SSDからAndroidを起動する場合の書き込み手順について違う点はなく、原因は不明・・・

(注:最終的にはLinux側でSPIFlashを書き換えるとAndroidの書き込みが成功するようになりました。)

LinuxをM.2 SATA SSDから起動

その他にないかマニュアルを読み直すとM.2 SATA SSDからLinuxを起動する手順が掲載されているので、そちらを試行してみた。

マニュアル上の重要なポイントは以下

実際にやってみる。

まずSPIFlashの書き換えに使うファイルを確認

orangepi@orangepi5:~$ ls -ld /usr/share/orangepi*
drwxr-xr-x 2 root root 4096 Dec 22 19:36 /usr/share/orangepi
drwxrwxr-x 2 root root 4096 Dec 12 17:58 /usr/share/orangepi5
orangepi@orangepi5:~$ ls -l /usr/share/orangepi
total 4
-rw-r--r-- 1 root root 3269 Dec 22 19:34 boot.cmd
orangepi@orangepi5:~$ ls -l /usr/share/orangepi5/
total 16384
-rw-rw-r-- 1 root root 16777216 Dec 12 17:58 rkspi_loader_sata.img
orangepi@orangepi5:~$

SPIFlashを書き換えます。

orangepi@orangepi5:~$ sudo dd if=/usr/share/orangepi5/rkspi_loader_sata.img of=/dev/mtdblock0
[sudo] password for orangepi:
32768+0 records in
32768+0 records out
16777216 bytes (17 MB, 16 MiB) copied, 244.953 s, 68.5 kB/s
orangepi@orangepi5:~$

現状のM.2 SATA SSD上のブートローダ、パーテーションをddでzeroを書き込んで消します。

orangepi@orangepi5:~$ sudo dd bs=1M if=/dev/zero of=/dev/sda count=2000 status=progress
1754267648 bytes (1.8 GB, 1.6 GiB) copied, 2 s, 877 MB/s
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 5.5852 s, 375 MB/s
orangepi@orangepi5:~$
orangepi@orangepi5:~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WT M.2 512G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
orangepi@orangepi5:~$

次にmicroSD上にコピーしておいたLinuxイメージをM.2 SATA SSDに書き込みます。

orangepi@orangepi5:~$ sudo dd if=Orangepi5_1.0.8_ubuntu_jammy_desktop_xfce_linux5.10.110.img of=/dev/sda bs=1M status=progress
8129609728 bytes (8.1 GB, 7.6 GiB) copied, 119 s, 68.3 MB/s
7800+0 records in
7800+0 records out
8178892800 bytes (8.2 GB, 7.6 GiB) copied, 121.861 s, 67.1 MB/s
orangepi@orangepi5:~$

書き込み完了後のパーテーションはこのようになります

orangepi@orangepi5:~$ sudo sync
orangepi@orangepi5:~$ sudo fdisk -l /dev/sda
GPT PMBR size mismatch (15974399 != 1000215215) will be corrected by write.
The backup GPT table is not on the end of the device.
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WT M.2 512G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 58FCCC02-859A-5041-ADA7-14802AADF341

Device      Start      End  Sectors  Size Type
/dev/sda1   61440   585727   524288  256M Linux extended boot
/dev/sda2  585728 15974366 15388639  7.3G Linux filesystem
orangepi@orangepi5:~$

書き込んだM.2 SATA SSDの/dev/sda1 にあるorangepiEnv.txtを書き換えるためにマウントします。

orangepi@orangepi5:~$ sudo mount /dev/sda1 /mnt
orangepi@orangepi5:~$ df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       256M   95M  162M  37% /mnt
orangepi@orangepi5:~$ ls -l /mnt
total 96104
-rwxr-xr-x 1 root root   230456 Dec 22 19:39 boot.bmp
-rwxr-xr-x 1 root root     3269 Dec 22 19:34 boot.cmd
-rwxr-xr-x 1 root root     3341 Dec 22 19:51 boot.scr
-rwxr-xr-x 1 root root   215221 Dec 22 18:24 config-5.10.110-rockchip-rk3588
drwxr-xr-x 3 root root     4096 Dec 22 19:36 dtb
drwxr-xr-x 3 root root     4096 Dec 22 19:36 dtb-5.10.110-rockchip-rk3588
-rwxr-xr-x 1 root root 33915392 Dec 22 18:24 Image
-rwxr-xr-x 1 root root 11119990 Dec 22 19:54 initrd.img-5.10.110-rockchip-rk3588
-rwxr-xr-x 1 root root      154 Dec 22 19:51 orangepiEnv.txt
-rwxr-xr-x 1 root root     1542 Dec 22 19:48 orangepi_first_run.txt.template
-rwxr-xr-x 1 root root  7853912 Dec 22 18:24 System.map-5.10.110-rockchip-rk3588
-rwxr-xr-x 1 root root 11120054 Dec 22 19:54 uInitrd
-rwxr-xr-x 1 root root 33915392 Dec 22 18:24 vmlinuz-5.10.110-rockchip-rk3588
orangepi@orangepi5:~$

orangepiEnv.txtの最後に「overlays=ssd-sata」を追加します。

orangepi@orangepi5:~$ sudo cp /mnt/orangepiEnv.txt /mnt/orangepiEnv.txt.org
orangepi@orangepi5:~$ sudo vi /mnt/orangepiEnv.txt
orangepi@orangepi5:~$ cat /mnt/orangepiEnv.txt
verbosity=1
bootlogo=true
overlay_prefix=rk3588
fdtfile=rockchip/rk3588s-orangepi-5.dtb
rootdev=UUID=5ead0754-b05b-4f29-8170-b0620e7ae6d2
rootfstype=ext4
overlays=ssd-sata
orangepi@orangepi5:~$

書き込んだらumount

orangepi@orangepi5:~$ sudo umount /mnt
orangepi@orangepi5:~$

このあと、microSDを抜いて、M.2 SATA SSDのみで電源を入れると、M.2 SATA SSDから起動しました。

orangepi@orangepi5:~$ sudo fdisk -l /dev/sda
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: WT M.2 512G
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 58FCCC02-859A-5041-ADA7-14802AADF341

Device      Start       End   Sectors   Size Type
/dev/sda1   61440    585727    524288   256M Linux extended boot
/dev/sda2  585728 990183423 989597696 471.9G Linux filesystem
orangepi@orangepi5:~$

Android再挑戦

Linux側でSPIFlashを書き換えたあとであれば成功するかな?と試してみたところ、これまで失敗していたところは問題無く終了し、書き込みが実行されるようになりました。

(microSDをさしっぱなしにしていると途中で失敗するので注意)

Androidの書き込み完了後は自動的に再起動されAndroidが起動します。

なお、起動したAndroidは、WiringOPアプリが追加されている以外はあまり違いがないような感じでした。


2023/01/12追記

新しいM.2 SATA SSDが届いたので、Androidイメージを書き込むべく、とりあえず「sudo dd if=/usr/share/orangepi5/rkspi_loader_sata.img of=/dev/mtdblock0」を行ったあとに、RKDevToolで書き込みを実施してみましたが、書き込みはfailしました。

「sudo dd if=Orangepi5_1.0.8_ubuntu_jammy_desktop_xfce_linux5.10.110.img of=/dev/sda bs=1M status=progress」でLinuxイメージを書き込み、一度起動させたあとで、RKDevTool書き込みを試すと、成功しました。

(このとき、Linuxを書き込んだあとのorangepiEnv.txt 修正を忘れたので、Linux起動が途中で失敗してinitramfsで止まりましたが、電源強制オフのあと、Android書き込みには問題ありませんでした。)

Orange Pi 5のまとめ 2023/01/13版


Orange Pi 5 が届いた」を始めにいろいろOrange Pi 5に関する記事をいろいろ書いていったら探しにくくなってしまっているので、まとめ記事を作成しました。

この記事の更新履歴

2023/01/07: 作成
2023/01/13: Chromium OS(openFyde)について追加。microSDとM.2 SSDの優先順位について修正。M.2 SATA SSDの入れ替えに関して追加

仕様について

M.2スロットで使用できるもの

・M.2 NVMe SSD(M-key)

M.2 M-keyで使えるSSDには、M.2 NVMe SSDとM.2 SATA SSDの2種類があります。

Orange Pi 5の公式仕様としてはM.2 NVMe SSDが使用できる、ということになっています。

Orange Pi 5ではM.2 NVMe SSDの2242が適切なサイズですが、日本で買うと高いです。

aliexpressでは日本の半額程度で買え、2週間程度で届きます。

私はKingSpecというメーカの512GBを買いました。詳細は「aliexpressでM.2 2242サイズのSATAとNVMeを買ってみた

・コンバーターボード経由でM.2のA/E-keyのWiFiカード

本来はA/E-keyのM.2はM-keyにさすことが出来ませんが、コンバーターボードを使うことでさすことができます。

詳細については TechnicaLifeさん「Orange Pi 5 で Intel AX200 Wi-Fi を使う」にて

・限定的にM.2 SATA SSD(M-key)

2023/01/07時点ではOrange Pi 純正Ubuntu/Debianで使える手法ですが、microSDからLinuxを起動したあと、ssd-sataというkernelモジュールを読み込むことでM.2 SATA SSDを利用することができるようになります。

詳細「Orange Pi 5でデータディスクとしてならM.2 SATAも使える

2022/12/23に中国サイトでのみリリースされてたAndroidイメージではM.2 SATAから起動できるイメージなるものがありました。(いま気がついたのでダウンロード中です)

中国サイトのマニュアルにLinux/AndroidでM.2 SATA SSDから起動するための手順が書かれていました。
詳細「Orange Pi 5でAndroid/Linux共にM.2 SATA SSDから起動できるようになった

microSD起動とM.2 SSD起動の切り替え

microSDとM.2 SSDを両方入れている場合にどちらを優先するか、というあたりはnand領域に書き込んで設定しているようです。 基本的には起動できるmicroSDがあればそちらから起動するようです。

どちらかしかさしていない状態であれば、さしているデバイスから起動するようになっているようです。

このため、うちではM.2 NVMe SSDから起動するように設定した後、他のOS環境を試す際は、一度M.2にさしたSSDを取り外して、microSDのみにして起動しています。

M.2 NVMe SSD起動とM.2 SATA SSD起動の切り替え

「Androidを書き込んだM.2 NVMe SSD」と「Androidを書き込んだM.2 SATA SSD」をさしなおして環境をかえられるかな?とやってみましたが、無理でした。

SPIFlashの内容を書き換えないと駄目なようですが、RKDevToolで自動化されている作業を手動でできるのかが不明です。

なお、RKDevToolを使って、M.2 SSDをフォーマット/書き換えすれば切り替え自体はできました。

M.2 SATA SSDのLinuxとM.2 SATA SSDのAndroidの切り替え

M.2 SATA SSDを2枚用意して、差し替えることで起動を切り替えられるか試してみましたが上手くいきませんでした。どうやらLinux起動用の設定とAndroid起動用の設定は違うようです。

Linuxについて

Orange Pi純正のUbuntu/Debianの他に、2022年末にarmbianのベータ版公開が始まりました。

Orange Pi純正は2023年1月にも更新されてv1.0.8(年末はv1.0.6だった)になっていますが、v1.0.6からv1.0.8相当にアップデートする手法がわからない、というのが難点です。

GPUドライバがない件

2023/01/07時点ではOrange Pi純正もarmbianも初期設定では、ソフトウェア処理となっていて、SoCに含まれているGPUが有効活用されていません。

Panfrost GPU driverを適用するとSoCのGPUが活用できます。

Orange Pi 5純正のUbuntuのGPU表示を高速化できるのか?」で試したのですが、確かに数値としては速くなったものの全体的な動きに問題がありました。

armbianの方は、armbianのページにかかれている解説の通りに実行するこで組み込み正常動作はするのですが、あまり変化がなく微妙でした・・・

また、2023/01/03リリースの Orangepi5_1.0.8_ubuntu_jammy_desktop_xfce_linux5.10.110.img で起動した際、初期状態の /etc/chromium-browser/default に対して「CHROMIUM_FLAGS=”-use-gl=egl”」という変更を加えたところ、それだけで、chromiumブラウザ上でのWebアクアリウムがfps:3からfps:60に改善されるという状況に・・・

2023/01/07時点ではGPU周りはまだ混沌としている感じです。

Androidについて

2023/01/07時点で公式から配布されているAndroidイメージにはGoogle Playは含まれていません。
→「Orange Pi 5をAndroid 12で動かす

中国サイトにあるOrange Pi OS(Droid)にも含まれていませんでした。
→「Orange Piの中国サイトからだとOrange Pi OS(Droid)が入手できる

じゃあ、Google Playが使えないか、というとそうでもなくて、Androidの開発者向けオプションにあるDSU Loader機能を使うとなんとか使えるようになる、というのを発見しました。
→「Orange Pi 5用Android 12からGSIイメージの汎用Androidを起動する

また、Orange Piの中国サイトで2022/12/23にリリースされたAndroidイメージはM.2 SATA SSDから起動できるものがあるようです。(いま気がついたのでダウンロード中です…)

ためした限りではAndroid部分はWiringOPというGPIO関連のテストを行うアプリが追加されていましたが、それ以外はあまり差がないようでした。

Chromium OSについて

ChromeBookなどで使われているChromeOSには、オープンソースのみで構成されているChromium OSというものがあります。

このChromium OSをベースとしていろんな機種で動作させるようにするプロジェクトがいくつかあり、その1つのFydeOSという商業ベースのものがあります。

このFydeOSのオープンソース版は以前からあったのですが2022年になってからopenFydeという名称を付けて展開を始めています。このopenFydeで2023/01/07からOrange Pi 5向けの開発と提供が始まっていました。

さっそく導入してみました→「Orange Pi 5でChromium OS(openFyde)を動かす

ChromeアプリやLinuxについては特に問題無く動いています。音声出力にも問題はありません。

富士通LIFEBOOK S937/RとFUTRO MU937は16GB SO-DIMMが増設できてメモリ20GB構成になる


AmazonタイムセールでSO-DIMM DDR4 2666MHz PC4-21300 16GBx2枚組で9,980円というものがあった

そして、上記商品は「返品可能」商品となっていた。

ということは、メーカからは8GB SO-DIMM増設オプションが最大となっているLIFEBOOK S937/RFUTRO MU937が実は16GB SO-DIMMが使えたりしないか検証できるな、ということで買ってみた。

まずは開けやすいLIFEBOOK S937/Rから

続いてFUTRO MU937

どちらも標準の4GB+16GB=20GBとして認識しました。

Windows 10をインストールしてるFUTRO MU937でのタスクマネージャー表示を確認

まず標準状態はコレ

16GB SO-DIMMを増設した後の表示はコレ

オンボードメモリが2133MHzなのでそこに揃う感じですね。

フォームファクターがオンボードだけだと「Row of chips」という表記だったのが「SODIMM」に代わってますね。


2023/02/22追記

メモリがシングルチャネルなのかデュアルチャネルなのか?というのをcpu-zを起動して確認してみた

MU937での結果

U938/Sでの結果

Vision Five 2のM.2 M-keyスロットは現状NVMe SSDが使える


StarFive Vision Five2のM.2 M-keyスロットにまずはM.2 NVMe SSDを入れてみた

root@starfive:~# fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: Samsung SSD 970 EVO 500GB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 99EF5891-2C9A-4C91-8A1C-6C1E833E08C4

Device             Start       End   Sectors   Size Type
/dev/nvme0n1p1        34     32767     32734    16M Microsoft reserved
/dev/nvme0n1p2     32768 614432767 614400000   293G Microsoft basic data
/dev/nvme0n1p3 614432768 976771071 362338304 172.8G unknown
root@starfive:~#

まあ、普通に使える。

次に、M.2 SATA SSDを入れてみたが認識はしなかった。

また、Orange Pi 5みたいに ssd-sata モジュールを読み込ませることで認識しないかな?と探してみましたが、Image-69の中には「ssd-sata」という名前がつくファイルは存在しませんでした。

ということで、2022/12/30時点では、Vision Five 2のM.2 M-KeyスロットはM.2 NVMe SSDが利用できるようです。

StarFive Vision Five 2の2022年12月出荷分を使うには面倒くさい手順が必要


StarFiveのRISC-Vコア搭載SoCのJH7110のVision Five 2をKickstarter クラファンのSuper Early Bird – 4GB version が届いた。

しかし、こいつ、いろいろ面倒くさい状態でした。

2022年12月出荷の Vision Five 2は、起動に使われるSPLとU-Bootを更新しないと、Quick Start Guideで案内されているDebianの2022/12/26付けのImage-69版の起動に失敗しました。

更新するには若干面倒な手順が必要でした。

資料について

Vision Five 2に関する資料 は https://doc-en.rvspace.org/Doc_Center/visionfive_2.html を起点に探せる

Quick Start Guide 内にDebianイメージのダウンロードURLが書かれています。

また、githubにStarFiveTech VisionFive2 SDK があり、上記のDebianをソースからビルドする際に必要なモノが揃っています。

用意するもの

・TTLシリアル

シリアルコンソール接続じゃないとSPL/U-Bootの更新作業が行えませんでした。

StarFiveTech VisionFive2 SDKsdcard.img

Debianイメージだと更新に必要な/proc/mtdと/dev/mtd* が作られていませんでした。
SDKサイトにあるsdcard.img は Buildrootと呼ばれる最小構成のLinuxイメージですが、更新に必要なものが揃っていました。

なお、今回使用したのはv2.5.0のsdcard.imgです。

・VisionFive2用のDebianイメージ

最終的にはこのDebianで起動して使う感じです。

更新しないと何が起こるか

SPLとU-Bootを更新しないと何が起こるのか?というと、Debianイメージ2022/12/20付けのImage-55じゃないと起動できませんでした。

更新しない状態で2022/12/26付けImage-69を起動しようとすると、U-Bootの段階でファイルの選択に失敗して起動ができませんでした。

1)TTLシリアルで接続する

SPL/U-Bootを更新するにはUSB-TTLシリアルアダプタを使ってシリアル接続して操作しないとなりません。

繋ぐ場所はQuick Start Guideの Using a USB to Serial Converter for Windowsに書いてある様にGPIO端子です。

2)Buildrootで起動

まずはStarFiveTech VisionFive2 SDKのsdcard.imgをmicroSDに書き込んで起動します。

起動後、ログインして、/dev/mtd*と/proc/mtdがあることを確認します。

# ls -l /dev/mtd*
crw-------    1 root     root       90,   0 Jan  1 00:00 /dev/mtd0
crw-------    1 root     root       90,   1 Jan  1 00:00 /dev/mtd0ro
crw-------    1 root     root       90,   2 Jan  1 00:00 /dev/mtd1
crw-------    1 root     root       90,   3 Jan  1 00:00 /dev/mtd1ro
crw-------    1 root     root       90,   4 Jan  1 00:00 /dev/mtd2
crw-------    1 root     root      `90,   5 Jan  1 00:00 /dev/mtd2ro
brw-rw----    1 root     disk       31,   0 Jan  1 00:00 /dev/mtdblock0
brw-rw----    1 root     disk       31,   1 Jan  1 00:00 /dev/mtdblock1
brw-rw----    1 root     disk       31,   2 Jan  1 00:00 /dev/mtdblock2
# ls -l /proc/mtd*
-r--r--r--    1 root     root          `  0 Jan  1 00:09 /proc/mtd
#

3)更新用ファイルの転送

StarFiveTech VisionFive2 SDKの「u-boot-spl.bin.normal.out」と「visionfive2_fw_payload.img」を別のPCでダウンロードしてからscpコマンドなどでBuildrootのLinux内に転送します。

BuildrootのLinuxはsshdが動いており、rootユーザのログインも許可されているので、TeraTermなどから接続して、scpでコピーすると良いでしょう。

4)SPLとU-bootを更新する

更新手順はQUick Start Guideの「Updating SPL and U-Boot」にあるよう書き込みます。
 ・boot-spl.bin.normal.outを /dev/mtd0
 ・visionfive2_fw_payload.img を /dev/mtd1

書き込みはflashcpコマンドを使います

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00020000 00001000 "spl"
mtd1: 00300000 00001000 "uboot"
mtd2: 00100000 00001000 "data"
# flashcp -v u-boot-spl.bin.normal.out /dev/mtd0
Erasing blocks: 32/32 (100%)
Writing data: 124k/124k (100%)
Verifying data: 124k/124k (100%)
# flashcp -v visionfive2_fw_payload.img /dev/mtd1
Erasing blocks: 682/682 (100%)
Writing data: 2727k/2727k (100%)
Verifying data: 2727k/2727k (100%)
#

5) 再起動して反映

再起動するとSPLとU-Bootが更新された状態で起動します。

起動が確認できたら、停止します。

6) Debianイメージで起動

Debianイメージを書き込んだmicroSDに差し替えて電源を入れると、Image-69版のDebianイメージが起動します。

ただ、電源をいれてからX画面が出るまではHDMIには何も出力されないことに注意が必要です。(シリアルコンソールに出力されています)