[メモ] ASUS TinkerBoardでRaspbianイメージを起動 / RaspberryPiでも、TinkerBoardでも起動するイメージ作成


## TL;DR (For files of TinkerOS v2.0.8) Updated: Dec.27'2018

- Environment 1: Tinkerboard, 2 x microSD(TinkerOS, Raspbian), USB SD cardreader

    - /dev/mmcblk0 = TinkerOS
    - /dev/sda  = Raspbian (USB SD cardreader) and it is mounted under /media/linaro/{boot,rootfs}

- Environment 2: Raspberry Pi, 1 x microSD
    - /dev/mmcblk0 = Raspbian

### Operation
You should set `RASPBIAN_DISK` and `RASPBIAN_DIR` as your env.

```bash:
#Env1: TinkerBoard + USB Card reader 
RASPBIAN_DISK=/dev/sda
RASPBIAN_DIR_BOOT=/media/linaro/boot
RASPBIAN_DIR_ROOTFS=/media/linaro/rootfs

#Env2: Raspberr Pi
#RASPBIAN_DISK=/dev/mmcblk0
#RASPBIAN_DIR_BOOT=/boot
#RASPBIAN_DIR_ROOTFS=/


mkdir ~/work
cd ~/work

#TINKEROS_VER=TinkerOS-20180321_v2.0.5
#TINKEROS_VER=TinkerOS-20180622_v2.0.7
TINKEROS_VER=TinkerOS-20181023_v2.0.8

wget https://github.com/mt08xx/files/raw/master/${TINKEROS_VER}_kernel_lib_idbloader.tbz
tar xf ./${TINKEROS_VER}_kernel_lib_idbloader.tbz 

sudo dd if=./tmp/${TINKEROS_VER}_idbloader.img  of=${RASPBIAN_DISK} seek=64 conv=notrunc

sudo cp -rvn ./boot/* ${RASPBIAN_DIR_BOOT}
sudo cp -rvn ./lib/* ${RASPBIAN_DIR_ROOTFS}/lib/

#sudo touch /media/linaro/boot/ssh
sudo poweroff
```





---
---


- <font color='navy'>**ASUS TinkerBoard**</font>で、Raspbianイメージを起動したところ。Terminalの文字見れるかな？?

![2017-08-09-060825_1920x1080_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/75594/884b0c1e-83fe-7156-8c54-962b922f5756.png)


## 概要
- Raspbianのイメージに、TinkerBoardのKernelとか、modulesとか、u-bootあたりをつっこめば動くんじゃ...
- やってみたら、RaspberryPiでも、TinkerBoardでも起動するイメージになりました。
- ラズパイに強く依存してるようなアプリケーション・ハードウェア関係は<font color='red'>**動きません**</font>よね？？
    - Minecraft とか、Wolfram とかは、NG
    - CSI Cameraとか、も動かない
- うまく動いたものがあれば、コメントあたりで教えてください。


## TL;DR for TinkerOS v2.0.5
(2017-11-24更新: 2017-09-07-raspbian-stretch に、TinkerOS v2.0.3-20170928のカーネル使用にて確認)

1. `2017-09-07-raspbian-stretch.img`を焼く
2. RPiにて起動して、軽く設定する(Wifiの設定とか)
3. 以下実行

	```bash:らずぱいにて実行
	# Run on RaspberryPi
	# For TinkerOS v2.0.3 (20170928)

	TINKER_FILES_URL=https://github.com/mt08xx/files/raw/master
	TINKER_BOOT=TinkerOS-20170928_v2.0.3_boot.tbz 
	TINKER_ROOTLIB=TinkerOS-20170928_v2.0.3_rootfs-lib.tbz
	TINKER_UBOOT=TinkerOS-20170928_v2.0.3_idbloader.img

	wget ${TINKER_FILES_URL}/${TINKER_BOOT}    -O - | bzcat | sudo tar xf - -C /boot/
	wget ${TINKER_FILES_URL}/${TINKER_ROOTLIB} -O - | bzcat | sudo tar xf - -C /lib/
	wget ${TINKER_FILES_URL}/${TINKER_UBOOT}
	sudo dd if=./${TINKER_UBOOT} of=/dev/mmcblk0 seek=64 conv=notrunc
	rm -f ./${TINKER_UBOOT}

	# rootfs指定
	grep -q 'root=' /boot/extlinux/extlinux.conf || sudo sed -i -e 's@ rw @ root=/dev/mmcblk0p2 rw @'  /boot/extlinux/extlinux.conf

	# Enable UART (お好みで)
	#sudo sed -i -e 's/console=tty1/console=ttyS1,115200n8/' /boot/extlinux/extlinux.conf
	
	# シャットダウン
	sudo shutdown -h now
	```

