Documentation: update x86_64 doc

Documentation: update x86_64 doc
This commit is contained in:
raiden00pl 2024-11-07 09:42:00 +01:00 committed by Xiang Xiao
parent 0ca02775eb
commit 45c4350cf1
4 changed files with 187 additions and 93 deletions

View file

@ -10,26 +10,10 @@ arch/x86_64/src/common/ Directory
This directory holds source files common to all x86_64 architectures.
Architecture-Specific Directories
arch/x86_64/src/cmake/ Directory
=================================
Architecture-specific directories hold common source files shared for by
implementations of specific x86_64 architectures.
``intel64``
This directory holds logic appropriate for any instantiation of the 64-bit
intel64 architecture.
Chip-Specific directories
=========================
The same x86 architecture may be realized in different chip implementations.
For SoC chips, in particular, on-chip devices and differing interrupt
structures may require special, chip-specific definitions in these chip-
specific directories.
``broadwell``
This is the implementation of NuttX on the Intel Broadwell processors.
This directory holds CMake support for x86_64 architecture.
.. toctree::
:maxdepth: 1

View file

@ -5,52 +5,7 @@ qemu-intel64
This page file describes the contents of the build configurations available
for the NuttX QEMU x86_64 port.
Creating a bootable disk
========================
This build supports multiboot2, which means that usual multiboot2 bootlaoders,
e.g. grub can be used. To create a bootable disk with grub2, create a directory
named ``iso`` with grub configuration file and the compiled ``nuttx.elf``.
Directory and file hierarchy::
- iso/
- boot/
- grub/
- grub.cfg
- nuttx.elf
The grub.cfg should contain the boot entry of NuttX::
set timeout=0
set default=0
menuentry "kernel" {
multiboot2 /boot/nuttx.elf
}
Making the disk
---------------
Use the following command to create the disk.
P.S. In some distros, ``grub-mkrescue`` is called ``grub2-mkrescue``::
grub-mkrescue -o boot.iso iso
Grub with UEFI
--------------
This flow is very similar except you need to have the BOOTX64.EFI file.
You can find this in most Linux distributions::
iso/
└── boot
├── efi
│ └── EFI
│ └── BOOT
│ └── BOOTX64.EFI
├── grub
│ └── grub.cfg
└── nuttx.elf
QEMU/KVM
========
@ -75,10 +30,14 @@ frustrating. In such case, looks the next section and use bochs emulator instead
Running QEMU
------------
In the top-level NuttX directory::
When you created a bootable disk, use command::
qemu-system-x86_64 -cpu host -enable-kvm -m 2G -cdrom boot.iso -nographic -serial mon:stdio
or, when option ``CONFIG_ARCH_PVHBOOT`` is set, you can use ``-kernel`` argument instead::
qemu-system-x86_64 -cpu host -enable-kvm -m 2G -kernel nuttx.elf -nographic -serial mon:stdio
This multiplex the qemu console and COM1 to your console.
Use control-a 1 and 2 to switch between.
@ -140,12 +99,13 @@ COM port output will be in the com1.out file.
Real machine
============
This port should work on real x86-64 machine with a proper CPU.
This port can work on real x86-64 machine with a proper CPU.
The mandatory CPU features are:
* TSC DEADLINE or APIC timer
* TSC DEADLINE or APIC timer or HPET
* PCID
* X2APIC
* legacy serial port support or PCI serial card (AX99100 only supported now)
WARNING: IF you use TSC DEADLINE, make sure that your CPU's TSC DEADLINE timer
is not buggy!
@ -187,7 +147,46 @@ Common Configuration Notes
Configuration Sub-Directories
-----------------------------
nsh
---
This configuration provides a basic NuttShell configuration (NSH) with
the default console on legacy UART0 port (base=0x3f8)
nsh_pci
-------
This configuration provides a basic NuttShell configuration (NSH) with
the default console on PCI serial port (AX99100 based card).
nsh_pci_smp
-----------
This is a configuration to run NuttX in SMP mode on hardware with
a PCI serial port card (AX99100).
ostest
------
The "standard" NuttX examples/ostest configuration.
The "standard" NuttX examples/ostest configuration with
the default console on legacy UART0 port (base=0x3f8)
jumbo
-----
This is a QEMU configuration that enables many NuttX features.
Basic command to run the image without additional PCI devices attached::
qemu-system-x86_64 -m 2G -cpu host -smp 4 -enable-kvm \
-kernel nuttx -nographic -serial mon:stdio
lvgl
----
LVGL demo example that demonstrates x86_64 framebufer feature.
fb
---
Configuration that enables NuttX framebuffer examples.

