mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-06 16:40:47 +00:00
kboot: Add readme
Document how to test kboot and how to build a initrd. Sponsored by: Netflix
This commit is contained in:
parent
a2fbc88593
commit
59cbe840cf
48
stand/kboot/README
Normal file
48
stand/kboot/README
Normal file
|
@ -0,0 +1,48 @@
|
|||
So to make a Linux initrd:
|
||||
|
||||
(1) mkdir .../initrd
|
||||
(2) mkdir -p .../initrd/boot/defaults
|
||||
(3) cd src/stand; make install DESTDIR=.../initrd
|
||||
(4) Copy kernel to .../initrd/boot/kernel
|
||||
(5) cd .../initrd
|
||||
(6) cp boot/loader.kboot init
|
||||
(7) find . | sort | cpio -o -H newc | gzip > /tmp/initrd.cpio
|
||||
(8) download or build your linux kernel
|
||||
(9) qemu-system-x86_64 -kernel ~/vmlinuz-5.19.0-051900-generic \
|
||||
-initrd /tmp/initrd.cpio \
|
||||
-m 256m -nographic \
|
||||
-monitor telnet::4444,server,nowait -serial stdio \
|
||||
-append "console=ttyS0"
|
||||
(though you may need more than 256M of ram to actually boot FreeBSD and do
|
||||
anything interesting with it and the serial console to stdio bit hasn't
|
||||
been the most stable recipe lately).
|
||||
|
||||
Notes:
|
||||
For #6 you might need to strip loader.kboot if you copy it directly and don't
|
||||
use make install.
|
||||
For #7 the sort is important, and you may need LC_ALL=C for its invocation
|
||||
For #7 gzip is but one of many methods, but it's the simplest to do.
|
||||
For #9, this means we can automate it using methods from
|
||||
src/tools/boot/rootgen.sh when the time comes.
|
||||
#9 also likely generalizes to other architectures
|
||||
For #8, see https://kernel.ubuntu.com/~kernel-ppa/mainline/ to download
|
||||
a kernel suitable for testing... For arm, I've been using the
|
||||
non 64k page kernels and 5.19 seems to not suck.
|
||||
|
||||
aarch64:
|
||||
qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt \
|
||||
-kernel ~/linuxboot/arm64/kernel/boot/vmlinuz-5.19.0-051900-generic \
|
||||
-initrd ~/linuxboot/arm64/initrd.img -m 256m -nographic \
|
||||
-monitor telnet::4444,server,nowait -serial stdio \
|
||||
-append "console=ttyAMA0"
|
||||
|
||||
General
|
||||
|
||||
Add -g -G to have gdb stop and wait for the debugger. This is useful for
|
||||
debugging the trampoline (hbreak will set a hardware break that's durable across
|
||||
code changes). If you set the breakpoint for the trampoline and it never hits,
|
||||
then there's likely no RAM there and you got the PA to load to wrong. When
|
||||
debugging the trampiline and up to that, use gdb /boot/loader. When debugging
|
||||
the kernel, use kernel.full to get all the debugging. hbreak panic() is useful
|
||||
on the latter since you'll see the original panic, not the panic you get from
|
||||
there not being an early console.
|
Loading…
Reference in a new issue