春雨日記 about me tags

最近更新できてなかったですが,実は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の強制を回避した改変済みのイメージを利用させて頂きました.