最近更新できてなかったですが,実はG-ClusterでArch Linuxをまともに使えないか挑戦してました.
カーネルの更新
まず,公式で提供されているのがLinux 2.6.32です.大変古いので現代のシステムはまともに動かないと思われます.
そこで,Linux 5.15.50(やり始めた時点で最新のlts)を移植することにしました.
その成果がコチラ
https://git.haru3.me/haru/linux-dsm232
gitの使い方が下手なのはさておき,現状サポートしているのは以下です.
- 起動
- USB(OHCI, EHCI)
- クロックの一部
- NAND
- GPIO(割り込みはNG)
- UART1
- OpenFirmware(dts)
中途半端な感じですが,私的には満足したのでここで終わります(多分)
taiさんがまとめて下さっているオリジナルカーネル
をご覧の通り,基のソースがかなりシンプルなので,移植もなんとか私のレベルで行う事ができました.
実験に使ったconfigはここから入手できます.
努めて基のソースを変更しないようにしたのであと暫くはそのままcherry-pickで移植できるんじゃないかと思います.
ギャラリー
初めて起動した図
earlyconが出てないのと,クロックソース, イベントソースが適当なので時間がおかしいです.
クロックを追加して,時間は正常になった図
まだearlyconは出ません.
やっと出ました.これのお陰で改善の難易度がぐっと下がります.
USBメモリを認識しました.
この時点でとりあえずArchLinuxは動作しました.
GPIOも動作しました.入出力共に動いてそうです.
面倒なので割り込みは省きました…
Arch Linuxが動作した様子です.
遂に目的を達成しました!
起動ディスクはUSBメモリで,結局nandはよく分からないままです笑
なお,ArchLinux ARMは今年2月にarmv6,v5のサポートを終えたようです.なんてタイミングなんだ…
写真はネットの海で拾った2019年ぐらいのイメージで起動してます.
メモ
ビルド後は以下のスクリプトでイメージを作成してました.
1
2
|
cat arch/arm/boot/zImage arch/arm/boot/dts/celestial-cnc1800l.dtb > zImage_comb.bin
mkimage -a 0x8000 -A arm -O linux -T kernel -C none -e 0x8000 -n kernel -d zImage_comb.bin uImage
|
起動するときはu-bootより
1
2
3
|
env set bootargs "earlycon clk_ignore_unused console=ttyS0,115200 rootwait root=/dev/sda1"
fatload usb 0 ${RAM} uImage
bootm ${RAM}
|
こんな感じで.
カーネルが結合されたdtbの読み込みに対応してくれているお陰でなんとか使えています笑
おわりに
とりあえず目的を達成できました.
G-clusterでLinux5系を動かしたのは私だけではなかろうか笑
最初に大変古いカーネルとか書きましたが,私の初めて触ったカーネルはUbuntu8.04に搭載されていた2.6(たぶん)だったりします.
なんだか複雑な気持ちですわ…
メモ2
純正の/proc/iomem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
00000000-088fffff : System RAM
00028000-004d4fff : Kernel text
004d6000-0053acd3 : Kernel data
08971000-09670fff : CS Xport Memory space
09671000-098f0fff : MCU Audio
0e900000-0ebfffff : MCU Video
80100000-80100048 : cnc_nand.0
80150000-80154400 : cnc18xx_spi.0
80150000-80154400 : cnc18xx_spi.0
80160000-80160fff : CNC1800L TVE1 space
80168000-80168fff : CNC1800L TVE0 space
80170000-80170fff : i2c_cnc18xx.0
801f1000-801f10ff : serial8250.0
801f1000-801f101f : serial
801f2000-801f20ff : serial8250.1
801f2000-801f201f : serial
80200000-80201000 : cnc18xx-ehci
80200000-80201000 : ehci_hcd
80210000-80211000 : cnc18xx-ohci
80210000-80211000 : ohci_hcd
80250000-8025ffff : cnc18xx_pcmcia.0
80290000-80290fff : cnc1800l-mshci.0
80290000-80290fff : mmc0
a4000000-a5ffffff : cnc_nand.0
b1200000-b12fffff : CNC Audio
b1600000-b16fffff : CNC1800L Video
b1800000-b1800fff : CNC1800L DF space
b1c10000-b1c10fff : Video INT
b2110000-b21100ff : CNC18XX PINMUX
|
謝辞
taiさん
カーネルを大変参考にさせていただきました.
gpioblinkさん
解析の際,HDMIの強制を回避した改変済みのイメージを利用させて頂きました.