背景:感触を得るためUIAPduinoでLチカする*1
取り組み:軽量のビルド環境(ch32fun)を構築、サンプルコードをビルドして焼く
結論:RISC-V用ビルド環境はできた。まだ焼いていないが、Ubuntu環境からCH32V003に焼くためのFlashライタもできた(エラー出ないので多分OK)
詳細:
ネット上で情報を集めるには自分で知識を再構築する能力が必要となり時間がかかるので、、一冊で全体を見通せることを期待して「CH32V003開発ガイドブック」を発注(boothでPDF版購入)
booth.pm
ざっと読んだ印象として、この本は、Arduino環境、MounRiver Studio、ch32funの3環境での開発方法が整理されており非常に分かりやすい。優れた章立てのお陰で自分が欲しい情報がどこにあるか分かって読むべき章が分かる。迷った時に読み返すと道筋が見えて、細かい所はClaude等に質問したら問題も解決できると思う。
Ubuntu環境でビルド環境を揃えるとして、ビルドツールは、一番コンパクトにバイナリが作れる、ch32funを使う。Ubuntu環境を汚したくないので、Dockerコンテナ内にRISC-Vコンパイルツール一式をインストールしてコンテナ内でコンパイルをする方針。ライター(WCH-LinkE)は安いから追加で買うつもりだが、当面はUIAPduinoに専用ファーム(rvswlink?)を焼いて、minichlinkから呼び出してマイコンのFlashにコードを焼く*2
wiki を見て、おおよそ以下のパッケージ入りのコンテナを作ればよいのかと。。 そのままではコンテナからUSBは使えないようで、追加の作法が必要なのだった。
Debian and WSL
apt-get install build-essential libnewlib-dev gcc-riscv64-unknown-elf libusb-1.0-0-dev libudev-dev gdb-multiarch
ただ、、上記はRISC-V用のビルド環境と思われ、書き込みツールのminichlinkは作られるのだろうか?*3
コンテナ環境であることを無視すると、ビルドツールを入れた後の作業は以下らしい
# 1.リポジトリをClone
git clone https://github.com/cnlohr/ch32fun.git
# 2. minichlink のビルド
cd ch32fun/minichlink
make
# 3. サンプルに移動して動作確認
cd ../examples/blink
make
#4. minichlinkを駆使してFlashに焼く(ここはトラブルだろう)
BestPracticeではないが、、以下のDockerfileでイメージ構築
# select base image; debian:bookworm-slim
FROM debian:bookworm-slim
# create work directory
WORKDIR /workspace
# install packages
RUN apt-get update && apt-get install -y \
build-essential \
libnewlib-dev \
gcc-riscv64-unknown-elf \
libusb-1.0-0-dev \
libudev-dev \
gdb-multiarch \
git \
&& rm -rf /var/lib/apt/lists/*
CMD ["/bin/sh"]IMAGE_NAME=ch32v_buildenv
docker build -t $IMAGE_NAME .
$ docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
ch32v_buildenv:latest 93caf30835cd 806MB 0Bsudo apt install gh
gh auth login
gh repo clone cnlohr/ch32fun
ls -F
ch32fun/
$ ls -F
build_scripts/ examples_h41x/ examples_v20x/ extralibs/ package.json
ch32fun/ examples_l103/ examples_v30x/ LICENSE platformio.ini
examples/ examples_usb/ examples_x00x/ minichlink/ projects/
examples_ch5xx/ examples_v10x/ examples_x035/ misc/ README.md
リポジトリがローカルに配置できたので、ここを作業場所としてマウントしつつコンテナを起動する
$ ls -F
ch32fun/
$ pwd
/home/<ID>/tech/uc/ch32v
教科書通り、起動した後は消すという事なら以下で起動
docker run -it --rm -v /home/<id>/tech/uc/ch32v:/workspace ch32v_buildenv:latest
以下でminichlinkをビルド
cd minichlink/
make
とりあえず走らせてみる->怒られる
# ./minichlink
WARNING: You are not in the plugdev/dialout group, the canned udev rules will not work on your system.
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
コンテナから出て素のUbuntuでツールを実行する。それでも同じように怒られる。ただ、、コンテナ内だと、グループに対して怒られているが、このお叱りはなくなって、素のUbuntuでは書き込みツールが無いと怒らている。だとすると、、UIAPduinoをリセット起動してHIDにしておけばそのまま書けるのか?
$ ./minichlink
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
DeskTopのUbuntuに接続したがどうも認識されないような。。dmesgの内容は以下。usbとして接続エラーのような
[ 8548.418136] usb 2-1.4: New USB device found, idVendor=1209, idProduct=b803, bcdDevice= 1.41
[ 8548.418147] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 8548.418151] usb 2-1.4: Product: 32V003
[ 8548.431555] hid: raw HID events driver (C) Jiri Kosina
[ 8548.434974] usbcore: registered new interface driver usbhid
[ 8548.434977] usbhid: USB HID core driver
[ 8548.438616] hid-generic 0003:1209:B803.0001: hiddev0,hidraw0: USB HID v1.10 Device [32V003] on usb-0000:00:1a.0-1.4/input0
[ 8572.462574] usb 2-1.4: USB disconnect, device number 7
[ 8580.135763] usb 2-1.4: new low-speed USB device number 8 using ehci-pci
[ 8580.201762] usb 2-1.4: device descriptor read/64, error -32
[ 8580.369761] usb 2-1.4: device descriptor read/64, error -32
[ 8580.535759] usb 2-1.4: new low-speed USB device number 9 using ehci-pci
[ 8580.601759] usb 2-1.4: device descriptor read/64, error -32
[ 8580.769760] usb 2-1.4: device descriptor read/64, error -32
[ 8580.871886] usb 2-1-port4: attempt power cycle
[ 8581.451750] usb 2-1.4: new low-speed USB device number 10 using ehci-pci
[ 8581.863746] usb 2-1.4: device not accepting address 10, error -32
[ 8581.927747] usb 2-1.4: new low-speed USB device number 11 using ehci-pci
[ 8582.343740] usb 2-1.4: device not accepting address 11, error -32
[ 8582.343873] usb 2-1-port4: unable to enumerate USB device
[ 8931.231866] usb 2-1.4: new low-speed USB device number 12 using ehci-pci
[ 8931.296868] usb 2-1.4: device descriptor read/64, error -32
[ 8931.465870] usb 2-1.4: device descriptor read/64, error -32
[ 8931.631873] usb 2-1.4: new low-speed USB device number 13 using ehci-pci
[ 8931.697876] usb 2-1.4: device descriptor read/64, error -32
[ 8931.865877] usb 2-1.4: device descriptor read/64, error -32
[ 8931.968043] usb 2-1-port4: attempt power cycle
[ 8932.547889] usb 2-1.4: new low-speed USB device number 14 using ehci-pci
[ 8932.959895] usb 2-1.4: device not accepting address 14, error -32
[ 8933.023898] usb 2-1.4: new low-speed USB device number 15 using ehci-pci
[ 8933.439900] usb 2-1.4: device not accepting address 15, error -32
[ 8933.440030] usb 2-1-port4: unable to enumerate USB device
[ 9351.512103] usb 5-1: new low-speed USB device number 2 using xhci_hcd
[ 9351.691143] usb 5-1: device descriptor read/64, error -71
[ 9351.975171] usb 5-1: device descriptor read/64, error -71
[ 9352.261089] usb 5-1: new low-speed USB device number 3 using xhci_hcd
[ 9352.440171] usb 5-1: device descriptor read/64, error -71
[ 9352.726171] usb 5-1: device descriptor read/64, error -71
[ 9352.829444] usb usb5-port1: attempt power cycle
[ 9353.272094] usb 5-1: new low-speed USB device number 4 using xhci_hcd
[ 9353.274815] usb 5-1: Device not responding to setup address.
[ 9353.486803] usb 5-1: Device not responding to setup address.
[ 9353.692094] usb 5-1: device not accepting address 4, error -71
[ 9353.869095] usb 5-1: new low-speed USB device number 5 using xhci_hcd
[ 9353.871816] usb 5-1: Device not responding to setup address.
[ 9354.078802] usb 5-1: Device not responding to setup address.
[ 9354.284094] usb 5-1: device not accepting address 5, error -71
[ 9354.285420] usb usb5-port1: unable to enumerate USB device
普通につないだ時、0x1209:0xb803として認識される。
root@upkubu01:/var/log# lsusb
Bus 005 Device 006: ID 1209:b803 Generic 32V003
dmesgの結果
[ 9912.347981] usb 5-1: new low-speed USB device number 6 using xhci_hcd
[ 9912.542480] usb 5-1: New USB device found, idVendor=1209, idProduct=b803, bcdDevice= 1.41
[ 9912.542490] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 9912.542494] usb 5-1: Product: 32V003
[ 9912.546969] hid-generic 0003:1209:B803.0002: hiddev0,hidraw0: USB HID v1.10 Device [32V003] on usb-0000:03:00.0-1/input0
root@upkubu01:/var/log# lsusb -v -d 1209:b803
Bus 005 Device 006: ID 1209:b803 Generic 32V003
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
*略*手を放すタイミングだが、、すぐに手を放せと書いている。これを守ってみる。

[10412.417749] usb 5-1: new low-speed USB device number 7 using xhci_hcd
[10412.596832] usb 5-1: device descriptor read/64, error -71
[10412.902179] usb 5-1: New USB device found, idVendor=1209, idProduct=b803, bcdDevice= 1.41
[10412.902189] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[10412.902193] usb 5-1: Product: 32V003
[10412.905725] hid-generic 0003:1209:B803.0003: hiddev0,hidraw0: USB HID v1.10 Device [32V003] on usb-0000:03:00.0-1/input0
0x1209:0xb003(rv003usbのブートローダ専用PID)となってほしいところが、0x1209:0xB803になっている。これは普通のHIDらしい。LEDがもやもやと点滅している状態が書き込みモードと思うのだがデバイスをこの状態にするとHIDとして認識されない。(追記:HIDとして認識されないのは、もやもや点滅はLEDブリンクのデモプログラムでありこの状態ではUSBドライバが走っていない。RESET短押しの状態だとUSBドライバを含むモニタプログラムが走り、OSからはUSBデバイス(1209:B803)として認識される)
いろいろやってみて自分の理解
1. UIAPduinoに焼ける状態となるには、RESETボタンを押しながら電源投入時する。この時、1209:B003となるはず(追記:ボード側は0x1209:0xB803になる)
2. minichlinkから焼く時は、相手が 1209:B003であることを期待する(追記:1209:B003を期待するかもしれないが、Windows版では、0x1209:0xB803でも焼ける。UIAPduino側は問題ない、Ubuntu側での特有の問題が発生している)
3. Ubuntuマシンの場合、RESETボタンを押しながら電源投入しても、USBデバイスは認識エラーとなる。よって、1209:B003としては接続できない(追記:RESETを長押しするからデモプログラムに移行してNGとなる、すぐに離すと、1209:B803になる)
4. UIAPduinoをFlashライターとして仕上げるための回避策としては、実績の多いWindows環境でFlash用ファームを焼いてライタに仕上げるのが良いのでは 。仕上がってからUbuntuマシンに接続して使う(追記:この回避策は効果があった)
Ubuntu環境のminichlinkから出力されるエラー。1209:B003が見つからないと怒っていると思われる
$ ./minichlink
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
(追記):なぜ、1209:B803だと焼いてくれないのかが不明、Windows版だと1209:B803でも書き込みできる。一般権限でminichlinkを走らせている点はテスト誤り(追加試験でroot権限で走らせても同じ結果)
いきなりUbuntuで焼くのはあきらめて、まずはArduino IDEを使って、flashライタ用ファームを焼くことにする。uiapボードのセットアップをすると、必要なツールがインストールされる。メッセージを見ているとどんなツールが入るのかが分かって興味深い。

RESETボタン押しながらUSB接続すると、不明なデバイスとは怒られないが、、デバイスIDは、1209:B803になっている。これでOKなのか? (Resetボタンの細工をしないと、不明なデバイスと怒られる)

Arduino IDEからLチカやってみる

書き込みは成功した

わかりやすくチカっと光らせたいのでタイミングを変更
#define LED_BUILTIN 2
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // change state of the LED by setting the pin to the HIGH voltage level
delay(100); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // change state of the LED by setting the pin to the LOW voltage level
delay(1000); // wait for a second
}元のBlinkを少し修正、手順に従って操作したら一発で書き込みまで完了した。さすがArduino + 作者様のセットアップ。。。
安定してファームが焼けるということで、このままFlashライターに仕立てたいのだが。。Arduino版のFlashライタソースがどこにあるのか。。Claudeに聞いたけど、無さそうだという回答*4
Claudeと話をすると、、Windows版のminichlinkが動いているはずで、minichlinkは書き込みモードのUIAPduinoと通信できるはずだと。だから、Ubuntu 等でビルドしたCH32V003用のFlashライタbin(hex?)をWindows環境に持ってきて直接焼いたらいいのでは?と言ってきた。
UbuntuのRISC-Vビルド環境で以下をビルドすると
github.com
できたHEXかBINをWindows環境のminichlinkでUIAPduinoに焼くと。。
以下でCLONE
gh repo clone cnlohr/rv003usb
以下でコンテナ起動(ch32vでマウントしているので、、このまま使う)
docker run -it --rm -v /home/<id>/tech/uc/ch32v:/workspace ch32v_buildenv:latest
コンテナに入ってrv003usb/rvswdio_programmerでMakeしたらバイナリはできた
-rw-r--r-- 1 root root 32310 Sep 26 11:40 rvswdio_programmer.map
-rwxr-xr-x 1 root root 142808 Sep 26 11:40 rvswdio_programmer.elf
-rw-r--r-- 1 root root 362083 Sep 26 11:40 rvswdio_programmer.lst
-rwxr-xr-x 1 root root 15756 Sep 26 11:40 rvswdio_programmer.bin
-rwxr-xr-x 1 root root 0 Sep 26 11:40 rvswdio_programmer_ext.bin
-rw-r--r-- 1 root root 44330 Sep 26 11:40 rvswdio_programmer.hex
root@accxxxxxa:/workspace/rv003usb/rvswdio_programmer# pwd
/workspace/rv003usb/rvswdio_programmer
binなのか、elf なのか、hexか、どれが焼けるのか分からないが、、とりあえずこれらをwindows環境に転送する
ArduinoからUIAPduinoへの書き込みはminichlinkを使っていて、その時のコマンド配下
"C:\Users\<user_id>\AppData\Local\Arduino15\packages\UIAP\tools\minichlink-2982dfd\1.0.0\minichlink.exe" -w "C:\Users\<user_id>\AppData\Local\arduino\sketches\4A097E6CB27DD9D682B0BD2B63CF3004\Blink.ino.bin" flash
Found UIAPduino Pro Micro CH32V003 V1.4 Bootloader
上記実行パスを流用しつつ、書き込みファイルを、rvswdio_programmer.bin にしたら焼けるはず。
以下で焼くには焼いた。
$ /cygdrive/c/Users/<user_id>/AppData/Local/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink.exe -w rvswdio_programmer.bin flash
Found UIAPduino Pro Micro CH32V003 V1.4 Bootloader
Halting Boot Countdown
Interface Setup
Image written.
ちなみに、、この状態で普通にWindowsPCに接続すると、不明なデバイスとは怒られない。デバイスマネージャではそれらしいデバイスが見つけられず。
Ubuntuでは以下と認識される(dmesg)
[21751.680785] usb 2-1.4: new low-speed USB device number 22 using ehci-pci
[21751.763896] usb 2-1.4: New USB device found, idVendor=1206, idProduct=5d10, bcdDevice= 0.02
[21751.763907] usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21751.763910] usb 2-1.4: Product: RV003 RVSWDIO Programmer
[21751.763913] usb 2-1.4: Manufacturer: CNLohr
[21751.763916] usb 2-1.4: SerialNumber: RVSWDIO003-01
[21751.767483] hid-generic 0003:1206:5D10.0009: hidraw0: USB HID v1.10 Device [CNLohr RV003 RVSWDIO Programmer] on usb-0000:00:1a.0-1.4/input0
root@upkubu01:~# lsusb
Bus 002 Device 022: ID 1206:5d10 CNLohr RV003 RVSWDIO Programmer
素性は以下と認識されている。HIDが当初想定と違っているのだが、このファームは、WCH-LinkE を目指していると書かれていた気が。。
root@upkubu01:~# lsusb -v -d 1206:5d10
Bus 002 Device 022: ID 1206:5d10 CNLohr RV003 RVSWDIO Programmer
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1206 CNLohr
idProduct 0x5d10 RV003 RVSWDIO Programmer
bcdDevice 0.02
iManufacturer 1 CNLohr
iProduct 2 RV003 RVSWDIO Programmer
iSerial 3 RVSWDIO003-01
~/tech/uc/ch32v/ch32fun/minichlink$ sudo ./minichlink -i
WARNING: You are not in the plugdev/dialout group, the canned udev rules will not work on your system.
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
Found rv003-funprog
Programmer firmware version 5.00-201f
There is newer version of programmer firmware available - v.5.20
Error: Setup chip failed. Got code 00000000
Error: Setup chip failed. Got code 00000000
Error: Setup chip failed. Got code 00000000
Error: Setup chip failed. Got code 00000000
Could not setup interface.
すくなくとも、ライタが居ないと怒られることはなくなった。(そもそもUSBを使うにはroot権限が必要なようであった)
ChipSetupのエラーになっているのは、書き込み対象のCH32V003が接続されていないためと思われる。
Claudeからの回答

■試行錯誤振り返り
1. UIAPduinoを書き込みモードでUbuntuに接続してもHIDとして認識されない。Ubuntu環境からUIAPduinoの書き込みモードを使うのはあきらめる
2. 回避策として、Windows版Arduino環境を整えてuiap用ボード環境をセットアップ、UIAPduinoに書き込めることを確認
3. UbuntuでFlashライタ用ファームをビルド(RISC-V用ファーム)
4. Windows環境で、minichlinkを走らせて上記ファームをUIAPduinoに焼く
5. Flash用ファームを焼いたUIAPduinoをUbuntuマシンに接続、Ubuntu上のminichlinkから接続確認->接続正常
どうやってターゲットと接続するのかちょっとわからないのだが、、GitHubの図を引用すると以下

(cnlohr氏のGitHubより)
https://github.com/cnlohr/rv003usb/tree/master/rvswdio_programmer
今回はClaudeと相談しながら構築を進めました。一日でビルド環境構築と、CH32V003用Flashライタ作成までできましたが、一人でやっていたら数日かかっていたと思われる。そもそもゴールまでたどり着けたかどうかも怪しい。。
■再調査
UIAPduinoが書き込み状態の時に、本当にUbuntuから認識できなかったのかを再確認。Youtubeで書き込み動画があり、動画ではRESETボタンをすぐに離されていた。同じことをUbuntuマシンでもやってみた時に、以下のID(1209:b803)で認識されている。このGeneric 32V003のデバイスの状態でminichlinkからライタとして使ってもらえるのかが不明(Claudeは、1209:B003でないと使えないと言っていて、確かに、minchlinkは1209:B003ではないと怒っていた)
$ lsusb
Bus 002 Device 004: ID 1209:b803 Generic 32V003
ただ、、PCの時も1209:B803の状態でArduino IDEから書き込みができたのと、Flashライタとして仕上がったUIAPduinoの接続テスト時、root権限付けずにminchlinkからつなごうとしたら、1209:B003でないと怒られ、root権限付きでminchlinkを動かすと、エラーなく繋がった。なお、この時のIDは、1209:B003ではなく、1206:5d10 であった。だから、、Flashライタとして、何種類かに接続できるように作らていると思われる(ソース読めという感じですが)
一般ユーザ権限で接続テストすると、いつものエラーで怒られる
$ ~/tech/uc/ch32v/ch32fun/minichlink/minichlink
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
root権限でも同じエラーであった。だからFlashライターとしては認められないと。。ボードは電源LEDだけが点灯している状態
$ sudo ~/tech/uc/ch32v/ch32fun/minichlink/minichlink -i
WARNING: You are not in the plugdev/dialout group, the canned udev rules will not work on your system.
minichlink version - bfff1cf2158794a1676d65d1ec2fc1d7d54f555b
VID:0x1209, PID:0xb003
Error: Could not initialize any supported programmers
Ubuntu から見えているデバイス情報は以下
$ sudo lsusb -v -d 1209:b803
Bus 002 Device 004: ID 1209:b803 Generic 32V003
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1209 Generic
idProduct 0xb803 32V003
bcdDevice 1.41
iManufacturer 1
iProduct 2 32V003
iSerial 3
bNumConfigurations 1
だったら、あのLEDがもらっと点滅している状態だとUSBデバイスとしてはどう認識されるのか??
UbuntuとしてはUSBデバイスとしては認識していない。多分ボード内でUSBドライバが走っていないと思われる。WindowsPCでも不明なデバイスと怒られるので。テストプログラムだけが走っている状態なのだろう。
結局、1209:b803 の状態で焼けないのは、minichlink起動時のオプションが足りないのか、1209:B803から別のモードに切り替えないといけないのか?? Windows版minchlinkでどう書き込めているのか、手打ちで起動したらもう少し分かるのではと調査... UIAPduinoを書き込みモードにして、Windows版minchlinkで接続すると以下と表示される。この時、ボードのIDが何なのか分からない。
$ ./minichlink.exe -i
Found UIAPduino Pro Micro CH32V003 V1.4 Bootloader
Halting Boot Countdown
Interface Setup
USER/RDPR : 08f7/5aa5
DATA1/DATA0: 00ff/00ff
WRPR1/WRPR0: 00ff/00ff
WRPR3/WRPR2: 00ff/00ff
Flash Size: 16 kB
R32_ESIG_UNIID1: cfa5abcd
R32_ESIG_UNIID2: 39bbbe49
R32_ESIG_UNIID3: ffffffff
この状態で、USBデバイス一覧を表示、以下の通り、1209:B803として見えている。この状態でminichlinkは書き込み対象と認識している。だから、UIAPduinoとしては、1209:B803で待っている状態が正しい。Ubuntu でも、1209:B803で待っていた。だがminichlinkから書き込み対象なしと怒っていた。UbuntuではUIAPduino側の問題ではなく、USB経由での接続か、minichlink内の問題か、オプション不足によるものか、、いずれかと思われる。エラーメッセージである、VID:0x1209, PID:0xb003というものがなぜ出ているのかは分からないが、VID:0x1209, PID:0xb003のみを探しているわけではないと思われる。
PS C:\WINDOWS\system32> Get-PnpDevice | Where-Object {$_.FriendlyName -like "*UIAPduino*" -or $_.FriendlyName -like "*HID*"} | Select-Object FriendlyName, InstanceId
FriendlyName InstanceId
------------ ----------
*略*
HID 準拠デバイス HID\VID_1209&PID_B803\6&2C9D86C2&0&0000
*略*■参考URL
github.com
github.com
|