Skip to content

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 controlled 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 easily 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 Framebuffer ​

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, omit 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.

Kernel build ​

Kernel build is supported.

Warning

IMPORTANT: the current implementation doesn't include any protection against speculative execution vulnerabilities (Spectre, Meltdown and others) !

Creating a bootable disk ​

This build supports multiboot2, which means that usual multiboot2 bootloaders, 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 ​

boards//