Slide 1

Slide 1 text

初代プレステでuCLinuxその1 Linuxのinitで「Hello World」 小江戸らぐ10月のオフな集まり(第271回) 2025. 2. 8 1 kazueda か ず え だ

Slide 2

Slide 2 text

PlayStation(プレイステーション、略称: PS, PS1) • ソニー・コンピュータエンタテインメント(略: SCE)が 1994年12月3日に発売した家庭用ゲーム機 • CPU:MIPS R3000A ベース • 32ビット RISCプロセッサ (R3051) • メインメモリ: 2 MB EDO DRAM 2 https://ja.wikipedia.org/wiki/PlayStation_(%E3%82%B2%E3%83%BC%E3%83%A0%E6%A9%9F)

Slide 3

Slide 3 text

OSC2025大阪の展示 3 • M5Stack用のプログラ ムは、LLMで作成 • 初代プレステ側では unirom8というユー ティリティを起動 • M5Stackでボタン操作 して、ファイル転送 • Kernelの起動に成功

Slide 4

Slide 4 text

RUnix on PlayStation 1 • MIPS-NOMMUなので、uClinux 2.4.x kernel • RS232 SIO経由のシリアルコンソール • プレイステーションのGPU経由の仮想コンソール • 保存メディアとしてマルチプルメモリーカード • SL811を使って、USBキーボードやマウスを接続 • 上記の環境が構築されるらしい。。。 4 https://en.wikipedia.org/wiki/PSXLinux

Slide 5

Slide 5 text

RUnix on PlayStation 1 • MIPS-NOMMUなので、uClinux 2.4.x kernel • RS232 SIO経由のシリアルコンソール • プレイステーションのGPU経由の仮想コンソール • 保存メディアとしてマルチプルメモリーカード • SL811を使って、USBキーボードやマウスを接続 • 上記の環境が構築されるらしい。。。 5 https://en.wikipedia.org/wiki/PSXLinux • 1枚のメモリーカードの容量:112 kB (8 kB x 14) • 複数のカードを切り替えて使用? • カードへの書き込みフォーマットは? <-ブロックデバイスとして利用?

Slide 6

Slide 6 text

RUnix on PlayStation 1 • MIPS-NOMMUなので、uClinux 2.4.x kernel • RS232 SIO経由のシリアルコンソール • プレイステーションのGPU経由の仮想コンソール • 保存メディアとしてマルチプルメモリーカード • SL811を使って、USBキーボードやマウスを接続 • 上記の環境が構築されるらしい。。。 6 https://en.wikipedia.org/wiki/PSXLinux • 1枚のメモリーカードの容量:112 kB (8 kB x 14) • 複数のカードを切り替えて使用? • カードへの書き込みフォーマットは? <-ブロックデバイスとして利用? • カード上のinitファイルを読み込めるようにする。 <-ファイル名「init」のHello Wolrdを作成し、 「Hello World」表示後にKernel panicを。

Slide 7

Slide 7 text

進め方 7 1. Qemu-x86_64上で、initの「Hello World」 2. Qemu-system-mipsel上で、initの「Hello World」 3. 初代プレステのエミュレータ上で、 initの「Hello World」 4. 初代プレステ本体上で、 initの「Hello World」 5. Rootfsの作成 6. ログインプロンプトの表示

Slide 8

Slide 8 text

Qemu-x86_64上で、initの「Hello World」 1. Linuxカーネルのソースからのビルド git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git 2. Busyboxのビルド git://github.com/mirror/busybox.git 3. Linuxの起動確認 4. Linuxのinitファイルの入れ替え 5. 「Hello, Kernel!」表示後のカーネルパニック観察 8 https://medium.com/@chienhaotan/compiling-and-running-a-minimal-kernel-with-busybox-bfc45a991017

Slide 9

Slide 9 text

「Hello world」の後のKernel panic 9

Slide 10

Slide 10 text

「Hello world」の後のKernel panic 10

Slide 11

Slide 11 text

Mipsel用「Hello World」 • MIPS32ビット、リトルエンディアン 1. クロスコンパイラの準備 2. Qemu-mipselでの動作確認 11 https://noobient.com/2020/12/22/mips-cross-compilation-crash-course/#Toolchain

Slide 12

Slide 12 text

Mipsel用「Hello World」 • MIPS32ビット、リトルエンディアン 1. クロスコンパイラの準備 $ sudo apt -y install gcc-mipsel-linux-gnu ¥ g++-mipsel-linux-gnu qemu qemu-user 2. Qemu-mipselでの動作確認 $ mipsel-linux-gnu-gcc -static hello.c -o hello $ qemu-mipsel hello 12 https://noobient.com/2020/12/22/mips-cross-compilation-crash-course/#Toolchain

Slide 13

Slide 13 text

Mipsel用「Hello World」 • MIPS32ビット、リトルエンディアン 1. クロスコンパイラの準備 $ sudo apt -y install gcc-mipsel-linux-gnu ¥ g++-mipsel-linux-gnu qemu qemu-user 2. Qemu-mipselでの動作確認 $ mipsel-linux-gnu-gcc -static hello.c -o hello $ qemu-mipsel hello 13 https://noobient.com/2020/12/22/mips-cross-compilation-crash-course/#Toolchain

Slide 14

Slide 14 text

Mipsel用「Hello World」 • MIPS32ビット、リトルエンディアン 1. クロスコンパイラの準備 $ sudo apt -y install gcc-mipsel-linux-gnu ¥ g++-mipsel-linux-gnu qemu qemu-user 2. Qemu-mipselでの動作確認 $ mipsel-linux-gnu-gcc -static hello.c -o hello $ qemu-mipsel hello 14 https://noobient.com/2020/12/22/mips-cross-compilation-crash-course/#Toolchain

Slide 15

Slide 15 text

Mipsel用「Hello World」 • MIPS32ビット、リトルエンディアン 1. クロスコンパイラの準備 $ sudo apt -y install gcc-mipsel-linux-gnu ¥ g++-mipsel-linux-gnu qemu qemu-user 2. Qemu-mipselでの動作確認 $ mipsel-linux-gnu-gcc -static hello.c -o hello $ qemu-mipsel hello 15 https://noobient.com/2020/12/22/mips-cross-compilation-crash-course/#Toolchain

Slide 16

Slide 16 text

まとめ • Qemu-x86_64上で、initの「Hello World」を表示 • Qemu-system-mipsel上で、initの「Hello World」 • 初代プレステのエミュレータ上で、 initの「Hello World」 • 初代プレステ本体上で、 initの「Hello World」 16 今後の展開 おわり