焼き
まず、下記いづれかの手順に従い、ホストPCの環境を整える
- https://docs.m5stack.com/en/quick_start/cm4stack/arduino
- https://www.raspberrypi.com/documentation/computers/compute-module.html
手順通り、BOOTを押しながら起動し、USBケーブルを繋ぎ、rpibootを使ってSDカードとしてマウントする。
SDカードとしてフォーマットしたあと、通常のraspiosを焼き込む。
一度普通に起動する。(ファンが回らない、液晶が動かないなどが起きるが、HDMI接続のモニタで普通に起動するはずである)
ここで配布されているCM4Stack custom imageをダウンロードし、7-zipなどで開く。
イメージ内のイメージを開き0.fatを開いて、以下のファイルを取り出す。
- /config.txt
- /overlays/aw88xx.dtbo
- /overlays/m5stack-cm4.dtbo
※ここからダウンロードできるものと多分同じ: https://github.com/m5stack/m5stack-linux-dtoverlays/tree/main
一度電源を落とし、BOOTを押しながら起動し、USBケーブルを繋ぎ、rpibootを使ってSDカードとしてマウントする。
認識した領域で、上記の取り出しておいたファイルを上書きする。
これで、液晶とタッチパネルが使えるようになる。
音がならない原因
なお、音を鳴らすには、aw882xx_drv.koを用意し、
sudo insmod aw882xx_drv.ko
する必要があるが、イメージに入っているものやgithubにあるものは、カーネルバージョンが一致していないのか読み込まれない。
再ビルドが必要と思われる。
sudo nano /boot/config.txt
し、
arm_64bit=0
を追記して保存。rebootします。
これ対策。
次に、ドライバのビルドをします。
cd ~
git clone https://github.com/m5stack/m5stack-linux-dtoverlays.git
cd ~/m5stack-linux-dtoverlays/modules/aw882xx/src
Makefileを修正
LINUX_DIR=/lib/modules/$(shell uname -r)/build
aw882xx.cを修正
- /free gpio/ の下4行をコメントアウト
- int aw882xx_i2c_removeを、void aw882xx_i2c_removeに修正
- void aw882xx_i2c_remove内のreturn 0;をreturn;に修正
make
で生成される。そのまま
sudo insmod aw882xx_drv.ko
でドライバが読み込まれる。
でも通信ができてないのか、dmesgでエラー吐いてて動かない。
無理やりスキップさせても別に動かない。
ファン
ファンが回らない問題に関しては、GPIOの13を1にすれば回る。
sudo su
echo 13 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio13/direction
echo 1 > /sys/class/gpio/gpio13/value
bash: echo: write error: Device or resource busy
と出て回らないときは、/boot/config.txtの
dtoverlay=gpio-fan,gpiopin=13,temp=60000
を消すかコメントアウトすると回ります。
カーネルのビルド
下記に従う。
途中注意書きに書かれているが、CM4は64bitカーネル32bitユーザーランドになるので、Raspberry Pi上でビルドする場合でも、クロスコンパイル手順を実行する必要がある。