mirror of
https://github.com/Plexi09/Nadir-Kernel.git
synced 2026-10-20 23:17:27 +02:00
Align CI and docs with nadir.img artifact name
This commit is contained in:
parent
7d736cd76d
commit
2b81747922
4 changed files with 18 additions and 14 deletions
2
.github/scripts/check_boot.py
vendored
2
.github/scripts/check_boot.py
vendored
|
|
@ -18,7 +18,7 @@ import sys
|
||||||
import termios
|
import termios
|
||||||
import time
|
import time
|
||||||
|
|
||||||
IMAGE = sys.argv[1] if len(sys.argv) > 1 else "os.img"
|
IMAGE = sys.argv[1] if len(sys.argv) > 1 else "nadir.img"
|
||||||
NEEDLE = b"64-bit"
|
NEEDLE = b"64-bit"
|
||||||
BOOT_WAIT_S = 8
|
BOOT_WAIT_S = 8
|
||||||
|
|
||||||
|
|
|
||||||
24
.github/workflows/ci.yml
vendored
24
.github/workflows/ci.yml
vendored
|
|
@ -1,6 +1,6 @@
|
||||||
# Nadir Kernel CI. Runs on every pull request and every push to main.
|
# Nadir Kernel CI. Runs on every pull request and every push to main.
|
||||||
#
|
#
|
||||||
# Builds os.img with make, verifies the image, then boots it headless in
|
# Builds nadir.img with make, verifies the image, then boots it headless in
|
||||||
# QEMU and asserts the kernel's welcome message reaches the screen.
|
# QEMU and asserts the kernel's welcome message reaches the screen.
|
||||||
|
|
||||||
name: CI
|
name: CI
|
||||||
|
|
@ -29,16 +29,20 @@ jobs:
|
||||||
run: make
|
run: make
|
||||||
|
|
||||||
- name: Verify image
|
- name: Verify image
|
||||||
|
# Every check prints what it saw: a silent bare `test` once hid a
|
||||||
|
# failure here, so each assertion reports and names its own failure.
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
test -f os.img
|
ls -l nadir.img
|
||||||
size=$(stat -c %s os.img)
|
size=$(stat -c %s nadir.img)
|
||||||
test "$size" -ge 1024
|
echo "image size: $size bytes"
|
||||||
test $(( (size - 512) % 512 )) -eq 0
|
test "$size" -ge 1024 || { echo "FAIL: image smaller than sector+kernel minimum"; exit 1; }
|
||||||
sig=$(dd if=os.img bs=1 skip=510 count=2 2>/dev/null | od -A n -t x1 | tr -d ' \n')
|
test $(( (size - 512) % 512 )) -eq 0 || { echo "FAIL: kernel part is not sector-aligned"; exit 1; }
|
||||||
test "$sig" = "55aa" || { echo "missing 0xAA55 boot signature"; exit 1; }
|
sig=$(dd if=nadir.img bs=1 skip=510 count=2 2>/dev/null | od -A n -t x1 | tr -d ' \n')
|
||||||
grep -q "Nadir" os.img || { echo "kernel payload missing from os.img"; exit 1; }
|
echo "boot signature: $sig"
|
||||||
echo "os.img: $size bytes, boot signature and payload present"
|
test "$sig" = "55aa" || { echo "FAIL: missing 0xAA55 boot signature"; exit 1; }
|
||||||
|
grep -q "Nadir" nadir.img || { echo "FAIL: kernel payload missing from image"; exit 1; }
|
||||||
|
echo "OK: nadir.img valid, boot signature and payload present"
|
||||||
|
|
||||||
- name: Boot and check welcome message in QEMU
|
- name: Boot and check welcome message in QEMU
|
||||||
run: python3 .github/scripts/check_boot.py os.img
|
run: python3 .github/scripts/check_boot.py nadir.img
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ Please stick to the following rules if you plan to use AI in your contributions:
|
||||||
Build from the repository root. See the [README](README.md) for prerequisites and troubleshooting:
|
Build from the repository root. See the [README](README.md) for prerequisites and troubleshooting:
|
||||||
|
|
||||||
```
|
```
|
||||||
make # builds os.img (boot sector + kernel)
|
make # builds nadir.img (boot sector + kernel)
|
||||||
make run # boots it in QEMU
|
make run # boots it in QEMU
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ I can only recommend using Linux distribution, but the Windows Subsystem for Lin
|
||||||
From the repository root:
|
From the repository root:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make # builds os.img
|
make # builds nadir.img
|
||||||
make run # boots it in QEMU
|
make run # boots it in QEMU
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ Notes:
|
||||||
|---|---|
|
|---|---|
|
||||||
| `Boot failed: not a bootable disk` | The first 512 bytes of `nadir.img` are not a valid boot sector (they must end with the `0xAA55` signature). Re-run `make` and check it completes without errors. |
|
| `Boot failed: not a bootable disk` | The first 512 bytes of `nadir.img` are not a valid boot sector (they must end with the `0xAA55` signature). Re-run `make` and check it completes without errors. |
|
||||||
| Black screen / blinking cursor | The boot sector only speaks legacy BIOS (`int 0x10` text mode). This works out of the box with QEMU's default SeaBIOS firmware but will not boot under UEFI-only firmware (or UEFI-only real hardware) unless legacy/CSM boot is enabled. |
|
| Black screen / blinking cursor | The boot sector only speaks legacy BIOS (`int 0x10` text mode). This works out of the box with QEMU's default SeaBIOS firmware but will not boot under UEFI-only firmware (or UEFI-only real hardware) unless legacy/CSM boot is enabled. |
|
||||||
| QEMU reboots in a loop after `entering protected mode` (or before any C output) | A triple fault in the boot chain: the CPU crashed with no IDT installed and reset itself. Boot with `qemu-system-x86_64 -fda os.img -d int -no-reboot` and read the fault (`v=...`) plus registers from the log. |
|
| QEMU reboots in a loop after `entering protected mode` (or before any C output) | A triple fault in the boot chain: the CPU crashed with no IDT installed and reset itself. Boot with `qemu-system-x86_64 -fda nadir.img -d int -no-reboot` and read the fault (`v=...`) plus registers from the log. |
|
||||||
| No window appears under WSL2 | Use the `-display curses` variant above. It should work in any terminal. |
|
| No window appears under WSL2 | Use the `-display curses` variant above. It should work in any terminal. |
|
||||||
|
|
||||||
## How booting works
|
## How booting works
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue