How to compile and bootable FreeRTOS for x86

hello friends
I need to compile and make bootable FreeRTOS operating system for the X86 (intel atom CPU) architecture and create a simple user interface for it using Qt. What tools do I need for such work?
And has anyone done such a thing?
please guide me.

This is probably the closest to what you want: FreeRTOS running on the Intel Galileo (x86/IA32 Quark SoC X1000) - note it uses a flat 32-bit memory model (no virtual memory).

do we have any reference on FreeRTOS porting on X86 64bit processors?.
is FreeRTOS is 32bit or 64bit?

FreeRTOS is capable of running on both 32-bit and 64-bit platforms. An example is our RISC-V port which can run on both 32-bit and 64-bit architecture. I do not think we have an x86-64 port. Feel free to upstream if you decide to write one.

HI Friends,
I am building for free_RTOS for x86_64 bit architecture during that i am facing so many issues any idea how to proceed further.
If any document available please let me know. I am taking 32 bit [(x86/IA32 Quark SoC X1000) as a reference.

That is a very vague question and it is not possible to answer till you describe the issues you are facing.

This page has some basic details about how to write a new port - FreeRTOS Porting Guide.

I followed the same steps (x86/IA32 Quark SoC X1000) as a reference to build it for 64 bit architecture with little bit modifications like adding same files in x86_64-Demo. along with startup.s file also. So we are getting the linking errors in startup.s file it is not compactable with the architecture. May i know startup.s file related to x86_64 bit architecture then it is good.

Which demo and startup file are you talking about? Would you please paste the link?

#define SHOW_KERNEL_PARAMS 0

/* Local definitions boot loader */
#define MULTIBOOT_SIGNATURE 0x2BADB002
#define MULTIBOOT_BOOTINFO_MMAP 0x00000040

/* Local definitions for GD table */
#define GDT_ENTRIES 8
#define GDT_ENTRY_SIZE 16
#define GDT_BYTES (GDT_ENTRIES * GDT_ENTRY_SIZE)

/* Globals and externs */
.global _mboot_hdr
.global _start
.global _restart

.extern bootsign
.extern bootinfo

.extern __text_start
.extern __text_end
.extern __data_vma
.extern __data_lma
.extern __data_start
.extern __data_end
.extern __bss_start
.extern __bss_end
.extern __stack_for_main

.global __text_start
.global __text_end
.global __data_vma
.global __data_lma
.global __data_start
.global __data_end
.global __bss_start
.global __bss_end

.extern setsegs
.extern CRT_Init
.extern kernel_load_check
.extern main

/* Local constants for multiboot section */
.set ALIGN,        1<<0                /* align loaded modules on page boundaries */
.set MEMINFO,        1<<1                /* provide memory map */
.set MAGIC,        0x1BADB002            /* 'magic number' lets bootloader find the header */
.set FLAGS,        ALIGN|MEMINFO        /* this is the multiboot 'flag' field */
.set CHECKSUM,    -(MAGIC + FLAGS)    /* checksum of above */

/* Set-up GDT */
.section .data

.align    16
.globl    gdt
gdt:    .space    GDT_BYTES
gdtr:    .quad    (GDT_BYTES-1)        /* sizeof _gdt -1 (in bytes) */
.quad    gdt                            /* global pointer to the gdt */

/* Start of application text */
.section .text.entry

/* Skip mb header */
jmp _start

.align 4
/* Multiboot header */
_mboot_hdr:
.long MAGIC                            /* offset = 0 */
.long FLAGS                            /* offset = 4 */
.long CHECKSUM                        /* offset = 8 */
.long _mboot_hdr                    /* should be header address - offset = 12 */
.quad __text_start                    /* load address (start of text) - offset = 16 */
.quad __bss_start                    /* load end address (end of data) - offset = 24*/
.quad __bss_end                        /* bss end address - offset = 32*/
.quad _start                        /* entry_addr - offset = 40*/

/* Start of executable code */
_start:

/* Store boot arguments */
movq    %rax, bootsign
movq    %rbx, bootinfo

/* Check to see if kernel is bootstrapped by grub */
cmpl $MULTIBOOT_SIGNATURE, %eax
jne _local_loop
testb    $MULTIBOOT_BOOTINFO_MMAP, (%rbx)
je    _local_loop

_restart:

/* Initialise the stack pointer */
movq $__stack_for_main, %rsp

/* Reset RFLAGS. */
push $0
popfq

/* Set up the global descriptor table */
call    setsegs
lgdt    gdtr
jmp    gdt1                    /* CS descriptor 1 */
gdt1:
movq    $0x10, %rax                    /* DS descriptor 2 */
movw    %ax, %ds
movw    %ax, %es
movw    %ax, %fs
movw    %ax, %gs
movq    $0x18, %rax                    /* SS descriptor 3 */
movw    %ax, %ss

/* Clear interrupt flag */
cli

/* Initialise platform */
call CRT_Init

/* Show kernel parameters and call main, or just call main */
#if (__SHOW_KERNEL_PARAMS__ == 1)
    /*---------------------------------------------------------------------
        On successful OS load EAX should contain 0x2BADB002
        EBX should contain the physical address of multiboot info structure

        Push the pointers to the multiboot information structure
        and the magic number on the stack and check values returned
    ----------------------------------------------------------------------*/
    movq    bootsign, %rax
    movq    bootinfo, %rbx
    pushq   %rbx        /* Multiboot information */
    pushq   %rax        /* Magic number */
    call show_kernel_parameters
#else
    /*---------------------------------------------------------------------
        Call main() routine
    ----------------------------------------------------------------------*/
    call main
#endif

/* Should not get here, but just in case - loop forever */
cli
_local_loop:
hlt
jmp _local_loop

/*-------------------------------------------------------------------------
                  GLOBAL ASSEMBLY LANGUAGE ROUTINES
--------------------------------------------------------------------------*/

/* halt */
.globl    halt
halt:
jmp halt
ret

/* inb */
.globl    inb
inb:    movq    8(%rsp), %rdx
xorq    %rax, %rax    # clr rax
inb    %dx, %al
ret

/* inw */
.globl    inw
inw:    movq    8(%rsp), %rdx
xorq    %rax, %rax    # clr rax
inw        %dx, %ax
ret

/* inl */
.globl    inl
inl:    movq    8(%rsp), %rdx
xorq    %rax, %rax
inl        %dx, %eax
ret

/* outb */
.globl    outb
outb:    movq    8(%rsp), %rdx
movq    16(%rsp), %rax
outb    %al, %dx
ret

/* outw */
.globl    outw
outw:    movq    8(%rsp), %rdx
movq    16(%rsp), %rax
outw    %ax, %dx
ret

/* outl */
.globl    outl
outl:    movq    8(%rsp), %rdx
movq    16(%rsp), %rax
outl    %eax, %dx
ret

.end

I am unable to paste the link.
The above code i am using for my project to build free rtos for x86_64.
Then i am getting some GDT errors.
Can you please provide actual starrup.s file and lds file to build my free rtos.

You should now be able to post links.