View file

@ -0,0 +1,137 @@
=======
Intel64
=======
Architecture-Specific Directories
=================================
Architecture-specific directories hold common source files shared for by
implementations of specific x86_64 architectures.
``intel64``
This directory holds logic appropriate for any instantiation of the 64-bit
intel64 architecture.
Chip-Specific directories
=========================
The same x86 architecture may be realized in different chip implementations.
For SoC chips, in particular, on-chip devices and differing interrupt
structures may require special, chip-specific definitions in these chip-
specific directories.
``qemu``
This is the implementation of NuttX on the QEMU x86_64. It's empty for now.
Features
========
Hardware acceleration
---------------------
Configurable hardware acceleration: SSE, AVX2, AVX512 support.
FMA, AVX and AVX512 support requires ``XSAVE`` instructions support which is
controled with ``CONFIG_ARCH_X86_64_HAVE_XSAVE`` option.
IRQs
----
IRQs are managed by LAPIC(X2APIC) and IOAPIC.
Clock source
------------
TSC DEADLINE timer, APIC timer or HPET can be used as system clock.
SMP
---
SMP is supported up to 4 cores now (BSP + 3 AP), but can be easly extended.
HPET
----
High Precision Event Timer (HPET) is supported as oneshot timer.
RDRAND
------
The ``/dev/random`` device support with ``RDRAND`` instruction is enabled with
``CONFIG_ARCH_INTEL64_HAVE_RDRAND=y``
PCI bus
-------
PCI bus is supported with legacy interrupts, MSI and MSI-X.
Multiboot Framebufer
--------------------
Multiboot2 framebuffer is supported with ``CONFIG_MULTBOOT2_FB_TERM=y``.
It is very possible that the framebuffer is mapped in a memory region above 4GB,
so you may also need to set ``CONFIG_MM_PGALLOC=y``.
To enable framebuffer support in QEMU, ommit the ``-nographic`` argument
and use ``-cdrom boot.iso`` (multiboot2 framebuffer doesn't work with
``-kernel`` option).
Also, your GRUB configuration (``grub.cfg``) should insert the appropriate video
module, in many cases ``insmod all_video`` should be enough.
Creating a bootable disk
========================
This build supports multiboot2, which means that usual multiboot2 bootlaoders,
e.g. grub can be used. To create a bootable disk with grub2, create a directory
named ``iso`` with grub configuration file and the compiled ``nuttx.elf``.
Directory and file hierarchy::
- iso/
- boot/
- grub/
- grub.cfg
- nuttx.elf
The grub.cfg should contain the boot entry of NuttX::
set timeout=0
set default=0
menuentry "kernel" {
multiboot2 /boot/nuttx.elf
}
Making the disk
---------------
Use the following command to create the disk.
P.S. In some distros, ``grub-mkrescue`` is called ``grub2-mkrescue``::
grub-mkrescue -o boot.iso iso
Grub with UEFI
--------------
This flow is very similar except you need to have the BOOTX64.EFI file.
You can find this in most Linux distributions::
iso/
└── boot
├── efi
│ └── EFI
│ └── BOOT
│ └── BOOTX64.EFI
├── grub
│ └── grub.cfg
└── nuttx.elf
Supported Boards
================
.. toctree::
:glob:
:maxdepth: 1
boards/*/*

View file

@ -1,26 +0,0 @@
===========
QEMU x86_64
===========
**QEMU/Intel64** An x86_64 flat address port was ported in NuttX-9.0. It
consists of the following feautres:
- Runs in x86_64 long mode.
- Configurable SSE/AVX support.
- IRQs are managed by LAPIC(X2APIC) and IOAPIC.
- Used TSC_DEADLINE or APIC timer for systick.
- Pages are now maps the kernel at 4GB~, but changeable.
This kernel with ostest have been tested with
- Qemu/KVM on a Xeon 2630v4 machine.
- Bochs with broadwell_ult emulation.
Supported Boards
================
.. toctree::
:glob:
:maxdepth: 1
boards/*/*