Lichee RVでubuntu20.04を動かす

# 1.Lichee RVとは
Lichee RVとは、Sipeed社の超小型SBCです。CPUにはD1chipというRISK Vプロセッサを搭載しています。少し前に同じCPUを搭載した[Nezha](https://ja.aliexpress.com/item/1005002856721588.html?pdp_ext_f=%7B%22sku_id%22:%2212000022485490245%22,%22ship_from%22:%22%22%7D&gps-id=pcStoreJustForYou&scm=1007.23125.137358.0&scm_id=1007.23125.137358.0&scm-url=1007.23125.137358.0&pvid=1906b2ce-ea6d-4d55-b27f-c44b0a50210f&spm=a2g0o.store_pc_home.smartJustForYou_6001928813305.3)という比較的リッチなSBCが発売されましたが、Lichee RVは最小限の構成でSBC化し、dockパーツに搭載して機能拡張するという思想のようです。（合体ギミックはロマン）
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/fba5f856-5ea4-224c-c42a-fb875383840f.png">
この小さなボード単体か、1.14inch 135x240dotの液晶ディスプレイとのセットで[購入できます。]
(https://ja.aliexpress.com/item/1005003594875290.html?spm=a2g0o.productlist.0.0.161227daivjPCl&algo_pvid=de3b1aa5-a053-46c5-be67-29cfe28b7878&algo_exp_id=de3b1aa5-a053-46c5-be67-29cfe28b7878-2&pdp_ext_f=%7B%22sku_id%22%3A%2212000026453901221%22%7D&pdp_pi=-1%3B2620.0%3B-1%3B-1%40salePrice%3BJPY%3Bsearch-mainSearch)

まだ入手できていませんが、480×480のタッチパネルディスプレイ付きの[「Panel」](https://ja.aliexpress.com/item/1005003684310743.html?spm=a2g0o.productlist.0.0.16e627daZhv5YK&algo_pvid=b8a66baf-9a2f-4e4b-9578-b85f73661aca&algo_exp_id=b8a66baf-9a2f-4e4b-9578-b85f73661aca-1&pdp_ext_f=%7B%22sku_id%22%3A%2212000026794538476%22%7D&pdp_pi=-1%3B7281.0%3B-1%3BJPY+791%40salePrice%3BJPY%3Bsearch-mainSearch)か、HDMI出力可能のディスプレイ無し[「Dock」](https://ja.aliexpress.com/item/1005003751298305.html?spm=a2g0o.productlist.0.0.16e627daZhv5YK&algo_pvid=b8a66baf-9a2f-4e4b-9578-b85f73661aca&algo_exp_id=b8a66baf-9a2f-4e4b-9578-b85f73661aca-0&pdp_ext_f=%7B%22sku_id%22%3A%2212000027039703537%22%7D&pdp_pi=-1%3B3579.0%3B-1%3B-1%40salePrice%3BJPY%3Bsearch-mainSearch)が発売されていて、機能拡張できるようです。
Panelは、IoTのコントローラーの様な使い方を想定している様です。DockはHDMI出力とGPIOがついていて、RasPiに近い使い方ができそうです。PanelやDockへは、M.2 B-key X 2という見慣れない方法で接続します。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/939f5695-8a4c-ff17-4fd2-508a01c7bdce.png">
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496179/6895b87d-0073-af4d-2396-88e6c5a2e610.png">

# 2.起動用MicroSD作成
liche RVはRaspberry Piなどと同様、MicroSD Card(TF Card)から起動します。
目の前にRPiがあるのでこれを使って起動用SDを作りますが、linuxマシンならなんでもいけるはずです。

OSのイメージは[こちら](https://mega.nz/folder/lx4CyZBA#PiFhY7oSVQ3gp2ZZ_AnwYA/folder/xtxkABIB)で配布されています。いくつかのOSイメージがありますが、今回使用するのは「licheerv_d1_1.14lcd_ub2004.tgz」です。
適当なフォルダでファイルを解凍します。

```sh
$ tar zxvf licheerv_d1_1.14lcd_ub2004.tgz
licheerv_d1_ub2004_20220104a/
licheerv_d1_ub2004_20220104a/readme
licheerv_d1_ub2004_20220104a/ub2004_rootfs.img
licheerv_d1_ub2004_20220104a/d1-kernel.toc1
licheerv_d1_ub2004_20220104a/boot0_sdcard_sun20iw1p1.bin
```

解凍先のフォルダに移動して作業を続けます。

```sh
$ cd licheerv_d1_ub2004_20220104a
```


基本的な起動用SDカードの作り方はreadmeに書かれている通りです。

```
1. A tf size sd/mmc card (/dev/mmcblk0 here)

2. clean up old disk information
	- umount all partition if needed
	$ sudo wipefs -a /dev/mmcblk0

3. create a primary partition using fdisk (/dev/mmcblk0p1)
	- /dev/mmcblk0p1 for rootfs, used as command line parameter compiled to kernel by now.
	- /dev/mmcblk0p1 should be start from sector 81920 (40MB reserved for spl and kernel)

4. write data to sd/mmc
	- $ sudo dd if=boot0_sdcard_sun20iw1p1.bin of=/dev/mmcblk0 bs=512 seek=16
	- $ sudo dd if=d1-kernel.toc1 of=/dev/mmcblk0 bs=512 seek=32800 status=progress
	- $ sudo dd if=ub2004_rootfs.img of=/dev/mmcblk0p1 bs=1M status=progress
```

このREADMEの内容に沿って作業を進めます。
最初の行はTFサイズのカード（MicroSD）を使えとあります。手元に16GBのMicroSDがありますのでこれを使います。
この作業ではMicroSDへのデータを書き込みを行いますが、RPi自体のOSもMicroSDにインストールされています。間違えて消してしまうと大参事ですので、先にデバイスの状況を確認しておきます。

lsblkコマンドでデバイスを確認すると次の通りでした。mmcblk0というのがRPiの起動用MicroSDで、二つのパーティションに分かれている様です。

```sh
$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0 29.8G  0 disk 
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0 29.5G  0 part /
```

続いて、USBカードリーダーに空のMicroSDをセットしてRPiに挿入して同様に確認すると、

```sh
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 14.8G  0 disk 
└─sda1        8:1    1 14.8G  0 part /media/pi/BOOT
mmcblk0     179:0    0 29.8G  0 disk 
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0 29.5G  0 part /
```

とあります。「sda」というのが新たに挿入したMicroSDで、「sda1」というパーティションがマウントされていることがわかりました。

マウントされているとパーティションを消せないので先にアンマウントします。

```sh
$ sudo umount /dev/sda1
```

パーティションをクリアします。

```sh
$ sudo wipefs -a /dev/sda
/dev/sda: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sda: calling ioctl to re-read partition table: 成功です
```

続いてパーティションを作成します。

```sh
$ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xcc24c714.

Command (m for help): n    <==新しいパーティションを作成する場合は「n」
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p      <==プライマリーを作成するので「p」
Partition number (1-4, default 1): 1
First sector (2048-31207423, default 2048): 163840     <==推奨の81920では動かない様なので倍の16340
Last sector, +/-sectors or +/-size{K,M,G,T,P} (163840-31207423, default 31207423):    <==今回は起動させるだけなので残りの領域全部を一つのパーティションにします。

Created a new partition 1 of type 'Linux' and of size 14.8 GiB.

Command (m for help): w     <==書き込んで終了するので「w」
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
```

パーティションが作成できたか確認してみましょう。

```sh
blk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 14.8G  0 disk 
└─sda1        8:1    1 14.8G  0 part 
mmcblk0     179:0    0 29.8G  0 disk 
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0 29.5G  0 part /
```

パーティションが作成できていたらOSに必要なファイルを書き込みます。

```
$ sudo dd if=boot0_sdcard_sun20iw1p1.bin of=/dev/sda bs=512 seek=16
96+0 レコード入力
96+0 レコード出力
49152 bytes (49 kB, 48 KiB) copied, 0.0239097 s, 2.1 MB/s
$ sudo dd if=d1-kernel.toc1 of=/dev/sda bs=512 seek=32800 status=progress
27058688 bytes (27 MB, 26 MiB) copied, 8 s, 3.4 MB/s 
59194+0 レコード入力
59194+0 レコード出力
30307328 bytes (30 MB, 29 MiB) copied, 9.07536 s, 3.3 MB/s
$ sudo dd if=ub2004_rootfs.img of=/dev/sda1 bs=1M status=progress
507510784 bytes (508 MB, 484 MiB) copied, 11 s, 46.1 MB/s
496+1 レコード入力
496+1 レコード出力
520318976 bytes (520 MB, 496 MiB) copied, 14.2932 s, 36.4 MB/s
```

MicroSDをlicheeRVに挿して、USBから電源を供給したら・・・・動きました(^^)
<iframe width="560" height="315" src="https://www.youtube.com/embed/3OsriHqmDnI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# 3.ログインして様子を見てみる

デフォルトのuser/passはroot/2183abc
https://twitter.com/SipeedIO/status/1478538364915650563