forked from xt-sys/exectos
Compare commits
1 Commits
powershell
...
cpuid-enha
Author | SHA1 | Date | |
---|---|---|---|
46cc5072af |
@@ -60,10 +60,12 @@ 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(48)
|
set_disk_image_size(32)
|
||||||
|
|
||||||
# Build all subprojects
|
# Build all subprojects
|
||||||
add_subdirectory(boot)
|
add_subdirectory(boot)
|
||||||
|
add_subdirectory(bootdata)
|
||||||
add_subdirectory(drivers)
|
add_subdirectory(drivers)
|
||||||
add_subdirectory(sdk)
|
add_subdirectory(sdk)
|
||||||
|
add_subdirectory(xtldr)
|
||||||
add_subdirectory(xtoskrnl)
|
add_subdirectory(xtoskrnl)
|
||||||
|
@@ -9,7 +9,8 @@ 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 list of
|
If you are looking for a way to contribute, but you are not sure where to start, check our [IDEAS](IDEAS.md) and
|
||||||
|
[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.
|
||||||
|
9
IDEAS.md
Normal file
9
IDEAS.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
## 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.
|
6
KNOWN_ISSUES.md
Normal file
6
KNOWN_ISSUES.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
## 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.
|
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
|
# Source structure
|
||||||
| Directory | Description |
|
| Directory | Description |
|
||||||
|------------------|--------------------------------------------------------------|
|
|-------------|----------------------------------------------------------|
|
||||||
| boot/bootdata | default configuration and data needed to boot XTOS |
|
| 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 |
|
|
||||||
| drivers | XT native drivers source code |
|
| drivers | XT native drivers source code |
|
||||||
| sdk/cmake | host toolchain configuration and build-related functions |
|
| sdk/cmake | Host toolchain configuration and build-related functions |
|
||||||
| sdk/firmware | firmware enabling XTOS to boot on virtual machines |
|
|
||||||
| sdk/xtdk | XT Software Development Kit headers |
|
| sdk/xtdk | XT Software Development Kit headers |
|
||||||
| services | integral subsystems services source code |
|
| services | integral subsystems services source code |
|
||||||
| subsystems | environment subsystems source code |
|
| subsystems | environment subsystems source code |
|
||||||
| xtoskrnl | XTOS kernel source code |
|
| xtoskrnl | XTOS kernel source code |
|
||||||
|
| xtldr | XTOS boot loader 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
|
||||||
|
@@ -1,3 +1 @@
|
|||||||
add_subdirectory(bootdata)
|
|
||||||
add_subdirectory(bootsect)
|
add_subdirectory(bootsect)
|
||||||
add_subdirectory(xtldr)
|
|
||||||
|
@@ -84,146 +84,14 @@ RealStart:
|
|||||||
leaw -16(%bp), %sp
|
leaw -16(%bp), %sp
|
||||||
sti
|
sti
|
||||||
|
|
||||||
/* Get drive number */
|
/* Print message */
|
||||||
cmpb $0xFF, DriveNumber - Start(%bp)
|
movw $msgUnavailable, %si
|
||||||
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
|
call Print
|
||||||
jmp Reboot
|
|
||||||
|
|
||||||
FsError:
|
/* Wait for key press and reboot */
|
||||||
/* Display FS error message and reboot */
|
xorw %ax, %ax
|
||||||
movw $msgFsError, %si
|
int $0x16
|
||||||
call Print
|
int $0x19
|
||||||
jmp Reboot
|
|
||||||
|
|
||||||
Print:
|
Print:
|
||||||
/* Simple routine to print messages */
|
/* Simple routine to print messages */
|
||||||
@@ -237,40 +105,9 @@ Print:
|
|||||||
DonePrint:
|
DonePrint:
|
||||||
retw
|
retw
|
||||||
|
|
||||||
Reboot:
|
msgUnavailable:
|
||||||
/* Display a message, wait for a key press and reboot */
|
.ascii "XTLDR requires EFI-based system!\r\nPress any key to restart\r\n"
|
||||||
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 the rest of the VBR with zeros and add VBR signature at the end */
|
||||||
.fill (510 - (. - Start)), 1, 0
|
.fill (510 - (. - Start)), 1, 0
|
||||||
.word 0xAA55
|
.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
|
|
||||||
|
@@ -4,41 +4,48 @@
|
|||||||
# 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-Error "XTChain not detected or corrupted!"
|
Write-Host "XTChain not detected or corrupted!"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set target architecture defaulting to amd64
|
# Set target architecture
|
||||||
$ARCH = if ($env:TARGET) { $env:TARGET } else { "amd64" }
|
if ($env:TARGET) {
|
||||||
|
$ARCH = $env:TARGET
|
||||||
# Set target build type defaulting to Debug
|
} else {
|
||||||
$env:BUILD_TYPE = if ($env:BUILD_TYPE -in @("Debug", "Release")) { $env:BUILD_TYPE } else { "Debug" }
|
$ARCH = "amd64"
|
||||||
|
|
||||||
# Set variables
|
|
||||||
$EXECTOS_SOURCE_DIR = $PSScriptRoot
|
|
||||||
$EXECTOS_BINARY_DIR = Join-Path $EXECTOS_SOURCE_DIR "build-$ARCH-$($env:BUILD_TYPE.ToLower())"
|
|
||||||
|
|
||||||
# Create build directory
|
|
||||||
if (-not (Test-Path $EXECTOS_BINARY_DIR)) {
|
|
||||||
Write-Host "Creating build directory: $EXECTOS_BINARY_DIR"
|
|
||||||
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Set-Location $EXECTOS_BINARY_DIR
|
# Set target build type
|
||||||
|
if (-not $env:BUILD_TYPE) {
|
||||||
|
$env:BUILD_TYPE = "DEBUG"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set variables
|
||||||
|
$EXECTOS_SOURCE_DIR = (Get-Location).Path
|
||||||
|
$EXECTOS_BINARY_DIR = "build-$($ARCH)-$($env:BUILD_TYPE.ToLower())"
|
||||||
|
|
||||||
|
# Create directories if needed
|
||||||
|
if ($EXECTOS_SOURCE_DIR -eq (Get-Location).Path) {
|
||||||
|
Write-Host "Creating directories in $EXECTOS_BINARY_DIR"
|
||||||
|
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
|
||||||
|
Set-Location -Path $EXECTOS_BINARY_DIR
|
||||||
|
}
|
||||||
|
|
||||||
# Delete old cache
|
# Delete old cache
|
||||||
Remove-Item "CMakeCache.txt", "host-tools/CMakeCache.txt" -ErrorAction SilentlyContinue
|
Remove-Item -Path "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-Error "Configure script failed."
|
Write-Host "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."
|
|
@@ -23,57 +23,36 @@ endif()
|
|||||||
|
|
||||||
find_program(QEMU_EMULATOR ${QEMU_COMMAND})
|
find_program(QEMU_EMULATOR ${QEMU_COMMAND})
|
||||||
if(QEMU_EMULATOR)
|
if(QEMU_EMULATOR)
|
||||||
if(CMAKE_HOST_LINUX)
|
|
||||||
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
||||||
add_custom_target(testefikvm
|
add_custom_target(testefikvm
|
||||||
DEPENDS install
|
DEPENDS install
|
||||||
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
|
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
|
||||||
-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
|
||||||
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
|
-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
|
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
||||||
-boot menu=on -d int -M smm=off -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)
|
||||||
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(testefitcg
|
add_custom_target(testefitcg
|
||||||
DEPENDS install
|
DEPENDS install
|
||||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-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
|
||||||
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
|
-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
|
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
||||||
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
-boot menu=on -d int -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
|
# This target starts up a QEMU+SEABIOS virtual machine using KVM accelerator
|
||||||
add_custom_target(testkvm
|
add_custom_target(testkvm
|
||||||
DEPENDS diskimg
|
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
|
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
|
-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
|
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
|
||||||
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
|
||||||
VERBATIM USES_TERMINAL)
|
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
|
# This target starts up a QEMU+SEABIOS virtual machine using TCG accelerator
|
||||||
add_custom_target(testtcg
|
add_custom_target(testtcg
|
||||||
|
@@ -69,7 +69,6 @@ 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}
|
||||||
|
Binary file not shown.
Binary file not shown.
BIN
sdk/firmware/ovmf_vars_amd64.fd
Normal file
BIN
sdk/firmware/ovmf_vars_amd64.fd
Normal file
Binary file not shown.
BIN
sdk/firmware/ovmf_vars_i686.fd
Normal file
BIN
sdk/firmware/ovmf_vars_i686.fd
Normal file
Binary file not shown.
@@ -394,6 +394,13 @@ typedef struct _CPU_IDENTIFICATION
|
|||||||
USHORT Stepping;
|
USHORT Stepping;
|
||||||
CPU_VENDOR Vendor;
|
CPU_VENDOR Vendor;
|
||||||
UCHAR VendorName[13];
|
UCHAR VendorName[13];
|
||||||
|
UINT32 StandardFeaturesEcx;
|
||||||
|
UINT32 StandardFeaturesEdx;
|
||||||
|
UINT32 ExtendedFeaturesEcx;
|
||||||
|
UINT32 ExtendedFeaturesEdx;
|
||||||
|
UINT32 Standard7FeaturesEbx;
|
||||||
|
UINT32 Standard7FeaturesEcx;
|
||||||
|
UINT32 Standard7FeaturesEdx;
|
||||||
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
|
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
|
||||||
|
|
||||||
/* CPUID registers */
|
/* CPUID registers */
|
||||||
|
@@ -359,6 +359,10 @@ typedef struct _CPU_IDENTIFICATION
|
|||||||
USHORT Stepping;
|
USHORT Stepping;
|
||||||
CPU_VENDOR Vendor;
|
CPU_VENDOR Vendor;
|
||||||
UCHAR VendorName[13];
|
UCHAR VendorName[13];
|
||||||
|
UINT32 StandardFeaturesEcx;
|
||||||
|
UINT32 StandardFeaturesEdx;
|
||||||
|
UINT32 ExtendedFeaturesEcx;
|
||||||
|
UINT32 ExtendedFeaturesEdx;
|
||||||
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
|
} CPU_IDENTIFICATION, *PCPU_IDENTIFICATION;
|
||||||
|
|
||||||
/* CPUID registers */
|
/* CPUID registers */
|
||||||
|
@@ -64,9 +64,6 @@ AR::ProcSup::IdentifyProcessor(VOID)
|
|||||||
CPUID_REGISTERS CpuRegisters;
|
CPUID_REGISTERS CpuRegisters;
|
||||||
CPUID_SIGNATURE CpuSignature;
|
CPUID_SIGNATURE CpuSignature;
|
||||||
|
|
||||||
/* Not fully implemented yet */
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
/* Get current processor control block */
|
/* Get current processor control block */
|
||||||
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
|
|
||||||
@@ -122,7 +119,42 @@ AR::ProcSup::IdentifyProcessor(VOID)
|
|||||||
Prcb->CpuId.Vendor = CPU_VENDOR_UNKNOWN;
|
Prcb->CpuId.Vendor = CPU_VENDOR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Store a list of CPU features in processor control block */
|
/* Get CPU standard features */
|
||||||
|
RtlZeroMemory(&CpuRegisters, sizeof(CPUID_REGISTERS));
|
||||||
|
CpuRegisters.Leaf = CPUID_GET_STANDARD1_FEATURES;
|
||||||
|
CpuFunc::CpuId(&CpuRegisters);
|
||||||
|
|
||||||
|
/* Store CPU standard features in processor control block */
|
||||||
|
Prcb->CpuId.StandardFeaturesEcx = CpuRegisters.Ecx;
|
||||||
|
Prcb->CpuId.StandardFeaturesEdx = CpuRegisters.Edx;
|
||||||
|
|
||||||
|
/* Get CPU extended features */
|
||||||
|
RtlZeroMemory(&CpuRegisters, sizeof(CPUID_REGISTERS));
|
||||||
|
CpuRegisters.Leaf = 0x80000001;
|
||||||
|
CpuFunc::CpuId(&CpuRegisters);
|
||||||
|
|
||||||
|
/* Store CPU extended features in processor control block */
|
||||||
|
Prcb->CpuId.ExtendedFeaturesEcx = CpuRegisters.Ecx;
|
||||||
|
Prcb->CpuId.ExtendedFeaturesEdx = CpuRegisters.Edx;
|
||||||
|
|
||||||
|
/* Get CPU leaf 7 features (subleaf 0) */
|
||||||
|
RtlZeroMemory(&CpuRegisters, sizeof(CPUID_REGISTERS));
|
||||||
|
CpuRegisters.Leaf = CPUID_GET_STANDARD7_FEATURES;
|
||||||
|
CpuRegisters.SubLeaf = 0;
|
||||||
|
CpuFunc::CpuId(&CpuRegisters);
|
||||||
|
|
||||||
|
/* Store CPU leaf 7 features in processor control block */
|
||||||
|
Prcb->CpuId.Standard7FeaturesEbx = CpuRegisters.Ebx;
|
||||||
|
Prcb->CpuId.Standard7FeaturesEcx = CpuRegisters.Ecx;
|
||||||
|
Prcb->CpuId.Standard7FeaturesEdx = CpuRegisters.Edx;
|
||||||
|
|
||||||
|
/* Print CPU information */
|
||||||
|
DebugPrint(L"CPU: Vendor %hs, Family 0x%X, Model 0x%X, Stepping 0x%X\n",
|
||||||
|
Prcb->CpuId.VendorName,
|
||||||
|
Prcb->CpuId.Family,
|
||||||
|
Prcb->CpuId.Model,
|
||||||
|
Prcb->CpuId.Stepping);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -59,9 +59,6 @@ AR::ProcSup::IdentifyProcessor(VOID)
|
|||||||
CPUID_REGISTERS CpuRegisters;
|
CPUID_REGISTERS CpuRegisters;
|
||||||
CPUID_SIGNATURE CpuSignature;
|
CPUID_SIGNATURE CpuSignature;
|
||||||
|
|
||||||
/* Not fully implemented yet */
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
|
|
||||||
/* Get current processor control block */
|
/* Get current processor control block */
|
||||||
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
|
|
||||||
@@ -117,7 +114,30 @@ AR::ProcSup::IdentifyProcessor(VOID)
|
|||||||
Prcb->CpuId.Vendor = CPU_VENDOR_UNKNOWN;
|
Prcb->CpuId.Vendor = CPU_VENDOR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Store a list of CPU features in processor control block */
|
/* Get CPU standard features */
|
||||||
|
RtlZeroMemory(&CpuRegisters, sizeof(CPUID_REGISTERS));
|
||||||
|
CpuRegisters.Leaf = CPUID_GET_STANDARD1_FEATURES;
|
||||||
|
CpuFunc::CpuId(&CpuRegisters);
|
||||||
|
|
||||||
|
/* Store CPU standard features in processor control block */
|
||||||
|
Prcb->CpuId.StandardFeaturesEcx = CpuRegisters.Ecx;
|
||||||
|
Prcb->CpuId.StandardFeaturesEdx = CpuRegisters.Edx;
|
||||||
|
|
||||||
|
/* Get CPU extended features */
|
||||||
|
RtlZeroMemory(&CpuRegisters, sizeof(CPUID_REGISTERS));
|
||||||
|
CpuRegisters.Leaf = 0x80000001;
|
||||||
|
CpuFunc::CpuId(&CpuRegisters);
|
||||||
|
|
||||||
|
/* Store CPU extended features in processor control block */
|
||||||
|
Prcb->CpuId.ExtendedFeaturesEcx = CpuRegisters.Ecx;
|
||||||
|
Prcb->CpuId.ExtendedFeaturesEdx = CpuRegisters.Edx;
|
||||||
|
|
||||||
|
/* Print CPU information */
|
||||||
|
DebugPrint(L"CPU: Vendor %hs, Family 0x%X, Model 0x%X, Stepping 0x%X\n",
|
||||||
|
Prcb->CpuId.VendorName,
|
||||||
|
Prcb->CpuId.Family,
|
||||||
|
Prcb->CpuId.Model,
|
||||||
|
Prcb->CpuId.Stepping);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user