Compare commits
1 Commits
master
...
boot-frame
Author | SHA1 | Date | |
---|---|---|---|
534ad63ae8 |
@@ -60,10 +60,11 @@ file(RELATIVE_PATH _PATH_PREFIX ${EXECTOS_BINARY_DIR} ${EXECTOS_SOURCE_DIR})
|
||||
add_compiler_flags(-D__RELFILE__="&__FILE__[__FILE__[0] == '.' ? sizeof \\\"${_PATH_PREFIX}\\\" - 1 : sizeof XTOS_SOURCE_DIR]")
|
||||
|
||||
# Set the virtual disk image size (in MiB)
|
||||
set_disk_image_size(48)
|
||||
set_disk_image_size(32)
|
||||
|
||||
# Build all subprojects
|
||||
add_subdirectory(boot)
|
||||
add_subdirectory(bootdata)
|
||||
add_subdirectory(drivers)
|
||||
add_subdirectory(sdk)
|
||||
add_subdirectory(xtldr)
|
||||
add_subdirectory(xtoskrnl)
|
||||
|
10
README.md
10
README.md
@@ -58,17 +58,15 @@ design, it requires a modern EFI enabled hardware. It is not possible currently
|
||||
|
||||
# Source structure
|
||||
| Directory | Description |
|
||||
|------------------|--------------------------------------------------------------|
|
||||
| boot/bootdata | default configuration and data needed to boot XTOS |
|
||||
| boot/bootsect | boot sector code (MBR & VBR) initializing the boot process |
|
||||
| boot/xtldr | XTOS boot loader source code |
|
||||
|-------------|----------------------------------------------------------|
|
||||
| bootdata | default configuration and data needed to boot XTOS |
|
||||
| drivers | XT native drivers source code |
|
||||
| sdk/cmake | host toolchain configuration and build-related functions |
|
||||
| sdk/firmware | firmware enabling XTOS to boot on virtual machines |
|
||||
| sdk/cmake | Host toolchain configuration and build-related functions |
|
||||
| sdk/xtdk | XT Software Development Kit headers |
|
||||
| services | integral subsystems services source code |
|
||||
| subsystems | environment subsystems source code |
|
||||
| xtoskrnl | XTOS kernel source code |
|
||||
| xtldr | XTOS boot loader source code |
|
||||
|
||||
# Build
|
||||
XTOS can only be built using [XTchain](https://git.codingworkshop.eu.org/xt-sys/xtchain), a dedicated toolchain designed
|
||||
|
@@ -1,3 +0,0 @@
|
||||
add_subdirectory(bootdata)
|
||||
add_subdirectory(bootsect)
|
||||
add_subdirectory(xtldr)
|
@@ -1,6 +0,0 @@
|
||||
# XT Boot Sector
|
||||
PROJECT(BOOTSECT)
|
||||
|
||||
# Compile boot sectors
|
||||
compile_bootsector(mbrboot ${BOOTSECT_SOURCE_DIR}/mbrboot.S 0x7C00 Start)
|
||||
compile_bootsector(espboot ${BOOTSECT_SOURCE_DIR}/espboot.S 0x7C00 Start)
|
@@ -1,275 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: boot/bootsect/espboot.S
|
||||
* DESCRIPTION: XT Boot Loader ESP boot code (FAT32)
|
||||
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||
*/
|
||||
|
||||
.text
|
||||
.code16
|
||||
|
||||
|
||||
.global Start
|
||||
Start:
|
||||
/* Jump to the real start to omit the BPB (BIOS Parameter Block) */
|
||||
jmp RealStart
|
||||
nop
|
||||
|
||||
/* BIOS Parameter Block */
|
||||
OsName:
|
||||
.ascii "XTOS "
|
||||
OsVersion:
|
||||
.ascii "1.0"
|
||||
BytesPerSector:
|
||||
.word 512
|
||||
SectorsPerCluster:
|
||||
.byte 2
|
||||
ReservedSectors:
|
||||
.word 8
|
||||
FatCopies:
|
||||
.byte 1
|
||||
RootDirEntries:
|
||||
.word 1024
|
||||
TotalSectors:
|
||||
.word 0
|
||||
MediaType:
|
||||
.byte 0xF8
|
||||
SectorsPerFat:
|
||||
.word 0
|
||||
SectorsPerTrack:
|
||||
.word 17
|
||||
NumberOfHeads:
|
||||
.word 0
|
||||
HiddenSectors:
|
||||
.long 0
|
||||
TotalBigSectors:
|
||||
.long 0x200000
|
||||
BigSectorsPerFat:
|
||||
.long 0x1FE0
|
||||
ExtendedFlags:
|
||||
.word 0
|
||||
FsVersion:
|
||||
.word 0
|
||||
RootDirStartCluster:
|
||||
.long 0
|
||||
FSInfoSector:
|
||||
.word 0
|
||||
BackupBootSector:
|
||||
.word 6
|
||||
Reserved:
|
||||
.fill 12, 1, 0
|
||||
DriveNumber:
|
||||
.byte 0x80
|
||||
CurrentHead:
|
||||
.byte 0
|
||||
Signature:
|
||||
.byte 0x29
|
||||
SerialNumber:
|
||||
.long 0
|
||||
VolumeLabel:
|
||||
.ascii "NO NAME "
|
||||
FileSystem:
|
||||
.ascii "FAT32 "
|
||||
|
||||
RealStart:
|
||||
/* Set segments and stack */
|
||||
cli
|
||||
cld
|
||||
xorw %ax, %ax
|
||||
movw %ax, %ds
|
||||
movw %ax, %es
|
||||
movw %ax, %ss
|
||||
movw $0x7C00, %bp
|
||||
leaw -16(%bp), %sp
|
||||
sti
|
||||
|
||||
/* Get drive number */
|
||||
cmpb $0xFF, DriveNumber - Start(%bp)
|
||||
jne GetDriveParameters
|
||||
movb %dl, DriveNumber - Start(%bp)
|
||||
|
||||
GetDriveParameters:
|
||||
/* Get drive parameters from the BIOS */
|
||||
movb DriveNumber - Start(%bp), %dl
|
||||
movb $0x08, %ah
|
||||
movb $0x00, %al
|
||||
int $0x13
|
||||
jnc GetDriveSize
|
||||
movw $0xFFFF, %cx
|
||||
movb %cl, %dh
|
||||
|
||||
GetDriveSize:
|
||||
/* Get drive size from the BIOS */
|
||||
movzbl %dh, %eax
|
||||
incw %ax
|
||||
movzbl %cl, %edx
|
||||
andb $0x3F, %dl
|
||||
mulw %dx
|
||||
xchgb %cl, %ch
|
||||
shrb $0x06, %ch
|
||||
incw %cx
|
||||
movzwl %cx, %ecx
|
||||
mull %ecx
|
||||
movl %eax, %edi
|
||||
|
||||
VerifyBiosParameterBlock:
|
||||
/* Verify the FAT32 BPB */
|
||||
cmpw $0x00, SectorsPerFat - Start(%bp)
|
||||
jne FsError
|
||||
cmpw $0x00, FsVersion - Start(%bp)
|
||||
ja FsError
|
||||
|
||||
ReadExtraCode:
|
||||
/* Read second VBR sector with extra boot code */
|
||||
movl HiddenSectors - Start(%bp), %eax
|
||||
addl $0x02, %eax
|
||||
movw $0x01, %cx
|
||||
xorw %bx, %bx
|
||||
movw %bx, %es
|
||||
movw $0x7E00, %bx
|
||||
call ReadSectors
|
||||
jmp StartSectors
|
||||
|
||||
ReadSectors:
|
||||
/* Check for extended BIOS functions and use it only if available */
|
||||
pushw %es
|
||||
pushal
|
||||
movb $0x41, %ah
|
||||
movw $0x55AA, %bx
|
||||
movb DriveNumber - Start(%bp), %dl
|
||||
int $0x13
|
||||
jc ReadCHS
|
||||
cmpw $0xAA55, %bx
|
||||
jne ReadCHS
|
||||
testb $0x01, %cl
|
||||
jz ReadCHS
|
||||
|
||||
/* Verify drive size and determine whether to use CHS or LBA */
|
||||
cmpl %edi, %eax
|
||||
jnb ReadLBA
|
||||
|
||||
ReadCHS:
|
||||
/* Read sectors using CHS */
|
||||
popal
|
||||
pushal
|
||||
xorl %edx, %edx
|
||||
movzwl SectorsPerTrack - Start(%bp), %ecx
|
||||
divl %ecx
|
||||
incb %dl
|
||||
movb %dl, %cl
|
||||
movl %eax, %edx
|
||||
shrl $0x10, %edx
|
||||
divw NumberOfHeads - Start(%bp)
|
||||
movb %dl, %dh
|
||||
movb DriveNumber - Start(%bp), %dl
|
||||
movb %al, %ch
|
||||
rorb $0x01, %ah
|
||||
rorb $0x01, %ah
|
||||
orb %ah, %cl
|
||||
movw $0x0201, %ax
|
||||
int $0x13
|
||||
jc DiskError
|
||||
popal
|
||||
incl %eax
|
||||
movw %es, %dx
|
||||
addw $0x20, %dx
|
||||
movw %dx, %es
|
||||
loop ReadCHS
|
||||
popw %es
|
||||
ret
|
||||
|
||||
ReadLBA:
|
||||
/* Prepare DAP packet and read sectors using LBA */
|
||||
popal
|
||||
pushw %cx
|
||||
pushal
|
||||
pushw $0x00
|
||||
pushw $0x00
|
||||
pushl %eax
|
||||
pushw %es
|
||||
pushw %bx
|
||||
pushw %cx
|
||||
pushw $0x10
|
||||
movw %sp, %si
|
||||
movb DriveNumber - Start(%bp), %dl
|
||||
movb $0x42, %ah
|
||||
int $0x13
|
||||
jc DiskError
|
||||
addw $0x10, %sp
|
||||
popal
|
||||
popw %si
|
||||
pushw %bx
|
||||
movzwl %si, %ebx
|
||||
addl %ebx, %eax
|
||||
shll $0x05, %ebx
|
||||
movw %es, %dx
|
||||
addw %bx, %dx
|
||||
movw %dx, %es
|
||||
popw %bx
|
||||
subw %si, %cx
|
||||
jnz ReadLBA
|
||||
popw %es
|
||||
ret
|
||||
|
||||
DiskError:
|
||||
/* Display disk error message and reboot */
|
||||
movw $msgDiskError, %si
|
||||
call Print
|
||||
jmp Reboot
|
||||
|
||||
FsError:
|
||||
/* Display FS error message and reboot */
|
||||
movw $msgFsError, %si
|
||||
call Print
|
||||
jmp Reboot
|
||||
|
||||
Print:
|
||||
/* Simple routine to print messages */
|
||||
lodsb
|
||||
orb %al, %al
|
||||
jz DonePrint
|
||||
movb $0x0E, %ah
|
||||
movw $0x07, %bx
|
||||
int $0x10
|
||||
jmp Print
|
||||
DonePrint:
|
||||
retw
|
||||
|
||||
Reboot:
|
||||
/* Display a message, wait for a key press and reboot */
|
||||
movw $msgAnyKey, %si
|
||||
call Print
|
||||
xorw %ax, %ax
|
||||
int $0x16
|
||||
int $0x19
|
||||
|
||||
msgAnyKey:
|
||||
.ascii "Press any key to restart\r\n"
|
||||
|
||||
msgDiskError:
|
||||
.ascii "Disk error\r\n"
|
||||
|
||||
msgFsError:
|
||||
.ascii "File system error\r\n"
|
||||
|
||||
/* Fill the rest of the VBR with zeros and add VBR signature at the end */
|
||||
.fill (510 - (. - Start)), 1, 0
|
||||
.word 0xAA55
|
||||
|
||||
|
||||
StartSectors:
|
||||
/* Print message */
|
||||
movw $msgUnavailable, %si
|
||||
call Print
|
||||
|
||||
/* Wait for key press and reboot */
|
||||
xorw %ax, %ax
|
||||
int $0x16
|
||||
int $0x19
|
||||
|
||||
msgUnavailable:
|
||||
.ascii "XTLDR requires EFI-based system!\r\nPress any key to restart\r\n"
|
||||
|
||||
/* Fill the rest of the extra VBR with zeros */
|
||||
.fill (1024 - (. - Start)), 1, 0
|
@@ -1,153 +0,0 @@
|
||||
/**
|
||||
* PROJECT: ExectOS
|
||||
* COPYRIGHT: See COPYING.md in the top level directory
|
||||
* FILE: boot/bootsect/amd64/mbrboot.S
|
||||
* DESCRIPTION: XT Boot Loader MBR boot code
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
.text
|
||||
.code16
|
||||
|
||||
|
||||
.global Start
|
||||
Start:
|
||||
/* Set segments and stack */
|
||||
cli
|
||||
cld
|
||||
xorw %ax, %ax
|
||||
movw %ax, %ds
|
||||
movw %ax, %es
|
||||
movw %ax, %ss
|
||||
movw $0x7C00, %bp
|
||||
leaw -16(%bp), %sp
|
||||
sti
|
||||
|
||||
/* Relocate MBR to 1FE0:7C00 */
|
||||
movw $0x1FE0, %ax
|
||||
movw %ax, %es
|
||||
movw %bp, %si
|
||||
movw %bp, %di
|
||||
movw $256, %cx
|
||||
rep movsw
|
||||
|
||||
/* Jump to the relocated MBR code */
|
||||
jmp $0x1FE0, $RealStart
|
||||
|
||||
RealStart:
|
||||
/* Set segments */
|
||||
movw %ax, %ds
|
||||
movw %ax, %es
|
||||
movw %ax, %ss
|
||||
|
||||
/* Print welcome message */
|
||||
leaw msgXtosBoot, %si
|
||||
call Print
|
||||
|
||||
/* Get BIOS boot drive and partition table offset */
|
||||
lea 0x1BE(%bp), %si
|
||||
movb %dl, .BootDrive
|
||||
xorw %cx, %cx
|
||||
|
||||
FindActivePartition:
|
||||
/* Look for active partition */
|
||||
movb (%si), %al
|
||||
cmpb $0x80, %al
|
||||
je PartitionFound
|
||||
addw $16, %si
|
||||
incw %cx
|
||||
cmpw $4, %cx
|
||||
jne FindActivePartition
|
||||
jmp PartitionNotFound
|
||||
|
||||
PartitionFound:
|
||||
/* Save LBA start */
|
||||
movl 8(%si), %eax
|
||||
movl %eax, .LbaStart
|
||||
|
||||
/* Prepare Disk Address Packet (DAP) */
|
||||
lea .Dap, %si
|
||||
movb $0x10, 0(%si)
|
||||
movb $0x00, 1(%si)
|
||||
movw $1, 2(%si)
|
||||
movw $0x7C00, 4(%si)
|
||||
movw $0x0000, 6(%si)
|
||||
movl .LbaStart, %eax
|
||||
movl %eax, 8(%si)
|
||||
|
||||
/* Read Volume Boot Record (VBR) */
|
||||
movb $0x42, %ah
|
||||
movb .BootDrive, %dl
|
||||
int $0x13
|
||||
jc VbrReadFail
|
||||
|
||||
/* Verify VBR signature */
|
||||
cmpw $0xAA55, (0x7C00 + 0x01FE)
|
||||
jne InvalidSignature
|
||||
|
||||
/* Jump to the VBR code */
|
||||
jmp $0x0000, $0x7C00
|
||||
|
||||
InvalidSignature:
|
||||
/* Invalid signature error */
|
||||
leaw msgInvalidSignature, %si
|
||||
call Print
|
||||
jmp HaltSystem
|
||||
|
||||
PartitionNotFound:
|
||||
/* Active partition not found error */
|
||||
leaw msgPartitionNotFound, %si
|
||||
call Print
|
||||
jmp HaltSystem
|
||||
|
||||
VbrReadFail:
|
||||
/* VBR read failed error */
|
||||
leaw msgVbrReadFail, %si
|
||||
call Print
|
||||
jmp HaltSystem
|
||||
|
||||
HaltSystem:
|
||||
/* Disable interrupts and stop the CPU */
|
||||
cli
|
||||
hlt
|
||||
jmp HaltSystem
|
||||
|
||||
Print:
|
||||
/* Simple routine to print messages */
|
||||
lodsb
|
||||
orb %al, %al
|
||||
jz DonePrint
|
||||
movb $0x0E, %ah
|
||||
movw $0x07, %bx
|
||||
int $0x10
|
||||
jmp Print
|
||||
DonePrint:
|
||||
retw
|
||||
|
||||
.BootDrive:
|
||||
/* Storage for the boot drive number */
|
||||
.byte 0
|
||||
|
||||
.Dap:
|
||||
/* Storage for the Disk Address Packet (DAP) */
|
||||
.fill 16, 1, 0
|
||||
|
||||
.LbaStart:
|
||||
/* Storage for the LBA start */
|
||||
.long 0
|
||||
|
||||
msgInvalidSignature:
|
||||
.asciz "Invalid partition signature!"
|
||||
|
||||
msgPartitionNotFound:
|
||||
.asciz "Bootable partition not found!"
|
||||
|
||||
msgVbrReadFail:
|
||||
.asciz "VBR read failed!"
|
||||
|
||||
msgXtosBoot:
|
||||
.asciz "Starting XTOS boot loader...\r\n"
|
||||
|
||||
/* Fill the rest of the MBR with zeros and add MBR signature at the end */
|
||||
.fill (510 - (. - Start)), 1, 0
|
||||
.word 0xAA55
|
@@ -8,25 +8,27 @@ endif()
|
||||
# This target creates a disk image
|
||||
add_custom_target(diskimg
|
||||
DEPENDS install
|
||||
COMMAND diskimg -c ${EXECTOS_BINARY_DIR}/output/binaries -f 32 -o ${EXECTOS_BINARY_DIR}/output/disk.img -s ${PROJECT_DISK_IMAGE_SIZE}
|
||||
-m ${EXECTOS_BINARY_DIR}/boot/bootsect/mbrboot.bin -v ${EXECTOS_BINARY_DIR}/boot/bootsect/espboot.bin
|
||||
COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_DISK_IMAGE_BLOCKS} 2>/dev/null 1>/dev/null"
|
||||
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mklabel gpt
|
||||
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mkpart EFI FAT32 2048s ${PROJECT_PART_IMAGE_BLOCKS}s
|
||||
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal toggle 1 boot
|
||||
COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/part.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} 2>/dev/null 1>/dev/null"
|
||||
COMMAND mformat -i ${EXECTOS_BINARY_DIR}/output/part.img -h32 -t32 -n64 -L32
|
||||
COMMAND sh -c "mcopy -s -i ${EXECTOS_BINARY_DIR}/output/part.img ${EXECTOS_BINARY_DIR}/output/binaries/* ::"
|
||||
COMMAND sh -c "dd if=${EXECTOS_BINARY_DIR}/output/part.img of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} seek=2048 conv=notrunc 2>/dev/null 1>/dev/null"
|
||||
COMMAND rm ${EXECTOS_BINARY_DIR}/output/part.img
|
||||
VERBATIM)
|
||||
|
||||
find_program(BOCHS_EMULATOR bochs)
|
||||
if(BOCHS_EMULATOR)
|
||||
# This target starts up a BOCHS+BIOS virtual machine
|
||||
add_custom_target(bochsvm
|
||||
# This target starts up a BOCHS+OVMF virtual machine
|
||||
add_custom_target(bochsvm
|
||||
DEPENDS diskimg
|
||||
COMMAND bochs -f ../sdk/firmware/bochsrc_${ARCH}.cfg -q -unlock
|
||||
VERBATIM USES_TERMINAL)
|
||||
endif()
|
||||
|
||||
find_program(QEMU_EMULATOR ${QEMU_COMMAND})
|
||||
if(QEMU_EMULATOR)
|
||||
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
||||
add_custom_target(testefikvm
|
||||
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
||||
add_custom_target(testkvm
|
||||
DEPENDS install
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-KVM" -machine type=q35,kernel_irqchip=on,accel="kvm:whpx",mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
||||
@@ -34,32 +36,13 @@ if(QEMU_EMULATOR)
|
||||
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||
VERBATIM USES_TERMINAL)
|
||||
|
||||
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
||||
add_custom_target(testefitcg
|
||||
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
||||
add_custom_target(testtcg
|
||||
DEPENDS install
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
||||
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
||||
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
||||
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||
VERBATIM USES_TERMINAL)
|
||||
|
||||
# This target starts up a QEMU+SEABIOS virtual machine using KVM accelerator
|
||||
add_custom_target(testkvm
|
||||
DEPENDS diskimg
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-KVM" -machine type=q35,kernel_irqchip=on,accel="kvm:whpx",mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
|
||||
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
||||
VERBATIM USES_TERMINAL)
|
||||
|
||||
# This target starts up a QEMU+SEABIOS virtual machine using TCG accelerator
|
||||
add_custom_target(testtcg
|
||||
DEPENDS diskimg
|
||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
|
||||
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
||||
VERBATIM USES_TERMINAL)
|
||||
endif()
|
||||
|
@@ -87,13 +87,18 @@ function(compile_bootsector NAME SOURCE BASEADDR ENTRYPOINT)
|
||||
)
|
||||
endfunction()
|
||||
|
||||
# This function sets the the qemu disk image size (in MiB)
|
||||
function(set_disk_image_size SIZE)
|
||||
MATH(EXPR DISK_BLOCKS ${SIZE}*1024*1024/512)
|
||||
MATH(EXPR PART_BLOCKS ${DISK_BLOCKS}-2048)
|
||||
set(PROJECT_DISK_IMAGE_SIZE ${SIZE} CACHE INTERNAL "PROJECT_DISK_IMAGE_SIZE")
|
||||
set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS")
|
||||
set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS")
|
||||
# This function sets a property for specified module
|
||||
function(set_module_property MODULE PROPERTY FLAGS)
|
||||
if(NOT ${ARGC} EQUAL 3)
|
||||
message(FATAL_ERROR "Invalid number of arguments passwd to add_module_property() function")
|
||||
endif()
|
||||
get_target_property(VAL ${MODULE} ${PROPERTY})
|
||||
if(VAL)
|
||||
set(VAL "${VAL} ${FLAGS}")
|
||||
else()
|
||||
set(VAL "${FLAGS}")
|
||||
endif()
|
||||
set_property(TARGET ${MODULE} PROPERTY ${PROPERTY} ${VAL})
|
||||
endfunction()
|
||||
|
||||
# This function installs specified directory recursively under destination directory
|
||||
@@ -112,20 +117,6 @@ function(set_install_target TARGET DESTINATION)
|
||||
install(TARGETS ${TARGET} DESTINATION ${EXECTOS_BINARY_DIR}/output/binaries/${DESTINATION})
|
||||
endfunction()
|
||||
|
||||
# This function sets a property for specified module
|
||||
function(set_module_property MODULE PROPERTY FLAGS)
|
||||
if(NOT ${ARGC} EQUAL 3)
|
||||
message(FATAL_ERROR "Invalid number of arguments passwd to add_module_property() function")
|
||||
endif()
|
||||
get_target_property(VAL ${MODULE} ${PROPERTY})
|
||||
if(VAL)
|
||||
set(VAL "${VAL} ${FLAGS}")
|
||||
else()
|
||||
set(VAL "${FLAGS}")
|
||||
endif()
|
||||
set_property(TARGET ${MODULE} PROPERTY ${PROPERTY} ${VAL})
|
||||
endfunction()
|
||||
|
||||
function(set_sdk_target FILENAME DESTINATION)
|
||||
install(DIRECTORY ${FILENAME} DESTINATION ${EXECTOS_BINARY_DIR}/output/sdk/${DESTINATION})
|
||||
endfunction()
|
||||
@@ -139,3 +130,11 @@ function(set_specfile SPECFILE EXPORTNAME)
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.def ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c
|
||||
COMMAND ${CMAKE_SPEC_COMPILER} -a=${ARCH} -n=${EXPORTNAME} -d=${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c ${CMAKE_CURRENT_SOURCE_DIR}/${SPECFILE})
|
||||
endfunction()
|
||||
|
||||
# This function sets the the qemu disk image size (in MiB)
|
||||
function(set_disk_image_size SIZE)
|
||||
MATH(EXPR DISK_BLOCKS ${SIZE}*1024*1024/512)
|
||||
MATH(EXPR PART_BLOCKS ${DISK_BLOCKS}-2048)
|
||||
set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS")
|
||||
set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS")
|
||||
endfunction()
|
||||
|
@@ -3,9 +3,9 @@ plugin_ctrl: usb_xhci=false, serial=true, e1000=false, extfpuirq=true, parallel=
|
||||
config_interface: textconfig
|
||||
display_library: x
|
||||
memory: host=64, guest=64
|
||||
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
|
||||
romimage: file="../sdk/firmware/ovmf_pure_amd64.fd", address=0x00000000, options=none
|
||||
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
||||
boot: disk
|
||||
boot: floppy
|
||||
floppy_bootsig_check: disabled=0
|
||||
floppya: type=1_44
|
||||
# no floppyb
|
||||
@@ -27,7 +27,11 @@ optramimage3: file=none
|
||||
optramimage4: file=none
|
||||
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=none
|
||||
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
|
||||
cpu: count=1:1:1, ips=400000000, quantum=16, model=corei7_sandy_bridge_2600k, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
cpu: count=1:1:1, ips=400000000, quantum=16, model=bx_generic, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
|
||||
cpuid: mmx=true, apic=xapic, simd=sse4_2, sse4a=false, misaligned_sse=false, sep=true
|
||||
cpuid: movbe=false, adx=false, aes=false, sha=false, xsave=false, xsaveopt=false, x86_64=true
|
||||
cpuid: 1g_pages=false, pcid=false, fsgsbase=false, smep=false, smap=false, mwait=true
|
||||
print_timestamps: enabled=0
|
||||
port_e9_hack: enabled=0
|
||||
private_colormap: enabled=0
|
||||
|
@@ -3,9 +3,9 @@ plugin_ctrl: usb_xhci=false, serial=true, e1000=false, extfpuirq=true, parallel=
|
||||
config_interface: textconfig
|
||||
display_library: x
|
||||
memory: host=64, guest=64
|
||||
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
|
||||
romimage: file="../sdk/firmware/ovmf_pure_i686.fd", address=0x00000000, options=none
|
||||
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
||||
boot: disk
|
||||
boot: floppy
|
||||
floppy_bootsig_check: disabled=0
|
||||
floppya: type=1_44
|
||||
# no floppyb
|
||||
@@ -27,7 +27,11 @@ optramimage3: file=none
|
||||
optramimage4: file=none
|
||||
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=none
|
||||
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
|
||||
cpu: count=1:1:1, ips=400000000, quantum=16, model=corei7_sandy_bridge_2600k, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
cpu: count=1:1:1, ips=400000000, quantum=16, model=bx_generic, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
|
||||
cpuid: mmx=true, apic=xapic, simd=sse4_2, sse4a=false, misaligned_sse=false, sep=true
|
||||
cpuid: movbe=false, adx=false, aes=false, sha=false, xsave=false, xsaveopt=false, x86_64=true
|
||||
cpuid: 1g_pages=false, pcid=false, fsgsbase=false, smep=false, smap=false, mwait=true
|
||||
print_timestamps: enabled=0
|
||||
port_e9_hack: enabled=0
|
||||
private_colormap: enabled=0
|
||||
|
BIN
sdk/firmware/ovmf_pure_amd64.fd
Normal file
BIN
sdk/firmware/ovmf_pure_amd64.fd
Normal file
Binary file not shown.
BIN
sdk/firmware/ovmf_pure_i686.fd
Normal file
BIN
sdk/firmware/ovmf_pure_i686.fd
Normal file
Binary file not shown.
Binary file not shown.
3949
sdk/xtdk/xtfont.h
3949
sdk/xtdk/xtfont.h
File diff suppressed because it is too large
Load Diff
@@ -622,7 +622,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
||||
SectionName = InputData;
|
||||
|
||||
/* Find end of the section name */
|
||||
while(*InputData != ']' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||
while(*InputData != ']' && *InputData != '\0' && *InputData != '\n')
|
||||
{
|
||||
/* Advance to the next character */
|
||||
InputData++;
|
||||
@@ -672,7 +672,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
||||
Key = InputData;
|
||||
|
||||
/* Find end of the key */
|
||||
while(*InputData != '=' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||
while(*InputData != '=' && *InputData != '\0' && *InputData != '\n')
|
||||
{
|
||||
/* Advance to the next character */
|
||||
InputData++;
|
||||
@@ -700,7 +700,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
||||
Value = InputData;
|
||||
|
||||
/* Find end of the value */
|
||||
while(*InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||
while(*InputData != '\0' && *InputData != '\n')
|
||||
{
|
||||
/* Advance to the next character */
|
||||
InputData++;
|
@@ -414,6 +414,7 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
||||
{
|
||||
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
|
||||
EFI_PHYSICAL_ADDRESS Address;
|
||||
// PVOID RuntimeServices;
|
||||
EFI_STATUS Status;
|
||||
UINT BlockPages;
|
||||
UINT ParametersSize;
|
||||
@@ -444,10 +445,20 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
||||
/* Set LoaderInformation block properties */
|
||||
LoaderBlock->LoaderInformation.DbgPrint = (PVOID)XtLdrProtocol->Debug.Print;
|
||||
|
||||
/* Attempt to find virtual address of the EFI Runtime Services */
|
||||
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
|
||||
// if(Status == STATUS_EFI_SUCCESS)
|
||||
// {
|
||||
/* Set FirmwareInformation block properties */
|
||||
LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi;
|
||||
// LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = EfiSystemTable->Hdr.Revision;
|
||||
LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = 0; //EfiSystemTable->Hdr.Revision;
|
||||
LoaderBlock->FirmwareInformation.EfiFirmware.EfiRuntimeServices = NULLPTR;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// /* Set invalid firmware type to indicate that kernel cannot rely on FirmwareInformation block */
|
||||
// LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareInvalid;
|
||||
// }
|
||||
|
||||
/* Copy parameters to kernel initialization block */
|
||||
LoaderBlock->KernelParameters = (PWCHAR)((UINT_PTR)*VirtualAddress + sizeof(KERNEL_INITIALIZATION_BLOCK));
|
||||
@@ -652,7 +663,7 @@ Xtos::RunBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
||||
/* Add kernel image memory mapping */
|
||||
Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, ImageContext->VirtualAddress,
|
||||
ImageContext->PhysicalAddress, ImageContext->ImagePages,
|
||||
LoaderSystemCode);
|
||||
LoaderExceptionBlock); // 0 is LoaderExceptionBlock?! Should be LoaderSystemCode?
|
||||
if(Status != STATUS_EFI_SUCCESS)
|
||||
{
|
||||
return Status;
|
3960
xtoskrnl/hl/fbdevfont.cc
Normal file
3960
xtoskrnl/hl/fbdevfont.cc
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user