diff --git a/Documentation/platforms/x86_64/index.rst b/Documentation/platforms/x86_64/index.rst index 0d07f623640..3bcc7d08f27 100644 --- a/Documentation/platforms/x86_64/index.rst +++ b/Documentation/platforms/x86_64/index.rst @@ -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 diff --git a/Documentation/platforms/x86_64/qemu/boards/qemu-intel64/index.rst b/Documentation/platforms/x86_64/intel64/boards/qemu-intel64/index.rst similarity index 77% rename from Documentation/platforms/x86_64/qemu/boards/qemu-intel64/index.rst rename to Documentation/platforms/x86_64/intel64/boards/qemu-intel64/index.rst index c927ad922a7..3978e576e1e 100644 --- a/Documentation/platforms/x86_64/qemu/boards/qemu-intel64/index.rst +++ b/Documentation/platforms/x86_64/intel64/boards/qemu-intel64/index.rst @@ -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. diff --git a/Documentation/platforms/x86_64/intel64/index.rst b/Documentation/platforms/x86_64/intel64/index.rst new file mode 100644 index 00000000000..d151207877a --- /dev/null +++ b/Documentation/platforms/x86_64/intel64/index.rst @@ -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/*/* diff --git a/Documentation/platforms/x86_64/qemu/index.rst b/Documentation/platforms/x86_64/qemu/index.rst deleted file mode 100644 index 5cd096b8416..00000000000 --- a/Documentation/platforms/x86_64/qemu/index.rst +++ /dev/null @@ -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/*/*