tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Creating a hackable kernel for AMD64
> Date: Tue, 23 Apr 2024 10:52:41 -0400
> From: Jared Barnak <jared.j.barnak%gmail.com@localhost>
>
> I watched "How to get started hacking NetBSD" and it was great, I just
> noticed that some things didn't work when cross compiling for amd64. and
> frankly, I'm not sure what I did wrong.
Cool, thanks! The main thing you're trying to do -- pass a kernel on
the command line to qemu -- doesn't work on x86. It does work on
aarch64 (arm64), which is why I used that as the example here:
https://www.netbsd.org/gallery/presentations/riastradh/eurobsdcon2023/getstarted.pdf#page=30
It also works on riscv and alpha, and possibly some others -- but not
x86. So if you want to run x86, it's a little different. We should
really reduce these differences, but for now this is what you'll have
to do:
> I unzipped the `netbsd-DEBUG_KERNEL.gz` file and redirected the output to
> `vm/disk.img` with:
>
> ```
> gunzip -c <netbsd-DEBUG_KERNEL.gz > ~/Projects/netbsd/vm/disk.img
> ```
netbsd-DEBUG_KERNEL.gz is just a kernel, not a whole disk image with
bootloader, userland, and so on. What you want is a live disk image.
On aarch64, build.sh release leaves a live disk image in
$RELEASEDIR/evbarm-aarch64/binary/gzimg/arm64.img.gz, but on x86 the
live image works differently -- you need to do:
./build.sh ... live-image
and then you'll find it at
$RELEASEDIR/images/NetBSD-10.99.XXX-amd64-live.img.gz
This you can just gunzip and pass as a raw disk image to qemu.
> And I cannot figure out why, but I don't have a `netbsd.img` under
>
> /home/jared/Projects/netbsd/obj/sys/arch/amd64/compile
For amd64 we don't build netbsd.img -- the kernel image is just called
`netbsd'. (On aarch64, there is a netbsd.img as well as netbsd, and
some important difference between them that I don't remember the
details of.)
> so the following does not work:
>
> ```
> #!/urs/bin/sh
(Might want to use /bin/sh here, unless you really do have a
/urs/bin/sh?)
> /usr/bin/qemu-system-x86_64 \
> -kernel netbsd.img \ # This file does not exist
Right -- passing a kernel image on the command line isn't supported
yet on amd64. It does work on aarch64 (arm64), riscv, and alpha, but
not amd64, which is why I added this note:
https://www.netbsd.org/gallery/presentations/riastradh/eurobsdcon2023/getstarted.pdf#page=32
When I'm doing kernel development under qemu, I usually use aarch64 or
alpha because of this, not x86.
When I do use x86 under qemu, and I need to update the kernel, I serve
it from the host by serving the objdir via http, and download it into
the guest with the ftp(1) command, like:
host$ cd ~/netbsd/current/obj.amd64
host$ /usr/libexec/httpd -b -f -s -I 54321 -X .
guest# ftp -o /netbsd.new http://169.254.123.45:54321/sys/arch/amd64/compile/DEBUG/netbsd
guest# mv /netbsd /onetbsd
guest# mv /netbsd.new /netbsd
> I'm also not sure what to substitute `-cpu` for when using `amd64`.
No need, default should work fine.
Home |
Main Index |
Thread Index |
Old Index