4. SDカードを、TinkerBoardに差し替えて、起動する。
5. Enjoy!


----

以下、当時の環境での作業.

----

## 環境
- ASUS TinkerBoard
- microSD 2枚
     - (その１) TinkerOS v1.9(beta) : `20170703-tinker-board-linaro-stretch-alip-v1.9`
     - (その２) Raspbian: `2017-07-05-raspbian-jessie`<font color='red'>(ラズパイで一度起動して、初期設定をさせたほうがいいかも.)</font>
- USBのカードリーダ
- u-bootイメージ: 自前でビルド => 
https://github.com/mt08xx/files/raw/master/rk3288-uboot-image/idbloader.img
     - 参考: [[メモ] ASUS TinkerBoard: カーネル・OSイメージのビルド / ベンチマーク](http://qiita.com/mt08/items/e8afe6de9e8a0bf1e89f) で、u-bootを作る。
     - `build/mk-uboot.sh rk3288-miniarm` 最近のスクリプトは、rk3288-画必要っぽい


## 手順
1. 下準備
	1. microSD、2枚にそれぞれイメージを焼く。 [Etcher](https://etcher.io/)とかで。
		- (その１) `20170703-tinker-board-linaro-stretch-alip-v1.9.zip`
		- (その２) `2017-07-05-raspbian-jessie.zip`

	2. microSD(`TinkerOS`)をTinkerBoard本体のmicroSDスロットに挿す。
	3. microSD(`Raspbian`)をUSBカードリーダへいれて、TinkerBoardのUSBポートへ挿す。
	4. 電源を入れる。(microUSBのACアダプタを挿す)
	5. 起動したら、User: `linaro` , パスワード: `linaro` でログイン。
	6. ターミナルを開く<br> 左下のアイコンをクリックして、メニューを出したら、System Tools > LXTerminal
	7. USBカードリーダのmicroSDが、`/dev/sda`として認識されてて、`/media/linaro/`あたりに自動でマウントされてる、、ハズ。

		```shell-session
		linaro@linaro-alip:~$ mount | grep dev/sda
		/dev/sda2 on /media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38 type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2)
		/dev/sda1 on /media/linaro/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
		linaro@linaro-alip:~$ 
		```

2. TinkerBoard関係のファイルなどをコピーする。
	1. `/boot/` 以下のファイルを、`/media/linaro/boot/`へ<br>`sudo cp -rv /boot/* /media/linaro/boot/`
	2. `/lib/modules/4.4.16-00010-g0fce7eb-dirty/`フォルダを、`/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/`へ<br>`sudo cp -rv /lib/modules/4.4.16-00010-g0fce7eb-dirty /media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/`

	3. メモ:: ※ラズパイ上で...

		```bash:ラズパイ上で、ファイルをダウンロードして、解凍
wget https://github.com/mt08xx/files/raw/master/TinkerBoard-kernel_4.4.16-00010-g0fce7eb-dirty_TinkerOS1.9Beta.tbz
sudo tar xvf ./TinkerBoard-kernel_4.4.16-00010-g0fce7eb-dirty_TinkerOS1.9Beta.tbz -C /
```

3. u-boot関連
    先頭から64セクタ目(64*512 = 0x8000 バイト目)からなにやら書きこまないといけない。
    <font color='red'>!!! `dd`を使うので気をつける !!!</font>

	```bash:ubootを書き込む
# ファイルをダウンロード
wget https://github.com/mt08xx/files/raw/master/rk3288-uboot-image/idbloader.img
# ddで書き込む
sudo dd if=./idbloader.img of=/dev/sda seek=64 conv=notrunc
# シンク、5秒寝て、シャットダウン.
sync && sleep 5 && sudo shutdown -h now
```

4. USBカードリーダのmicroSD(`Raspbian`)を、TinkerBoardに挿して、起動。







## その他
- Raspbianのイメージは、ラズパイで一度起動して、初期設定をさせたほうがいいかも。<br>↓は、マニュアルでやった。
    - パーティション拡張　（raspi-config から...)
    - sshのキー作成 (`sudo dpkg-reconfigure openssh-server`)
- TinkerOS v1.9 (beta)<br>![2017-08-09-053341_1920x1080_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/75594/2e6fd9fe-0715-4ec6-3dc2-1167543f5ace.png)


- ファイルコピー時のログ

    ```shell-session
linaro@linaro-alip:~$ sudo cp -rv /boot/* /media/linaro/boot/
'/boot/extlinux' -> '/media/linaro/boot/extlinux'
'/boot/extlinux/extlinux.conf' -> '/media/linaro/boot/extlinux/extlinux.conf'
'/boot/hw_intf.conf' -> '/media/linaro/boot/hw_intf.conf'
'/boot/rk3288-miniarm.dtb' -> '/media/linaro/boot/rk3288-miniarm.dtb'
'/boot/zImage' -> '/media/linaro/boot/zImage'
linaro@linaro-alip:~$ sudo cp -rv /lib/modules/4.4.16-00010-g0fce7eb-dirty /media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/
'/lib/modules/4.4.16-00010-g0fce7eb-dirty' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/source' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/source'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/build' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/build'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.order' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.order'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.builtin' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.builtin'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.dep' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.dep'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.dep.bin' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.dep.bin'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.alias' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.alias'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.alias.bin' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.alias.bin'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.softdep' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.softdep'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.symbols' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.symbols'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.symbols.bin' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.symbols.bin'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.builtin.bin' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.builtin.bin'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.devname' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/modules.devname'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/crypto' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/crypto'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/crypto/echainiv.ko' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/crypto/echainiv.ko'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/i2c' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/i2c'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/i2c/i2c-stub.ko' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/i2c/i2c-stub.ko'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan/rtl8723bs' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan/rtl8723bs'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan/rtl8723bs/8723bs.ko' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/drivers/net/wireless/rockchip_wlan/rtl8723bs/8723bs.ko'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs/flexfilelayout' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs/flexfilelayout'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net/netfilter' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net/netfilter'
'/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net/netfilter/xt_conntrack.ko' -> '/media/linaro/62ca0b6d-6291-4c40-b1fd-11bc291e4a38/lib/modules/4.4.16-00010-g0fce7eb-dirty/kernel/net/netfilter/xt_conntrack.ko'
linaro@linaro-alip:~$
```

----
## メモ

1. Bluetooth 周り
TinkerOS側から、`/usr/local/bin/rtk_hciattach`をコピーする.

	```bash
	## てぃんかー
	pi@raspberrypi:~$ cat hciuart.service.tinkerboard
	[Unit]
	Description=Bluetooth HCI UART service
	Before=bluetooth.service
	After=dev-ttyS0.device

	[Service]
	Type=simple
	ExecStart=/usr/local/bin/rtk_hciattach -n -s 115200 ttyS0 rtk_h5

	[Install]
	WantedBy=multi-user.target

	## らずぱい
	pi@raspberrypi:~$ cat hciuart.service.raspberrypi
	[Unit]
	Description=Configure Bluetooth Modems connected by UART
	ConditionPathIsDirectory=/proc/device-tree/soc/gpio@7e200000/bt_pins
	Before=bluetooth.service
	Wants=dev-serial1.device
	After=dev-serial1.device

	[Service]
	Type=forking
	ExecStart=/usr/bin/btuart

	[Install]
	WantedBy=multi-user.target
	pi@raspberrypi:~$
	```