G-cluster の起動動作をシリアルコンソールで見る


@gpioblink  ( じぶりん ) さんから G-cluster を送ってもらいました。



# G-cluster

つないでみた
HDMIにつないでみたらこんな画面が出てきました

![vlcsnap-2021-08-18-11h43m50s346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/bd342775-26b8-104b-ab46-dd7d62fee2eb.png)

スマートフォン、ゲームパッドで設定するみたいですね。

早速殻割りしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4fcb6dfb-c686-075a-438b-631664606873.png)

LEDがいい感じです。
このLEDはGPIOにつながっているのかな？

# チップ構成



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2a8d059c-3287-6ad9-8db0-e455a305d440.png)

オンボードのチップ：

- ARM 1176JZF 600MHz CPU SoC CAVIUM PureVu Full-HD Media Processor CNW6611L-600BG324-SCP-G https://scrapbox.io/gcluster/CNW6611L_%E5%85%AC%E5%BC%8F%E8%B3%87%E6%96%99
- 256MBytes DDR3 16bit SDRAM SAMSUNG K4B2G1646E
- 128MBytes NAND Flash TOSHIBA TC58NVG0S3ETA00
- 128kBytes SPI Flash Macronix MX25L1006EMI-10G

あと860113 502 130129 とマーキングされた謎WiFiChipがありますが、内部の Linux で lsmod とすると

```

ath6kl_sdio           177554  0
mac80211              205075  0
cfg80211              158436  2 ath6kl_sdio,mac80211
compat                 14631  3 ath6kl_sdio,mac80211,cfg80211
```

と出てくるので、Atheros AR6103とかそこらへんぽいです。
https://scrapbox.io/gcluster/860113_502_130129_%E3%81%A8%E3%83%9E%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%95%E3%82%8C%E3%81%9F%E8%AC%8EWiFiChip

# シリアルTTY

以下のようにして接続すると起動ログが取れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/57da97f8-2d60-e717-c68a-2c44e2086aaf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a3963f55-5a6b-9cb6-ca22-a810afc64bd0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f44d5ac8-b573-37f3-9b5b-5e80b94f84f7.png)

通信条件：TTY 3.3V レベル、フロー制御なし、8bit、115200bps 


# U-boot に入る

起動すると以下のように U-boot に入ります。

```

dlink_U-Boot 2011.06 (Jan 16 2013 - 15:22:32)

I2C:   ready
DRAM:  256 MiB
SPI Speed at [R:23MHz/W:47MHz] Flash Size: 128KB
NAND:  128 MiB
MMC:   
initializing secure environment
Bad block table found at page 65472, version 0x01
Bad block table found at page 65408, version 0x01
In:    serial
Out:   serial
Err:   serial
MAC:   00:1a:cc:00:00:01
Hit any key to stop autoboot:  0 
CNCl800L> 
CNCl800L> 
CNCl800L> 
CNCl800L> 
CNCl800L> 
CNCl800L> 
```
G-cluster の起動時にシリアルコンソールから何らかの入力があるとU-boot のコマンドインタプリタに落ちます。

ここから普通に起動するには  boots と打ちます。

シリアルコンソールから入力がなければそのまま以下に進みます。

```

CNCl800L> boots

NAND read: device 0 offset 0x1c0000, size 0x20000
 131072 bytes read: OK

NAND read: device 0 offset 0x180000, size 0x20000
 131072 bytes read: OK

NAND read: device 0 offset 0x7c80000, size 0x1000
 4096 bytes read: OK
 Processing Application image.

NAND read: device 0 offset 0x2400000, size 0x17a0000
 24772608 bytes read: OK
length 24641536: 376 whole chunks with 0 remainder
done!
 Verifying Image RSA signature...  OK.
 Field Img Authentication passed 
 Check for Blob image... 
 Processing Blob image.

NAND read: device 0 offset 0x7c81000, size 0x20000
 131072 bytes read: OK
 Verifying Image RSA signature...  OK.
 AppImg (Blob) authenticated and copied to RAM addr : 0xefff000


 ... OK to boot 
## Booting kernel from Legacy Image at 08080000 ...
   Image Name:   240_SDK_gcluster_!
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    24532848 Bytes = 23.4 MiB
   Load Address: 08080040
   Entry Point:  08080040
   XIP Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux................................................................................................................................................................... done, booting the kernel.
�mmc0: Version ID 0x5342230a.


mount: mounting tmpfs on /dev/shm failed: No such file or directory
ath6kl: temporary war to avoid sdio crc error
SI_CecInit
SI_CpiInit
SI_CpiInit: Writing CEC_OP_ABORT_31 register
SI_CpiInit: Setting Logical Address
SI_CecInit: looping through ports (5)
SI_CecInit: CEC Enabled
Returned from SI_CecInit
Checking for secure chip and enabling HDCP
Creating the main HDMI thread
HDMI init!
TVCenter : tvout = 406dd474
TVCenter : HDMI not plug
HDMISetVideo: timingvideomode = 15, PictureAspectRatio = 1

CECLIB::Physical Address:: 65535



```

