forked from xt-sys/exectos
Compare commits
24
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b74c31f17c
|
||
|
|
56a1a811b9
|
||
|
|
32bacdd228
|
||
|
|
2d4c82cd29
|
||
|
|
e5611d8081
|
||
|
|
e52977fb63
|
||
|
|
11f096d9f3
|
||
|
|
6e507be5e9
|
||
|
|
6a8a561484
|
||
|
|
c5f522be4c
|
||
|
|
ce8041754b
|
||
|
|
c4af89946b
|
||
|
|
95fecfc095
|
||
|
|
ec4e8c416c
|
||
|
|
64733914f2
|
||
|
|
4e7baf302c
|
||
|
|
2f9a6b5548
|
||
|
|
646e246ec6
|
||
|
|
ae941d2761
|
||
|
|
b40db0d1dd
|
||
|
|
cf4c17df22
|
||
|
|
f152e2bac7
|
||
|
|
f81e895fe1
|
||
|
|
370a635ee2
|
+2
-3
@@ -60,11 +60,10 @@ 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]")
|
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 the virtual disk image size (in MiB)
|
||||||
set_disk_image_size(32)
|
set_disk_image_size(48)
|
||||||
|
|
||||||
# Build all subprojects
|
# Build all subprojects
|
||||||
add_subdirectory(bootdata)
|
add_subdirectory(boot)
|
||||||
add_subdirectory(drivers)
|
add_subdirectory(drivers)
|
||||||
add_subdirectory(sdk)
|
add_subdirectory(sdk)
|
||||||
add_subdirectory(xtldr)
|
|
||||||
add_subdirectory(xtoskrnl)
|
add_subdirectory(xtoskrnl)
|
||||||
|
|||||||
+1
-2
@@ -9,8 +9,7 @@ porting drivers, fixing bugs, writing tests, creating documentation, or helping
|
|||||||
love the help.
|
love the help.
|
||||||
|
|
||||||
## Wish List
|
## Wish List
|
||||||
If you are looking for a way to contribute, but you are not sure where to start, check our [IDEAS](IDEAS.md) and
|
If you are looking for a way to contribute, but you are not sure where to start, check our list of
|
||||||
[KNOWN ISSUES](KNOWN_ISSUES.md) pages for suggestions. We try to keep them up to date. You can also check a list of
|
|
||||||
[open issues](https://git.codingworkshop.eu.org/xt-sys/exectos/issues). If you find interesting task and you are serious
|
[open issues](https://git.codingworkshop.eu.org/xt-sys/exectos/issues). If you find interesting task and you are serious
|
||||||
about tackling one, feel free to contact us. We will be able to provide a more detailed information and suggestions
|
about tackling one, feel free to contact us. We will be able to provide a more detailed information and suggestions
|
||||||
towards getting started.
|
towards getting started.
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
## ExectOS Ideas
|
|
||||||
This is a list of ideas that migh but not must be realized.
|
|
||||||
|
|
||||||
### XTOSKRNL
|
|
||||||
- [ ] Implement mechanism for detecting CPU features and checking hardware requirements. If CPU does not meet
|
|
||||||
requirements, it should cause a kernel panic before any non-supported instruction is being used.
|
|
||||||
- [ ] Finish framebuffer and terminal implementation. Initialization code is already prepared as well as routines for
|
|
||||||
clearing the screen and drawing single points. Terminal should be instantiable (should be able to create many
|
|
||||||
terminals and switch between them) and work on top of FB. It should define ANSI colors and scrollback buffer.
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
## ExectOS Known Issues
|
|
||||||
This is a list of well known bugs that exists in all master branch builds.
|
|
||||||
|
|
||||||
### XTLDR
|
|
||||||
- [ ] EFI Runtime Services are not mapped properly into higher half. They are mapped itself, but all pointers inside
|
|
||||||
that structure point to some physical address that is unavailable after paging is enabled.
|
|
||||||
@@ -57,16 +57,18 @@ ExectOS is in very early development stage, thus its requirements have been not
|
|||||||
design, it requires a modern EFI enabled hardware. It is not possible currently to boot ExectOS on a legacy BIOS.
|
design, it requires a modern EFI enabled hardware. It is not possible currently to boot ExectOS on a legacy BIOS.
|
||||||
|
|
||||||
# Source structure
|
# Source structure
|
||||||
| Directory | Description |
|
| Directory | Description |
|
||||||
|-------------|----------------------------------------------------------|
|
|------------------|--------------------------------------------------------------|
|
||||||
| bootdata | default configuration and data needed to boot XTOS |
|
| boot/bootdata | default configuration and data needed to boot XTOS |
|
||||||
| drivers | XT native drivers source code |
|
| boot/bootsect | boot sector code (MBR & VBR) initializing the boot process |
|
||||||
| sdk/cmake | Host toolchain configuration and build-related functions |
|
| boot/xtldr | XTOS boot loader source code |
|
||||||
| sdk/xtdk | XT Software Development Kit headers |
|
| drivers | XT native drivers source code |
|
||||||
| services | integral subsystems services source code |
|
| sdk/cmake | host toolchain configuration and build-related functions |
|
||||||
| subsystems | environment subsystems source code |
|
| sdk/firmware | firmware enabling XTOS to boot on virtual machines |
|
||||||
| xtoskrnl | XTOS kernel source code |
|
| sdk/xtdk | XT Software Development Kit headers |
|
||||||
| xtldr | XTOS boot loader source code |
|
| services | integral subsystems services source code |
|
||||||
|
| subsystems | environment subsystems source code |
|
||||||
|
| xtoskrnl | XTOS kernel source code |
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
XTOS can only be built using [XTchain](https://git.codingworkshop.eu.org/xt-sys/xtchain), a dedicated toolchain designed
|
XTOS can only be built using [XTchain](https://git.codingworkshop.eu.org/xt-sys/xtchain), a dedicated toolchain designed
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
add_subdirectory(bootdata)
|
||||||
|
add_subdirectory(bootsect)
|
||||||
|
add_subdirectory(xtldr)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# 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)
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
/**
|
||||||
|
* 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 */
|
||||||
|
pushw %cx
|
||||||
|
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
|
||||||
|
popal
|
||||||
|
popw %cx
|
||||||
|
jc DiskError
|
||||||
|
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
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
/**
|
||||||
|
* 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
|
||||||
@@ -622,7 +622,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
|||||||
SectionName = InputData;
|
SectionName = InputData;
|
||||||
|
|
||||||
/* Find end of the section name */
|
/* Find end of the section name */
|
||||||
while(*InputData != ']' && *InputData != '\0' && *InputData != '\n')
|
while(*InputData != ']' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||||
{
|
{
|
||||||
/* Advance to the next character */
|
/* Advance to the next character */
|
||||||
InputData++;
|
InputData++;
|
||||||
@@ -672,7 +672,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
|||||||
Key = InputData;
|
Key = InputData;
|
||||||
|
|
||||||
/* Find end of the key */
|
/* Find end of the key */
|
||||||
while(*InputData != '=' && *InputData != '\0' && *InputData != '\n')
|
while(*InputData != '=' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||||
{
|
{
|
||||||
/* Advance to the next character */
|
/* Advance to the next character */
|
||||||
InputData++;
|
InputData++;
|
||||||
@@ -700,7 +700,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
|
|||||||
Value = InputData;
|
Value = InputData;
|
||||||
|
|
||||||
/* Find end of the value */
|
/* Find end of the value */
|
||||||
while(*InputData != '\0' && *InputData != '\n')
|
while(*InputData != '\0' && *InputData != '\r' && *InputData != '\n')
|
||||||
{
|
{
|
||||||
/* Advance to the next character */
|
/* Advance to the next character */
|
||||||
InputData++;
|
InputData++;
|
||||||
@@ -414,7 +414,6 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
{
|
{
|
||||||
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
|
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
|
||||||
EFI_PHYSICAL_ADDRESS Address;
|
EFI_PHYSICAL_ADDRESS Address;
|
||||||
// PVOID RuntimeServices;
|
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT BlockPages;
|
UINT BlockPages;
|
||||||
UINT ParametersSize;
|
UINT ParametersSize;
|
||||||
@@ -445,20 +444,10 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
/* Set LoaderInformation block properties */
|
/* Set LoaderInformation block properties */
|
||||||
LoaderBlock->LoaderInformation.DbgPrint = (PVOID)XtLdrProtocol->Debug.Print;
|
LoaderBlock->LoaderInformation.DbgPrint = (PVOID)XtLdrProtocol->Debug.Print;
|
||||||
|
|
||||||
/* Attempt to find virtual address of the EFI Runtime Services */
|
/* Set FirmwareInformation block properties */
|
||||||
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
|
LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi;
|
||||||
// if(Status == STATUS_EFI_SUCCESS)
|
// LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = EfiSystemTable->Hdr.Revision;
|
||||||
// {
|
LoaderBlock->FirmwareInformation.EfiFirmware.EfiRuntimeServices = NULLPTR;
|
||||||
/* Set FirmwareInformation block properties */
|
|
||||||
LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi;
|
|
||||||
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 */
|
/* Copy parameters to kernel initialization block */
|
||||||
LoaderBlock->KernelParameters = (PWCHAR)((UINT_PTR)*VirtualAddress + sizeof(KERNEL_INITIALIZATION_BLOCK));
|
LoaderBlock->KernelParameters = (PWCHAR)((UINT_PTR)*VirtualAddress + sizeof(KERNEL_INITIALIZATION_BLOCK));
|
||||||
@@ -663,7 +652,7 @@ Xtos::RunBootSequence(IN PEFI_FILE_HANDLE BootDir,
|
|||||||
/* Add kernel image memory mapping */
|
/* Add kernel image memory mapping */
|
||||||
Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, ImageContext->VirtualAddress,
|
Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, ImageContext->VirtualAddress,
|
||||||
ImageContext->PhysicalAddress, ImageContext->ImagePages,
|
ImageContext->PhysicalAddress, ImageContext->ImagePages,
|
||||||
LoaderExceptionBlock); // 0 is LoaderExceptionBlock?! Should be LoaderSystemCode?
|
LoaderSystemCode);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
+18
-25
@@ -4,48 +4,41 @@
|
|||||||
# DESCRIPTION: Project configuration script for preparing the build environment
|
# DESCRIPTION: Project configuration script for preparing the build environment
|
||||||
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
|
||||||
|
|
||||||
|
|
||||||
# Check XTchain
|
# Check XTchain
|
||||||
if (-not $env:XTCVER) {
|
if (-not $env:XTCVER) {
|
||||||
Write-Host "XTChain not detected or corrupted!"
|
Write-Error "XTChain not detected or corrupted!"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set target architecture
|
# Set target architecture defaulting to amd64
|
||||||
if ($env:TARGET) {
|
$ARCH = if ($env:TARGET) { $env:TARGET } else { "amd64" }
|
||||||
$ARCH = $env:TARGET
|
|
||||||
} else {
|
|
||||||
$ARCH = "amd64"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set target build type
|
# Set target build type defaulting to Debug
|
||||||
if (-not $env:BUILD_TYPE) {
|
$env:BUILD_TYPE = if ($env:BUILD_TYPE -in @("Debug", "Release")) { $env:BUILD_TYPE } else { "Debug" }
|
||||||
$env:BUILD_TYPE = "DEBUG"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Set variables
|
# Set variables
|
||||||
$EXECTOS_SOURCE_DIR = (Get-Location).Path
|
$EXECTOS_SOURCE_DIR = $PSScriptRoot
|
||||||
$EXECTOS_BINARY_DIR = "build-$($ARCH)-$($env:BUILD_TYPE.ToLower())"
|
$EXECTOS_BINARY_DIR = Join-Path $EXECTOS_SOURCE_DIR "build-$ARCH-$($env:BUILD_TYPE.ToLower())"
|
||||||
|
|
||||||
# Create directories if needed
|
# Create build directory
|
||||||
if ($EXECTOS_SOURCE_DIR -eq (Get-Location).Path) {
|
if (-not (Test-Path $EXECTOS_BINARY_DIR)) {
|
||||||
Write-Host "Creating directories in $EXECTOS_BINARY_DIR"
|
Write-Host "Creating build directory: $EXECTOS_BINARY_DIR"
|
||||||
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
|
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
|
||||||
Set-Location -Path $EXECTOS_BINARY_DIR
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Set-Location $EXECTOS_BINARY_DIR
|
||||||
|
|
||||||
# Delete old cache
|
# Delete old cache
|
||||||
Remove-Item -Path "CMakeCache.txt" -ErrorAction SilentlyContinue
|
Remove-Item "CMakeCache.txt", "host-tools/CMakeCache.txt" -ErrorAction SilentlyContinue
|
||||||
Remove-Item -Path "host-tools/CMakeCache.txt" -ErrorAction SilentlyContinue
|
|
||||||
|
|
||||||
# Configure project using CMake
|
# Configure project using CMake
|
||||||
& cmake -G Ninja -DARCH:STRING=$($ARCH) -DBUILD_TYPE:STRING=$($env:BUILD_TYPE) $EXECTOS_SOURCE_DIR
|
& cmake -G Ninja "-DARCH:STRING=$ARCH" "-DBUILD_TYPE:STRING=$($env:BUILD_TYPE)" $EXECTOS_SOURCE_DIR
|
||||||
|
|
||||||
# Check if configuration succeeded
|
# Check if configuration succeeded
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
Write-Host "Configure script failed."
|
Write-Error "Configure script failed."
|
||||||
exit 1
|
exit 1
|
||||||
} else {
|
|
||||||
"$($ARCH)" | Out-File -Encoding ASCII -NoNewline build.arch
|
|
||||||
Write-Host "Configure script completed. Enter '$EXECTOS_BINARY_DIR' directory and execute 'xbuild' to build ExectOS."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$ARCH | Out-File -Encoding ASCII -NoNewline "build.arch"
|
||||||
|
Write-Host "Configure completed. Run 'xbuild' to build ExectOS."
|
||||||
+72
-34
@@ -8,41 +8,79 @@ endif()
|
|||||||
# This target creates a disk image
|
# This target creates a disk image
|
||||||
add_custom_target(diskimg
|
add_custom_target(diskimg
|
||||||
DEPENDS install
|
DEPENDS install
|
||||||
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 diskimg -c ${EXECTOS_BINARY_DIR}/output/binaries -f 32 -o ${EXECTOS_BINARY_DIR}/output/disk.img -s ${PROJECT_DISK_IMAGE_SIZE}
|
||||||
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mklabel gpt
|
-m ${EXECTOS_BINARY_DIR}/boot/bootsect/mbrboot.bin -v ${EXECTOS_BINARY_DIR}/boot/bootsect/espboot.bin
|
||||||
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)
|
VERBATIM)
|
||||||
|
|
||||||
# This target starts up a BOCHS+OVMF virtual machine
|
find_program(BOCHS_EMULATOR bochs)
|
||||||
add_custom_target(bochsvm
|
if(BOCHS_EMULATOR)
|
||||||
DEPENDS diskimg
|
# This target starts up a BOCHS+BIOS virtual machine
|
||||||
COMMAND bochs -f ../sdk/firmware/bochsrc_${ARCH}.cfg -q -unlock
|
add_custom_target(bochsvm
|
||||||
VERBATIM USES_TERMINAL)
|
DEPENDS diskimg
|
||||||
|
COMMAND bochs -f ../sdk/firmware/bochsrc_${ARCH}.cfg -q -unlock
|
||||||
|
VERBATIM USES_TERMINAL)
|
||||||
|
endif()
|
||||||
|
|
||||||
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
find_program(QEMU_EMULATOR ${QEMU_COMMAND})
|
||||||
add_custom_target(testkvm
|
if(QEMU_EMULATOR)
|
||||||
DEPENDS install
|
if(CMAKE_HOST_LINUX)
|
||||||
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
|
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
||||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
add_custom_target(testefikvm
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
DEPENDS install
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
||||||
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||||
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
|
||||||
VERBATIM USES_TERMINAL)
|
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
||||||
|
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||||
|
VERBATIM USES_TERMINAL)
|
||||||
|
elseif(CMAKE_HOST_WIN32)
|
||||||
|
# This target starts up a QEMU+OVMF virtual machine using WHPX accelerator
|
||||||
|
add_custom_target(testefiwhpx
|
||||||
|
DEPENDS install
|
||||||
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-WHPX" -machine type=q35,kernel_irqchip=off,accel=whpx,mem-merge=off,vmport=off
|
||||||
|
-m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||||
|
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
|
||||||
|
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
||||||
|
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||||
|
VERBATIM USES_TERMINAL)
|
||||||
|
endif()
|
||||||
|
|
||||||
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
||||||
add_custom_target(testtcg
|
add_custom_target(testefitcg
|
||||||
DEPENDS install
|
DEPENDS install
|
||||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-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
|
-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
|
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
|
||||||
-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
|
||||||
-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)
|
||||||
VERBATIM USES_TERMINAL)
|
|
||||||
|
if(CMAKE_HOST_LINUX)
|
||||||
|
# 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,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)
|
||||||
|
elseif(CMAKE_HOST_WIN32)
|
||||||
|
# This target starts up a QEMU+SEABIOS virtual machine using WHPX accelerator
|
||||||
|
add_custom_target(testwhpx
|
||||||
|
DEPENDS diskimg
|
||||||
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-WHPX" -machine type=q35,kernel_irqchip=off,accel=whpx,mem-merge=off,vmport=off
|
||||||
|
-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()
|
||||||
|
|
||||||
|
# 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()
|
||||||
|
|||||||
+22
-20
@@ -69,6 +69,7 @@ function(compile_bootsector NAME SOURCE BASEADDR ENTRYPOINT)
|
|||||||
COMMAND ${CMAKE_ASM_COMPILER}
|
COMMAND ${CMAKE_ASM_COMPILER}
|
||||||
/nologo
|
/nologo
|
||||||
--target=i386-none-elf
|
--target=i386-none-elf
|
||||||
|
-I${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
/Fo${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_NAME}
|
/Fo${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_NAME}
|
||||||
-c -- ${SOURCE}
|
-c -- ${SOURCE}
|
||||||
COMMAND ${CMAKE_ASM_LINKER}
|
COMMAND ${CMAKE_ASM_LINKER}
|
||||||
@@ -87,18 +88,13 @@ function(compile_bootsector NAME SOURCE BASEADDR ENTRYPOINT)
|
|||||||
)
|
)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# This function sets a property for specified module
|
# This function sets the the qemu disk image size (in MiB)
|
||||||
function(set_module_property MODULE PROPERTY FLAGS)
|
function(set_disk_image_size SIZE)
|
||||||
if(NOT ${ARGC} EQUAL 3)
|
MATH(EXPR DISK_BLOCKS ${SIZE}*1024*1024/512)
|
||||||
message(FATAL_ERROR "Invalid number of arguments passwd to add_module_property() function")
|
MATH(EXPR PART_BLOCKS ${DISK_BLOCKS}-2048)
|
||||||
endif()
|
set(PROJECT_DISK_IMAGE_SIZE ${SIZE} CACHE INTERNAL "PROJECT_DISK_IMAGE_SIZE")
|
||||||
get_target_property(VAL ${MODULE} ${PROPERTY})
|
set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS")
|
||||||
if(VAL)
|
set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS")
|
||||||
set(VAL "${VAL} ${FLAGS}")
|
|
||||||
else()
|
|
||||||
set(VAL "${FLAGS}")
|
|
||||||
endif()
|
|
||||||
set_property(TARGET ${MODULE} PROPERTY ${PROPERTY} ${VAL})
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# This function installs specified directory recursively under destination directory
|
# This function installs specified directory recursively under destination directory
|
||||||
@@ -117,6 +113,20 @@ function(set_install_target TARGET DESTINATION)
|
|||||||
install(TARGETS ${TARGET} DESTINATION ${EXECTOS_BINARY_DIR}/output/binaries/${DESTINATION})
|
install(TARGETS ${TARGET} DESTINATION ${EXECTOS_BINARY_DIR}/output/binaries/${DESTINATION})
|
||||||
endfunction()
|
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)
|
function(set_sdk_target FILENAME DESTINATION)
|
||||||
install(DIRECTORY ${FILENAME} DESTINATION ${EXECTOS_BINARY_DIR}/output/sdk/${DESTINATION})
|
install(DIRECTORY ${FILENAME} DESTINATION ${EXECTOS_BINARY_DIR}/output/sdk/${DESTINATION})
|
||||||
endfunction()
|
endfunction()
|
||||||
@@ -130,11 +140,3 @@ function(set_specfile SPECFILE EXPORTNAME)
|
|||||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.def ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c
|
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})
|
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()
|
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
|
config_interface: textconfig
|
||||||
display_library: x
|
display_library: x
|
||||||
memory: host=64, guest=64
|
memory: host=64, guest=64
|
||||||
romimage: file="../sdk/firmware/ovmf_pure_amd64.fd", address=0x00000000, options=none
|
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
|
||||||
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
||||||
boot: floppy
|
boot: disk
|
||||||
floppy_bootsig_check: disabled=0
|
floppy_bootsig_check: disabled=0
|
||||||
floppya: type=1_44
|
floppya: type=1_44
|
||||||
# no floppyb
|
# no floppyb
|
||||||
@@ -27,11 +27,7 @@ optramimage3: file=none
|
|||||||
optramimage4: file=none
|
optramimage4: file=none
|
||||||
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=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
|
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
|
||||||
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
|
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
|
||||||
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
|
print_timestamps: enabled=0
|
||||||
port_e9_hack: enabled=0
|
port_e9_hack: enabled=0
|
||||||
private_colormap: 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
|
config_interface: textconfig
|
||||||
display_library: x
|
display_library: x
|
||||||
memory: host=64, guest=64
|
memory: host=64, guest=64
|
||||||
romimage: file="../sdk/firmware/ovmf_pure_i686.fd", address=0x00000000, options=none
|
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
|
||||||
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
vgaromimage: file="../sdk/firmware/vgabios.bin"
|
||||||
boot: floppy
|
boot: disk
|
||||||
floppy_bootsig_check: disabled=0
|
floppy_bootsig_check: disabled=0
|
||||||
floppya: type=1_44
|
floppya: type=1_44
|
||||||
# no floppyb
|
# no floppyb
|
||||||
@@ -27,11 +27,7 @@ optramimage3: file=none
|
|||||||
optramimage4: file=none
|
optramimage4: file=none
|
||||||
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=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
|
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
|
||||||
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
|
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
|
||||||
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
|
print_timestamps: enabled=0
|
||||||
port_e9_hack: enabled=0
|
port_e9_hack: enabled=0
|
||||||
private_colormap: enabled=0
|
private_colormap: enabled=0
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user