Page 1 of 1

Page for aarch64 with newer cortex

Posted: Mon Mar 04, 2024 5:50 am
by YDeeps1
Hello,

I've been doing a bit of aarch64 development with the Cortex A72 with Qemu's Virt emulator, and I didn't seem to see any articles on OSDev, or rather anywhere easily available on startup guides, and the one on OSDev for ARM V7-A (https://wiki.osdev.org/ARMv7-A_Bare_Bones) does not really work for this kind of setup, especially since at least with Qemu's Virt emulator, RAM starts at 1GB+, while the article mentions you should set the stack to 0x10000 which will not work since you'll be accessing some memory mapped data.

As well as the fact 32-bit is starting to become quite outdated, it would be nice to make an aarch64 article and help OSDev be a bit more useful for the modern Arm architecture.

I'm happy to write an article for it following the general convention of the above article for ARM V7-A, but specifically for Qemu's Virt emulator, which I feel a lot of people would be using anyways to start off with for developing with aarch64, and using a newer Arm chip, in this case I have been developing with the Cortex A72 which is a modern (ish) chip running ARM V8-A, anyhow the Virt emulator barebones could later be converted by anyone building anything to work with a more specific board with some changes.

Qemu's Virt also supports a RAM framebuffer for display which is quite tricky to setup as you need to perform DMA transfers with Qemu's fw_cfg API, which is very undocumented, let alone for aarch64, and as someone who started learning Arm for my role to do some research on Arm TrustZone, a foundation for this would be very helpful.

In general, I would be interested in writing a barebones article for Arm V8-A with Qemu's Virt board in particular, with a barebones page for a simple graphics framebuffer as well, but want to double check with the community first before I actually start writing something.

Thanks,

Re: Page for aarch64 with newer cortex

Posted: Mon Mar 04, 2024 3:18 pm
by klange
YDeeps1 wrote:I've been doing a bit of aarch64 development with the Cortex A72 with Qemu's Virt emulator, and I didn't seem to see any articles on OSDev, or rather anywhere easily available on startup guides, and the one on OSDev for ARM V7-A (https://wiki.osdev.org/ARMv7-A_Bare_Bones) does not really work for this kind of setup, especially since at least with Qemu's Virt emulator, RAM starts at 1GB+, while the article mentions you should set the stack to 0x10000 which will not work since you'll be accessing some memory mapped data.
You're looking at the wrong page. The AArch64 bare-bones is at QEMU AArch64 Virt Bare Bones.

Re: Page for aarch64 with newer cortex

Posted: Mon Mar 04, 2024 4:42 pm
by YDeeps1
klange wrote:
YDeeps1 wrote:I've been doing a bit of aarch64 development with the Cortex A72 with Qemu's Virt emulator, and I didn't seem to see any articles on OSDev, or rather anywhere easily available on startup guides, and the one on OSDev for ARM V7-A (https://wiki.osdev.org/ARMv7-A_Bare_Bones) does not really work for this kind of setup, especially since at least with Qemu's Virt emulator, RAM starts at 1GB+, while the article mentions you should set the stack to 0x10000 which will not work since you'll be accessing some memory mapped data.
You're looking at the wrong page. The AArch64 bare-bones is at QEMU AArch64 Virt Bare Bones.
Ah okay, I completely missed that.
But what about a potential page on ramfb/framebuffer for virt on aarch64?

Re: Page for aarch64 with newer cortex

Posted: Tue Mar 05, 2024 3:45 am
by klange
YDeeps1 wrote:Ah okay, I completely missed that.
But what about a potential page on ramfb/framebuffer for virt on aarch64?
I'll note that ramfb is available for all platforms, so a generic article on it would be welcome. (By the way, you can also use other display adapters on AArch64 virt machines, including the bochs one: It's just a PCI device!)

We do have an article on fw_cfg that could be improved with examples for non-x86 arches, since x86 is weird for using I/O ports: https://wiki.osdev.org/QEMU_fw_cfg