仿真平台内核初版 -tlib库 包含<sparc arm riscv powerPC>
This commit is contained in:
90
scripts/single-node/x86_64-kvm-linux.resc
Normal file
90
scripts/single-node/x86_64-kvm-linux.resc
Normal file
@@ -0,0 +1,90 @@
|
||||
:name: X86_64-KVM Linux
|
||||
:description: This script runs Linux on a bare x86_64 platform in KVM.
|
||||
|
||||
$name?="x86_64-kvm"
|
||||
mach create $name
|
||||
|
||||
$bin?=@https://dl.antmicro.com/projects/renode/virt_x86_64--linux.bin-s_9012224-95afda97d7185427a02333412baa95daac72270a
|
||||
$bios?=@https://dl.antmicro.com/projects/renode/virt_x86--kvmtool-bios.bin-s_687-dfaa7e98ad587f40df43a0d8eff5c320de72f9bf
|
||||
|
||||
machine LoadPlatformDescription @platforms/cpus/x86_64-kvm.repl
|
||||
|
||||
showAnalyzer uart
|
||||
|
||||
macro reset
|
||||
"""
|
||||
# Load linux headers (assuming 'setup_sects' = 0x1f)
|
||||
sysbus LoadBinary $bin 0x10000 sysbus.cpu offset=0x0 size=0x4000
|
||||
|
||||
# Load bios
|
||||
sysbus LoadBinary $bios 0xf0000 sysbus.cpu
|
||||
|
||||
# Load linux -- skip the header (assuming 'setup_sects' = 0x1f)
|
||||
sysbus LoadBinary $bin 0x100000 sysbus.cpu offset=0x4000
|
||||
|
||||
|
||||
# Setup e820 memory map at address 0x9fc00
|
||||
# Set e820_entries
|
||||
sysbus WriteDoubleWord 0x9fc00 4
|
||||
# Set bios RAM
|
||||
sysbus WriteQuadWord 0x9fc04 0 # Start address
|
||||
sysbus WriteQuadWord 0x9fc0c 0x9fc00 # Size
|
||||
sysbus WriteDoubleWord 0x9fc14 1 # Type RAM
|
||||
# Set e820 Map
|
||||
sysbus WriteQuadWord 0x9fc18 0x9fc00 # Start address
|
||||
sysbus WriteQuadWord 0x9fc20 0x400 # Size
|
||||
sysbus WriteDoubleWord 0x9fc28 2 # Type reserved
|
||||
# Set BIOS ROM
|
||||
sysbus WriteQuadWord 0x9fc2c 0xf0000 # Start address
|
||||
sysbus WriteQuadWord 0x9fc34 0x10000 # Size
|
||||
sysbus WriteDoubleWord 0x9fc3c 2 # Type reserved
|
||||
# Set RAM
|
||||
sysbus WriteQuadWord 0x9fc40 0x100000 # Start address
|
||||
sysbus WriteQuadWord 0x9fc48 0x1ff00000 # Size
|
||||
sysbus WriteDoubleWord 0x9fc50 1 # Type RAM
|
||||
|
||||
|
||||
# Setup Interrupt Vector
|
||||
# kvmtool's fake interrupt handler is loaded at address 0xf0030
|
||||
sysbus FillWithConstantDoubleWord 0xf0000030 256
|
||||
# Setup real 15-th interrupt handler loaded at address 0xf0080
|
||||
sysbus WriteDoubleWord 0x54 0xf0000080
|
||||
|
||||
|
||||
# Override kernel header values.
|
||||
# For more info please refer to https://docs.kernel.org/arch/x86/zero-page.html
|
||||
|
||||
# Set 'cmd_line'. Do not use APIC/ACPI as it is not implemented yet.
|
||||
sysbus WriteASCIIString 0x20000 "noapic noacpi earlyprintk=serial console=ttyS0 root=/dev/vda rw"
|
||||
# Set address of 'cmd_line' in `cmd_line_ptr` field
|
||||
sysbus WriteDoubleWord 0x10228 0x20000
|
||||
|
||||
# Set 'type_of_loader' to undefined
|
||||
sysbus WriteByte 0x10210 0xff
|
||||
|
||||
# Set 'heap_end_ptr'
|
||||
sysbus WriteWord 0x10212 0xfe00
|
||||
# Set 'loadflags' with 'LOADED_HIGH' and 'CAN_USE_HEAP' flags
|
||||
sysbus WriteByte 0x10211 0x81
|
||||
|
||||
|
||||
# Set SegmentRegisters to start in real-mode
|
||||
sysbus.cpu SetDescriptor CS 0x1000 0x10000 0xffff 0x9b00
|
||||
sysbus.cpu SetDescriptor DS 0x1000 0x10000 0xffff 0x9300
|
||||
sysbus.cpu SetDescriptor ES 0x1000 0x10000 0xffff 0x9300
|
||||
sysbus.cpu SetDescriptor SS 0x1000 0x10000 0xffff 0x9300
|
||||
sysbus.cpu SetDescriptor FS 0x1000 0x10000 0xffff 0x9300
|
||||
sysbus.cpu SetDescriptor GS 0x1000 0x10000 0xffff 0x9300
|
||||
|
||||
# Set entrypoint to 0x10200 = (CS << 4) + RIP
|
||||
sysbus.cpu RIP 0x200
|
||||
# Set to safe, available memory
|
||||
sysbus.cpu RBP 0x8000
|
||||
sysbus.cpu RSP 0x8000
|
||||
|
||||
# Set IF flag
|
||||
sysbus.cpu EFLAGS 0x202
|
||||
"""
|
||||
runMacro $reset
|
||||
|
||||
logLevel 3
|
||||
Reference in New Issue
Block a user