HV: enable load zephyr kernel
Zephyr kernel is stripped ram image, its entry and load address are explicitly defined in vm configurations, hypervisor will load Zephyr directly based on these configurations. Currently we only support boot Zephyr from protected mode. Tracked-On: #3214 Signed-off-by: Victor Sun <victor.sun@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
parent
6940cabd22
commit
1906def29e
|
@ -93,6 +93,7 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
|
|||
void *load_addr = NULL;
|
||||
struct vm_sw_info *sw_info = &vm->sw;
|
||||
struct zero_page *zeropage;
|
||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||
|
||||
switch (sw_info->kernel_type) {
|
||||
case KERNEL_BZIMAGE:
|
||||
|
@ -110,6 +111,9 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
|
|||
}
|
||||
load_addr = (void *)zeropage;
|
||||
break;
|
||||
case KERNEL_ZEPHYR:
|
||||
load_addr = (void *)vm_config->os_config.kernel_load_addr;
|
||||
break;
|
||||
default:
|
||||
pr_err("Unsupported Kernel type.");
|
||||
break;
|
||||
|
|
|
@ -150,6 +150,14 @@ static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
|
|||
__func__, vm->vm_id, vcpu_get_gpreg(vcpu, CPU_REG_RSI));
|
||||
}
|
||||
|
||||
static void prepare_loading_rawimage(struct acrn_vm *vm)
|
||||
{
|
||||
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
|
||||
const struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||
|
||||
sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr;
|
||||
}
|
||||
|
||||
int32_t direct_boot_sw_loader(struct acrn_vm *vm)
|
||||
{
|
||||
int32_t ret = 0;
|
||||
|
@ -185,6 +193,9 @@ int32_t direct_boot_sw_loader(struct acrn_vm *vm)
|
|||
case KERNEL_BZIMAGE:
|
||||
prepare_loading_bzimage(vm, vcpu);
|
||||
break;
|
||||
case KERNEL_ZEPHYR:
|
||||
prepare_loading_rawimage(vm);
|
||||
break;
|
||||
default:
|
||||
pr_err("%s, Loading VM SW failed", __func__);
|
||||
ret = -EINVAL;
|
||||
|
|
|
@ -64,6 +64,7 @@ struct vuart_config {
|
|||
|
||||
enum os_kernel_type {
|
||||
KERNEL_BZIMAGE = 1,
|
||||
KERNEL_ZEPHYR,
|
||||
};
|
||||
|
||||
struct acrn_vm_os_config {
|
||||
|
@ -72,6 +73,9 @@ struct acrn_vm_os_config {
|
|||
char kernel_mod_tag[MAX_MOD_TAG_LEN]; /* multiboot module tag for kernel */
|
||||
char ramdisk_mod_tag[MAX_MOD_TAG_LEN]; /* multiboot module tag for ramdisk */
|
||||
char bootargs[MAX_BOOTARGS_SIZE]; /* boot args/cmdline */
|
||||
uint64_t kernel_load_addr;
|
||||
uint64_t kernel_entry_addr;
|
||||
uint64_t kernel_ramdisk_addr;
|
||||
} __aligned(8);
|
||||
|
||||
struct acrn_vm_pci_ptdev_config {
|
||||
|
|
Loading…
Reference in New Issue