General Information =================== This is ski: an ia64 instruction set simulator This repository is a fork of: http://ski.sourceforge.net The license is GPL-2. Installation ============ See the file 'INSTALL' Running ======= Running Ski requires a few moving parts: 1. build ski-specific linux kernel 2. prepare disk image of a file system 3. run ski 1. Building kernel The caveat is that upstream removed Ski-specific bits from linux-5.0. Thus latest supported kernel by Ski is 4.19 (see TODOs to get Ski ported to newer kernels). Once you get ia64-unknown-linux cross-compiler toolchain it is straightforward: $ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.241.tar.xz $ tar -xf linux-4.19.241.tar.xz $ cd linux-4.19.241 $ ARCH=ia64 CROSS_COMPILE=ia64-unknown-linux-gnu- make sim_defconfig $ ARCH=ia64 CROSS_COMPILE=ia64-unknown-linux-gnu- make -j$(nproc) The toolchain versions I used to get working setup are: - gcc-11.3.0 - binutils-2.36 Newer ones should work as well. 2. Preparing disk image That can be any filesystem supported by guest kernel. sim_defconfig supports ext2 as is. I used fresh Gentoo image to verify it: $ wget https://bouncer.gentoo.org/fetch/root/all/releases/ia64/autobuilds/20220420T025349Z/stage3-ia64-systemd-20220420T025349Z.tar.xz $ dd of=sdc if=/dev/zero bs=512 count=10485760 #5G $ /sbin/mke2fs sdc $ mkdir mnt $ mknod /dev/loop0 b 7 0 $ mount -t ext2 -oloop sdc ./mnt $ cd mnt $ tar -xpf ../stage3-ia64-systemd-20220420T025349Z.tar.xz # ignore dev creation failures $ cd .. $ umount mnt Here we created `sdc` file and populated it with contents of `stage3`. 3. Running Ski Once you have got the bits it should just run: $ bski linux-4.19.241/arch/ia64/hp/sim/boot/bootloader linux-4.19.241/vmlinux root=/dev/sda simscsi=./sd simeth=eth0 init=/bin/bash PATH=/bin rw ... loading linux-4.19.241/vmlinux... starting kernel... Linux version 4.19.241 (root@gentoo) (gcc version 11.3.0 (Gentoo 11.3.0 p4)) #1 SMP PREEMPT Tue May 3 23:52:46 BST 2022 ... root@(none) / # mount -t proc proc /proc root@(none) / # uname -a Linux (none) 4.19.241 #1 SMP PREEMPT Tue May 3 23:52:46 BST 2022 ia64 McKinley HP Ski Simulator GNU/Linux root@(none) / # cat /proc/cpuinfo processor : 0 vendor : HP Ski Simulator arch : IA-64 family : 31 model : 0 model name : McKinley revision : 0 archrev : 0 features : branchlong, 16-byte atomic ops cpu number : 0 cpu regs : 4 cpu MHz : 2.000 itc MHz : 2.000000 BogoMIPS : 1.23 siblings : 1 Fork-specific notes =================== The goal of this fork is to keep ski running on modern systems. This include but is not limited to: - pulling in downstream distribution patches - updating dynamic translator code to work on modern linux New additions: - Experimental minimal UART8250 console output. Can be used with the following setup: * kernel .config: CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y * kernel parameters: earlycon=uart8250,mmio,0xff5e0000 TODOs: * port bootloader over to earlycon to get visible output for CONFIG_HP_SIMSERIAL_CONSOLE=n kernels. * export UART1/UART2 via some interface (hcdp? SPCR?) to make it usable as a promary console after early boot as well. General software support for ia64 ================================= Last versions supported by the toolchain: - `glibc-2.38`, removed in <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=460860f457e2a889785c506e8c77d4a7dff24d3e> - `linux-6.6`, removed in <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cf8e8658100d4eae80ce9b21f7a81cb024dd5057> - `gcc-13`, still not removed as of 2024-01-08 - `binutils-2.41`, still not removed as of 2024-01-08 TODOs ===== - Port from ski-specific virtual devices to more standard VIRTIO: * simcons -> virtio-console * simscsi -> virtio-blk * simeth -> virtio-net - Bring CPU emulator up to the state where we could include it in qemu * Currently CPU emulator uses global state for various things. It's not very reusable as is. - stop requiring 'bootloader' and be able to run unmodified ia64 kernel * plumb EFI mapping * plumb ACPI space * plumb PCI space * add support for initramfs loading - covert doc/ documentation into something closer to plain text