HDMIつなげていないとここで止まります。
この状態で、エンターが通るようになっています。

HDMIをつなげると、先に進みますがUSBをシリアルの反応が無くなってしまします。
それを防ぐため、ここの段階でstty cread と打ち込み、HDMIをつなぎます。

あるいは、HDMIつなげっぱなしでも、コマンドが通るようになるとエンターが反応がでるので、反応が出ている間に stty cread 
と素早く打ち込みます。
HDMI を刺すと

```


phyAddr === 6461 
phyAddr === 6523 
phyAddr === 2000 
phyAddr === 5dc4 
phyAddr === 3e2 
phyAddr === 607 
AddrTag = 0x57
AddrTag = 0x23
AddrTag = 0x6e
AddrTag = 0x67
AddrTag = 0xe2
55555555555555555555555555555555555555555555555555555555555555555555555555
data = 0x0AddrTag = 0xe3
55555555555555555555555555555555555555555555555555555555555555555555555555
data = 0x5AddrTag = 0xe4
55555555555555555555555555555555555555555555555555555555555555555555555555
data = 0xfAddrTag = 0xe3
55555555555555555555555555555555555555555555555555555555555555555555555555
data = 0x6AddrTag = 0x66
--- CEC MSG: opcode 0x32 (set menu language) src=0x0 broadcast=1, args(3):  6A 70 6E
CECLIB:: Set Menu Language command received
Event Occured
TestCecLib:: TV received set menu language = jpn

HDMI cable plugged in, plug_check = 1, plugging = 0, pid 0x5e
edid_vic_to_edid_timing: WARNING, VIC out of range (93)
edid_vic_to_edid_timing: WARNING, VIC out of range (94)
.
.
.
.

TVCenter : HDMI is switch check begin
HDCP Authenticated
USB not found
----------------firsrshot----------------------
firstboot: 10, firstboot_flag(1)
DSM232:/ # 
```

となります。


これで、 Linux シェルが使えます。


# Linux マシンとして使うための問題点

- HDMIつなげないとブートが進まない
- 途中で stty cread と打ち込まないとシェルが操作できない

これを解決するために、ファームウェアを書き換える方向で考えていきます
(続く)

# 起動した後に情報を表示

```

DSM232:/mnt/jffs2 # cat /proc/meminfo 
MemTotal:         133700 kB
MemFree:           82792 kB
Buffers:               0 kB
Cached:            43020 kB
SwapCached:            0 kB
Active:             4924 kB
Inactive:          40508 kB
Active(anon):       2412 kB
Inactive(anon):        0 kB
Active(file):       2512 kB
Inactive(file):    40508 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          2428 kB
Mapped:             2492 kB
Shmem:                 0 kB
Slab:               3752 kB
SReclaimable:       1852 kB
SUnreclaim:         1900 kB
KernelStack:         304 kB
PageTables:          136 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       66848 kB
Committed_AS:      59788 kB
VmallocTotal:     638976 kB
VmallocUsed:       76772 kB
VmallocChunk:     510972 kB
DSM232:/mnt/jffs2 # df -h
Filesystem                Size      Used Available Use% Mounted on
none                     64.0K         0     64.0K   0% /dev
tmpfs                    65.3M         0     65.3M   0% /tmp
/dev/mtdblock14          56.5M      3.6M     52.9M   6% /mnt/jffs2
DSM232:/mnt/jffs2 # mount
rootfs on / type rootfs (rw)
none on /dev type tmpfs (rw,relatime,size=64k,mode=755)
proc on /proc type proc (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /tmp type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
/dev/mtdblock14 on /mnt/jffs2 type jffs2 (rw,relatime)

DSM232:/mnt/jffs2 # cat /proc/cpuinfo
Processor	: ARMv6-compatible processor rev 7 (v6l)
BogoMIPS	: 565.24
Features	: swp half fastmult vfp edsp java 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xb76
CPU revision	: 7

Hardware	: Celestial CNC1800L
Revision	: 0000
Serial		: 0000000000000000
DSM232:/mnt/jffs2 # 

```