mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-04 21:29:43 +00:00
deb-pkg: add acrn-hypervisor and acrn-board-inspector into debian package
1. "make clean && make BOARD=nuc11tnbi5 SCENARIO=shared" will generate the acrn debian package. 2. "make clean && make board_inspector" will generate the acrn board_inspector debian package Tracked-On: #6688 Signed-off-by: Hu Fenglin <fenglin.hu@intel.com>
This commit is contained in:
parent
856815bb5c
commit
f65a87585b
134
.deb.conf
Normal file
134
.deb.conf
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"acrn.bin":{
|
||||||
|
"source":"acrn-hypervisor/build/hypervisor/acrn.bin",
|
||||||
|
"target":"boot/"
|
||||||
|
},
|
||||||
|
"acrnctl":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/services/acrnctl",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrnd":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/services/acrnd",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrn-dm":{
|
||||||
|
"source":"acrn-hypervisor/build/devicemodel/acrn-dm",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrnlog":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/debug_tools/acrnlog",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrnprobe":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/debug_tools/acrn-crashlog/acrnprobe/bin/acrnprobe",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrntrace":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/debug_tools/acrntrace",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"crashlogctl":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/crashlogctl",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"debugger":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/debug_tools/acrn-crashlog/usercrash/bin/debugger",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"usercrash-wrapper":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/usercrash-wrapper",
|
||||||
|
"target":"usr/bin/"
|
||||||
|
},
|
||||||
|
"acrn.32.out":{
|
||||||
|
"source":"acrn-hypervisor/build/hypervisor/acrn.32.out",
|
||||||
|
"target":"boot/"
|
||||||
|
},
|
||||||
|
"ACPI_VM0.bin":{
|
||||||
|
"source":"acrn-hypervisor/build/hypervisor/acpi/ACPI_VM0.bin",
|
||||||
|
"target":"boot"
|
||||||
|
},
|
||||||
|
"ACPI_VM1.bin":{
|
||||||
|
"source":"acrn-hypervisor/build/hypervisor/acpi/ACPI_VM1.bin",
|
||||||
|
"target":"boot"
|
||||||
|
},
|
||||||
|
"100-acrn-grub":{
|
||||||
|
"source":"acrn-hypervisor/misc/packaging/100_ACRN",
|
||||||
|
"target":"etc/grub.d/"
|
||||||
|
},
|
||||||
|
"50-acrn.netdev":{
|
||||||
|
"source":"acrn-hypervisor/misc/packaging/50-acrn.netdev",
|
||||||
|
"target":"usr/lib/systemd/network"
|
||||||
|
},
|
||||||
|
"50-acrn.network":{
|
||||||
|
"source":"acrn-hypervisor/misc/packaging/50-acrn.network",
|
||||||
|
"target":"usr/lib/systemd/network"
|
||||||
|
},
|
||||||
|
"50-eth.network":{
|
||||||
|
"source":"acrn-hypervisor/misc/packaging/50-eth.network",
|
||||||
|
"target":"usr/lib/systemd/network"
|
||||||
|
},
|
||||||
|
"50-tap0.netdev":{
|
||||||
|
"source":"acrn-hypervisor/misc/packaging/50-tap0.netdev",
|
||||||
|
"target":"usr/lib/systemd/network"
|
||||||
|
},
|
||||||
|
"acrnd.service":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/services/acrnd.service",
|
||||||
|
"target":"usr/lib/systemd/system"
|
||||||
|
},
|
||||||
|
"acrnlog.service":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/debug_tools/acrnlog.service",
|
||||||
|
"target":"usr/lib/systemd/system"
|
||||||
|
},
|
||||||
|
"acrnprobe.service":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/acrnprobe.service",
|
||||||
|
"target":"usr/lib/systemd/system"
|
||||||
|
},
|
||||||
|
"usercrash.service":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/usercrash.service",
|
||||||
|
"target":"usr/lib/systemd/system"
|
||||||
|
},
|
||||||
|
"libacrn-mngr.a":{
|
||||||
|
"source":"acrn-hypervisor/build/misc/services/libacrn-mngr.a",
|
||||||
|
"target":"usr/lib64"
|
||||||
|
},
|
||||||
|
"acrnprobe.xml":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/acrnprobe.xml",
|
||||||
|
"target":"usr/share/defaults/telemetrics"
|
||||||
|
},
|
||||||
|
"OVMF.fd":{
|
||||||
|
"source":"acrn-hypervisor/devicemodel/bios/OVMF.fd",
|
||||||
|
"target":"usr/share/acrn/bios"
|
||||||
|
},
|
||||||
|
"40-watchdog.conf":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/40-watchdog.conf",
|
||||||
|
"target":"usr/share/acrn/crashlog"
|
||||||
|
},
|
||||||
|
"80-coredump.conf":{
|
||||||
|
"source":"acrn-hypervisor/misc/debug_tools/acrn_crashlog/data/80-coredump.conf",
|
||||||
|
"target":"usr/share/acrn/crashlog"
|
||||||
|
},
|
||||||
|
"launch_hard_rt_vm.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_hard_rt_vm.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
},
|
||||||
|
"launch_uos.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_uos.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
},
|
||||||
|
"launch_vxworks.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_vxworks.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
},
|
||||||
|
"launch_win.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_win.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
},
|
||||||
|
"launch_xenomai.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_xenomai.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
},
|
||||||
|
"launch_zephyr.sh":{
|
||||||
|
"source":"acrn-hypervisor/misc/config_tools/data/sample_launch_scripts/nuc/launch_zephyr.sh",
|
||||||
|
"target":"usr/share/acrn/samples/nuc"
|
||||||
|
}
|
||||||
|
}
|
3
Makefile
3
Makefile
@ -83,6 +83,7 @@ ASL_COMPILER ?= $(shell which iasl)
|
|||||||
.PHONY: all hypervisor devicemodel tools life_mngr doc
|
.PHONY: all hypervisor devicemodel tools life_mngr doc
|
||||||
all: hypervisor devicemodel tools
|
all: hypervisor devicemodel tools
|
||||||
@cat $(HV_CFG_LOG)
|
@cat $(HV_CFG_LOG)
|
||||||
|
@python3 misc/packaging/gen_acrn_deb.py acrn_all $(ROOT_OUT) --version=$(FULL_VERSION) --board_name=$(BOARD) --scenario=$(SCENARIO)
|
||||||
|
|
||||||
#help functions to build acrn and install acrn/acrn symbols
|
#help functions to build acrn and install acrn/acrn symbols
|
||||||
define build_acrn
|
define build_acrn
|
||||||
@ -99,6 +100,8 @@ define install_acrn_debug
|
|||||||
endef
|
endef
|
||||||
|
|
||||||
HV_MAKEOPTS := -C $(T)/hypervisor BOARD=$(BOARD) SCENARIO=$(SCENARIO) HV_OBJDIR=$(HV_OUT) RELEASE=$(RELEASE)
|
HV_MAKEOPTS := -C $(T)/hypervisor BOARD=$(BOARD) SCENARIO=$(SCENARIO) HV_OBJDIR=$(HV_OUT) RELEASE=$(RELEASE)
|
||||||
|
board_inspector:
|
||||||
|
@python3 misc/packaging/gen_acrn_deb.py board_inspector $(ROOT_OUT) --version=$(FULL_VERSION)
|
||||||
|
|
||||||
hypervisor: hvdefconfig
|
hypervisor: hvdefconfig
|
||||||
$(MAKE) $(HV_MAKEOPTS)
|
$(MAKE) $(HV_MAKEOPTS)
|
||||||
|
@ -12,7 +12,7 @@ sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '
|
|||||||
import lxml.etree
|
import lxml.etree
|
||||||
from acpi_const import *
|
from acpi_const import *
|
||||||
import acpiparser.tpm2
|
import acpiparser.tpm2
|
||||||
import lib.cdata
|
import inspectorlib.cdata
|
||||||
import common
|
import common
|
||||||
|
|
||||||
def asl_to_aml(dest_vm_acpi_path, dest_vm_acpi_bin_path):
|
def asl_to_aml(dest_vm_acpi_path, dest_vm_acpi_bin_path):
|
||||||
@ -91,9 +91,9 @@ def tpm2_acpi_gen(acpi_bin, board_etree, scenario_etree, allocation_etree):
|
|||||||
if common.get_node("//capability[@id = 'log_area']", board_etree) is not None:
|
if common.get_node("//capability[@id = 'log_area']", board_etree) is not None:
|
||||||
ctype_data.log_area_minimum_length = int(common.get_node("//log_area_minimum_length/text()", allocation_etree), 16)
|
ctype_data.log_area_minimum_length = int(common.get_node("//log_area_minimum_length/text()", allocation_etree), 16)
|
||||||
ctype_data.log_area_start_address = int(common.get_node("//log_area_start_address/text()", allocation_etree), 16)
|
ctype_data.log_area_start_address = int(common.get_node("//log_area_start_address/text()", allocation_etree), 16)
|
||||||
ctype_data.header.checksum = (~(sum(lib.cdata.to_bytes(ctype_data))) + 1) & 0xFF
|
ctype_data.header.checksum = (~(sum(inspectorlib.cdata.to_bytes(ctype_data))) + 1) & 0xFF
|
||||||
acpi_bin.seek(ACPI_TPM2_ADDR_OFFSET)
|
acpi_bin.seek(ACPI_TPM2_ADDR_OFFSET)
|
||||||
acpi_bin.write(lib.cdata.to_bytes(ctype_data))
|
acpi_bin.write(inspectorlib.cdata.to_bytes(ctype_data))
|
||||||
else:
|
else:
|
||||||
logging.warning("Passtrhough tpm2 is enabled in scenario but the device is not presented on board.")
|
logging.warning("Passtrhough tpm2 is enabled in scenario but the device is not presented on board.")
|
||||||
logging.warning("Check there is tpm2 device on board and re-generate the xml using board inspector with --advanced option.")
|
logging.warning("Check there is tpm2 device on board and re-generate the xml using board inspector with --advanced option.")
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
import lib.unpack as unpack
|
import inspectorlib.unpack as unpack
|
||||||
|
|
||||||
class TableHeader(cdata.Struct):
|
class TableHeader(cdata.Struct):
|
||||||
_pack_ = 1
|
_pack_ = 1
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
import lib.unpack as unpack
|
import inspectorlib.unpack as unpack
|
||||||
from acpiparser._utils import TableHeader
|
from acpiparser._utils import TableHeader
|
||||||
|
|
||||||
class APICSubtable(cdata.Struct):
|
class APICSubtable(cdata.Struct):
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
from acpiparser._utils import TableHeader
|
from acpiparser._utils import TableHeader
|
||||||
|
|
||||||
class ASFSubtable(cdata.Struct):
|
class ASFSubtable(cdata.Struct):
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
from acpiparser._utils import TableHeader
|
from acpiparser._utils import TableHeader
|
||||||
|
|
||||||
class DMARSubtable(cdata.Struct):
|
class DMARSubtable(cdata.Struct):
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
import lib.unpack as unpack
|
import inspectorlib.unpack as unpack
|
||||||
from acpiparser._utils import TableHeader, GAS
|
from acpiparser._utils import TableHeader, GAS
|
||||||
|
|
||||||
_preferred_pm_profile = {
|
_preferred_pm_profile = {
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
import lib.unpack as unpack
|
import inspectorlib.unpack as unpack
|
||||||
|
|
||||||
# 6.4.2 Small Resource Data Type
|
# 6.4.2 Small Resource Data Type
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
from acpiparser._utils import TableHeader
|
from acpiparser._utils import TableHeader
|
||||||
|
|
||||||
# Common structures
|
# Common structures
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
import ctypes
|
import ctypes
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
from acpiparser._utils import TableHeader
|
from acpiparser._utils import TableHeader
|
||||||
|
|
||||||
def tpm2_optional_data(data_len):
|
def tpm2_optional_data(data_len):
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
|
|
||||||
class Capability:
|
class Capability:
|
||||||
# Capability names from PCI Local Bus Specification and PCI Express Base Specification
|
# Capability names from PCI Local Bus Specification and PCI Express Base Specification
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
|
|
||||||
class ExtendedCapability:
|
class ExtendedCapability:
|
||||||
# Capability names from PCI Express Base Specification, mostly Table 9-23
|
# Capability names from PCI Express Base Specification, mostly Table 9-23
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import copy
|
import copy
|
||||||
import lib.cdata as cdata
|
import inspectorlib.cdata as cdata
|
||||||
|
|
||||||
class Common(cdata.Struct):
|
class Common(cdata.Struct):
|
||||||
_pack_ = 1
|
_pack_ = 1
|
||||||
|
@ -9,8 +9,8 @@ import sys
|
|||||||
import ctypes
|
import ctypes
|
||||||
import struct
|
import struct
|
||||||
import uuid
|
import uuid
|
||||||
import lib.bitfields as bitfields
|
import inspectorlib.bitfields as bitfields
|
||||||
import lib.unpack as unpack
|
import inspectorlib.unpack as unpack
|
||||||
|
|
||||||
class SMBIOS(unpack.Struct):
|
class SMBIOS(unpack.Struct):
|
||||||
def __new__(cls):
|
def __new__(cls):
|
||||||
|
56
misc/packaging/100_ACRN
Executable file
56
misc/packaging/100_ACRN
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#* Copyright (c) 2020 Intel Corporation All rights reserved.
|
||||||
|
# postinst script for acrn kernel
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
|
||||||
|
. /usr/lib/grub/grub-mkconfig_lib
|
||||||
|
LX=linux16
|
||||||
|
elif [ -f /usr/lib/grub/update-grub_lib ]; then
|
||||||
|
. /usr/lib/grub/update-grub_lib
|
||||||
|
LX=linux
|
||||||
|
else
|
||||||
|
# no grub file, so we notify and exit gracefully
|
||||||
|
echo "Cannot find grub config file, exiting." >&2
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
filename="/etc/grub.d/40_custom"
|
||||||
|
menu=$(grep ACRN_deb_multiboot2 ${filename}) || true
|
||||||
|
|
||||||
|
type=$(lsblk -l |awk '$NF == "/" {print $1}')
|
||||||
|
pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"'
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ $line =~ $pattern ]]; then
|
||||||
|
uuid="${BASH_REMATCH[1]}"
|
||||||
|
partuuid="${BASH_REMATCH[2]}"
|
||||||
|
fi
|
||||||
|
done < <(blkid |grep ext4 |grep ${type})
|
||||||
|
|
||||||
|
if ls /boot/vmlinuz*acrn-sos* 1> /dev/null 2>&1;then
|
||||||
|
sos_kernel=$(ls -tr /boot/vmlinuz-*acrn-sos* | tail -1)
|
||||||
|
else
|
||||||
|
sos_kernel=$(ls /boot/vmlinuz-* | tail -1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$menu" ];then
|
||||||
|
cat>"${filename}"<<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exec tail -n +3 \$0
|
||||||
|
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
||||||
|
load_video
|
||||||
|
insmod gzio
|
||||||
|
insmod part_gpt
|
||||||
|
insmod ext2
|
||||||
|
search --no-floppy --fs-uuid --set $uuid
|
||||||
|
multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i '/Linux_bzImage/d' ${filename} || true
|
||||||
|
sed -i '/multiboot2 \/boot/a\module2 '$sos_kernel' Linux_bzImage' ${filename}
|
||||||
|
|
||||||
|
sync
|
18
misc/packaging/acrn-board-inspector.postinst
Normal file
18
misc/packaging/acrn-board-inspector.postinst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#* Copyright (c) 2020 Intel Corporation SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
# postinst script for acrn-board-inspector
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
filename='/etc/default/grub'
|
||||||
|
sed -i '/GRUB_DEFAULT/d' ${filename}
|
||||||
|
sed -i '/GRUB_TIMEOUT/d' ${filename}
|
||||||
|
sed -i '/GRUB_HIDDEN_TIMEOUT/d' ${filename}
|
||||||
|
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/d' ${filename}
|
||||||
|
sed -i '$a GRUB_CMDLINE_LINUX_DEFAULT="quiet splash idle=nomwait iomem=relaxed intel_idle.max_cstate=0 intel_pstate=disable"' ${filename}
|
||||||
|
sed -i '$a GRUB_TIMEOUT=20' ${filename}
|
||||||
|
|
||||||
|
sync
|
||||||
|
update-grub
|
||||||
|
|
||||||
|
exit 0
|
5
misc/packaging/acrn-board-inspector.prerm
Normal file
5
misc/packaging/acrn-board-inspector.prerm
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Remove the folder of the /bin/ directory
|
||||||
|
rm -rf /bin/pcieparser
|
||||||
|
rm -rf /bin/memmapparser
|
||||||
|
rm -rf /bin/legacy
|
||||||
|
rm -rf /bin/extractors
|
@ -5,117 +5,31 @@
|
|||||||
# please NOTE !!! scenario_info/board_info please add in release.json if needed !!!
|
# please NOTE !!! scenario_info/board_info please add in release.json if needed !!!
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
#Build info Start
|
||||||
|
|
||||||
echo "please choose <scenario> ,<board> ,<disk type>"
|
SCENARIO=(shared)
|
||||||
|
|
||||||
scenario_info=(industry hybrid logical_partition )
|
BOARD=(nuc11tnbi5)
|
||||||
|
|
||||||
board_info=(nuc7i7dnb whl-ipc-i5 )
|
|
||||||
|
|
||||||
echo "Scenario is ->"
|
|
||||||
|
|
||||||
scenario_num=${#scenario_info[@]}
|
|
||||||
|
|
||||||
for ((i=0;i<scenario_num;i++))
|
|
||||||
|
|
||||||
{
|
|
||||||
let s_num=i+1
|
|
||||||
echo $s_num ${scenario_info[i]};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
read num
|
|
||||||
if [ $num = 0 ] || [ $num -gt ${scenario_num} ]; then
|
|
||||||
|
|
||||||
echo "out of scenario scope,please retry"
|
|
||||||
else
|
|
||||||
c=$(($num-1))
|
|
||||||
echo "scenario is" ${scenario_info[c]};
|
|
||||||
SCENARIO="${scenario_info[c]}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Board is ->"
|
|
||||||
board_num=${#board_info[@]}
|
|
||||||
|
|
||||||
for ((i=0;i<board_num;i++))
|
|
||||||
|
|
||||||
{
|
|
||||||
let b_num=i+1
|
|
||||||
echo $b_num ${board_info[i]};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
read num2
|
|
||||||
if [ $num2 = 0 ] || [ $num2 -gt ${board_num} ]; then
|
|
||||||
|
|
||||||
echo "out of board scope,please retry"
|
|
||||||
else
|
|
||||||
c1=$(($num2-1))
|
|
||||||
echo "board is" ${board_info[c1]};
|
|
||||||
BOARD="${board_info[c1]}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
#Build info End
|
||||||
|
|
||||||
ACRNBIN="/boot/acrn.${SCENARIO}.${BOARD}.bin"
|
ACRNBIN="/boot/acrn.${SCENARIO}.${BOARD}.bin"
|
||||||
|
type=$(lsblk -l |awk '$NF == "/" {print $1}')
|
||||||
|
|
||||||
echo "Your acrn bin is ->"
|
pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"'
|
||||||
echo $ACRNBIN
|
while IFS= read -r line; do
|
||||||
|
if [[ $line =~ $pattern ]]; then
|
||||||
|
uuid="${BASH_REMATCH[1]}"
|
||||||
echo "disk type is ->"
|
partuuid="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
disk_info=(nvme sda)
|
|
||||||
disk_num=${#disk_info[@]}
|
|
||||||
|
|
||||||
for ((i=0;i<disk_num;i++))
|
|
||||||
|
|
||||||
{
|
|
||||||
let d_num=i+1
|
|
||||||
echo $d_num ${disk_info[i]};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
read num3
|
|
||||||
if [ $num3 = 0 ] || [ $num3 -gt ${disk_num} ]; then
|
|
||||||
|
|
||||||
echo "out of disk scope,please retry"
|
|
||||||
else
|
|
||||||
c3=$(($num3-1))
|
|
||||||
echo "disk is" ${disk_info[c3]};
|
|
||||||
type="${disk_info[c3]}"
|
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
|
done < <(blkid |grep ext4 |grep ${type})
|
||||||
done
|
|
||||||
|
|
||||||
str=$(blkid |grep ext4 |grep ${type})
|
|
||||||
|
|
||||||
uuid=$(echo $str |cut -d " " -f 2|cut -d "=" -f 2)
|
|
||||||
|
|
||||||
str=$(blkid |grep ext4 |grep ${type})
|
|
||||||
|
|
||||||
partuuid=$(echo ${str##*PARTUUID=})
|
|
||||||
|
|
||||||
filename="/etc/grub.d/40_custom"
|
filename="/etc/grub.d/40_custom"
|
||||||
|
|
||||||
kernelimg=$(grep module ${filename}|| true)
|
kernelimg=$(grep module ${filename} | tail -1 || true)
|
||||||
|
|
||||||
cat>"${filename}"<<EOF
|
if [ $SCENARIO == shared ];then
|
||||||
|
cat>"${filename}"<<EOF
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec tail -n +3 \$0
|
exec tail -n +3 \$0
|
||||||
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
||||||
@ -124,17 +38,61 @@ menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
|||||||
insmod part_gpt
|
insmod part_gpt
|
||||||
insmod ext2
|
insmod ext2
|
||||||
search --no-floppy --fs-uuid --set $uuid
|
search --no-floppy --fs-uuid --set $uuid
|
||||||
multiboot2 $ACRNBIN root=PARTUUID=$partuuid i915.modeset=0 video=efifb:off
|
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
|
||||||
$kernelimg
|
$kernelimg
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
elif [ $SCENARIO == hybrid ];then
|
||||||
|
cat>"${filename}"<<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exec tail -n +3 \$0
|
||||||
|
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
||||||
|
load_video
|
||||||
|
insmod gzio
|
||||||
|
insmod part_gpt
|
||||||
|
insmod ext2
|
||||||
|
search --no-floppy --fs-uuid --set $uuid
|
||||||
|
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
|
||||||
|
$kernelimg
|
||||||
|
module2 /boot/zephyr64.elf Zephyr_ElfImage
|
||||||
|
module2 /boot/ACPI_VM0.bin ACPI_VM0
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
elif [ $SCENARIO == partitioned ];then
|
||||||
|
cat>"${filename}"<<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exec tail -n +3 \$0
|
||||||
|
menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 {
|
||||||
|
load_video
|
||||||
|
insmod gzio
|
||||||
|
insmod part_gpt
|
||||||
|
insmod ext2
|
||||||
|
search --no-floppy --fs-uuid --set $uuid
|
||||||
|
echo 'loading ACRN...'
|
||||||
|
multiboot2 $ACRNBIN root=PARTUUID=$partuuid
|
||||||
|
$kernelimg
|
||||||
|
module2 /boot/ACPI_VM0.bin ACPI_VM0
|
||||||
|
module2 /boot/ACPI_VM1.bin ACPI_VM1
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
filename='/etc/default/grub'
|
filename='/etc/default/grub'
|
||||||
sed -i '/GRUB_DEFAULT/d' ${filename}
|
sed -i '/GRUB_DEFAULT=/d' ${filename}
|
||||||
sed -i '/GRUB_TIMEOUT/d' ${filename}
|
sed -i '/GRUB_TIMEOUT=/d' ${filename}
|
||||||
sed -i '/GRUB_HIDDEN_TIMEOUT/d' ${filename}
|
sed -i '/GRUB_HIDDEN_TIMEOUT=/d' ${filename}
|
||||||
|
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/d' ${filename}
|
||||||
|
sed -i '/GRUB_CMDLINE_LINUX=/d' ${filename}
|
||||||
|
sed -i '/GRUB_TERMINAL=/d' ${filename}
|
||||||
|
sed -i '/GRUB_SERIAL_COMMAND=/d' ${filename}
|
||||||
|
sed -i '$a GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"' ${filename}
|
||||||
|
sed -i '$a GRUB_TERMINAL="console serial"' ${filename}
|
||||||
|
sed -i '$a GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"' ${filename}
|
||||||
|
sed -i '$a GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"' ${filename}
|
||||||
sed -i '$a GRUB_DEFAULT=ACRN_deb_multiboot2' ${filename}
|
sed -i '$a GRUB_DEFAULT=ACRN_deb_multiboot2' ${filename}
|
||||||
sed -i '$a GRUB_TIMEOUT=20' ${filename}
|
sed -i '$a GRUB_TIMEOUT=20' ${filename}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ cat>"${filename}"<<EOF
|
|||||||
insmod part_gpt
|
insmod part_gpt
|
||||||
insmod ext2
|
insmod ext2
|
||||||
search --no-floppy --fs-uuid --set $uuid
|
search --no-floppy --fs-uuid --set $uuid
|
||||||
multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid i915.modeset=0 video=efifb:off
|
multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
172
misc/packaging/gen_acrn_deb.py
Normal file
172
misc/packaging/gen_acrn_deb.py
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#* Copyright (c) 2020 Intel Corporation
|
||||||
|
import os,sys,copy,json
|
||||||
|
import subprocess
|
||||||
|
import datetime
|
||||||
|
import time
|
||||||
|
import shlex
|
||||||
|
import glob
|
||||||
|
import argparse
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
def run_command(cmd, path):
|
||||||
|
ret_code = 0
|
||||||
|
#print("cmd = %s, path = %s" % (cmd, path))
|
||||||
|
cmd_proc = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd = path, universal_newlines=True)
|
||||||
|
while True:
|
||||||
|
output = cmd_proc.stdout.readline()
|
||||||
|
#print(output.strip())
|
||||||
|
ret_code = cmd_proc.poll()
|
||||||
|
if ret_code is not None:
|
||||||
|
break
|
||||||
|
return ret_code
|
||||||
|
|
||||||
|
def add_cmd_list(cmd_list, cmd_str, dir_str):
|
||||||
|
cmd = {}
|
||||||
|
cmd['cmd'] = cmd_str
|
||||||
|
cmd['dir'] = dir_str
|
||||||
|
cmd_list.append(cmd)
|
||||||
|
|
||||||
|
def run_cmd_list(cmd_list):
|
||||||
|
for i, cmd in enumerate(cmd_list):
|
||||||
|
ret = run_command(cmd['cmd'], cmd['dir'])
|
||||||
|
if ret != 0:
|
||||||
|
print("cmd(%s) run in dir(%s) failed and exit" % (cmd['cmd'], cmd['dir']))
|
||||||
|
exit(-1)
|
||||||
|
return
|
||||||
|
|
||||||
|
def create_acrn_deb(board, scenario, version, build_dir):
|
||||||
|
cur_dir = build_dir + '/../'
|
||||||
|
deb_dir = build_dir + '/acrn_release_deb/'
|
||||||
|
cmd_list = []
|
||||||
|
if os.path.exists(deb_dir):
|
||||||
|
add_cmd_list(cmd_list, 'rm -rf acrn_release_deb', build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'mkdir -p acrn_release_deb', build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'mkdir -p acrn_release_deb/boot', build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'mkdir DEBIAN', deb_dir)
|
||||||
|
add_cmd_list(cmd_list, 'touch DEBIAN/control', deb_dir)
|
||||||
|
deb_bin_name ='acrn.%s.%s.bin' % (scenario,board)
|
||||||
|
deb_out_name ='acrn.%s.%s.32.out' % (scenario,board)
|
||||||
|
build_bin_name = build_dir + '/hypervisor/acrn.bin'
|
||||||
|
build_out_name = build_dir + '/hypervisor/acrn.32.out'
|
||||||
|
add_cmd_list(cmd_list, 'cp %s acrn_release_deb/boot/%s' %(build_bin_name, deb_bin_name), build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'cp %s acrn_release_deb/boot/%s' %(build_out_name, deb_out_name), build_dir)
|
||||||
|
run_cmd_list(cmd_list)
|
||||||
|
|
||||||
|
lines=[]
|
||||||
|
f=open(cur_dir + "/misc/packaging/acrn-hypervisor.postinst",'r')
|
||||||
|
for line in f:
|
||||||
|
lines.append(line)
|
||||||
|
f.close()
|
||||||
|
start = lines.index('#Build info Start\n')
|
||||||
|
end = lines.index('#Build info End\n')
|
||||||
|
del lines[(start+1):(end-1)]
|
||||||
|
lines.insert(start+1,"\nSCENARIO=(%s)\n"%scenario)
|
||||||
|
lines.insert(start+2,"\nBOARD=(%s)\n"%board)
|
||||||
|
with open(cur_dir + "/misc/packaging/acrn-hypervisor.postinst", "w") as f:
|
||||||
|
for line in lines:
|
||||||
|
f.write(line)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
listcontrol=['Package: acrn-hypervisor\n',
|
||||||
|
'version: %s \n'% version,
|
||||||
|
'Section: free \n',
|
||||||
|
'Priority: optional \n',
|
||||||
|
'Architecture: amd64 \n',
|
||||||
|
'Maintainer: acrn-dev@lists.projectacrn.org \n',
|
||||||
|
'Description: ACRN Hypervisor for IoT \n',
|
||||||
|
'\n']
|
||||||
|
with open(deb_dir + '/DEBIAN/control','w',encoding='utf-8') as fr:
|
||||||
|
fr.writelines(listcontrol)
|
||||||
|
|
||||||
|
#design in acrn_data
|
||||||
|
with open(cur_dir + "/.deb.conf","r") as load_deb:
|
||||||
|
deb_info = json.load(load_deb)
|
||||||
|
load_deb.close()
|
||||||
|
|
||||||
|
deb_info_list = list(deb_info)
|
||||||
|
run_command('rm -rf acrn_release_img/usr/*', build_dir)
|
||||||
|
|
||||||
|
for i in deb_info_list:
|
||||||
|
source = deb_info[i]['source']
|
||||||
|
target = deb_info[i]['target']
|
||||||
|
if target == 'boot/':
|
||||||
|
continue
|
||||||
|
source = cur_dir + '/../' + source
|
||||||
|
target = deb_dir + target
|
||||||
|
if os.path.exists(target):
|
||||||
|
run_command('cp %s %s' % (source, target), cur_dir)
|
||||||
|
else:
|
||||||
|
run_command('mkdir -p %s' % target, cur_dir)
|
||||||
|
run_command('cp %s %s' % (source, target), cur_dir)
|
||||||
|
|
||||||
|
run_command('cp ./misc/packaging/acrn-hypervisor.postinst ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('chmod +x ./build/acrn_release_deb/etc/grub.d/100_ACRN', cur_dir)
|
||||||
|
run_command('chmod +x ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('sed -i \'s/\r//\' ./build/acrn_release_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('cp ./misc/packaging/acrn-hypervisor.preinst ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
|
||||||
|
run_command('chmod +x ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
|
||||||
|
run_command('sed -i \'s/\r//\' ./build/acrn_release_deb/DEBIAN/preinst', cur_dir)
|
||||||
|
|
||||||
|
ret = run_command('dpkg -b acrn_release_deb acrn-%s-%s-%s.deb' %(board, scenario, version), build_dir)
|
||||||
|
if ret != 0:
|
||||||
|
print("ERROR : generate ACRN debian package acrn-{}-{}-{}.deb failed! \
|
||||||
|
Please check all the files in {}/acrn_release_deb".format(board, scenario, version, build_dir))
|
||||||
|
else:
|
||||||
|
print("ACRN debian package acrn-{}-{}-{}.deb was successfully created in the {}.".format(board, scenario, version, build_dir))
|
||||||
|
return
|
||||||
|
|
||||||
|
def create_acrn_board_inspector_deb(version, build_dir):
|
||||||
|
cur_dir = build_dir + '/../'
|
||||||
|
deb_dir = build_dir + '/acrn_board_inspector_deb/'
|
||||||
|
cmd_list = []
|
||||||
|
if os.path.exists(deb_dir):
|
||||||
|
add_cmd_list(cmd_list, 'rm -rf acrn_board_inspector_deb', build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'mkdir -p acrn_board_inspector_deb', build_dir)
|
||||||
|
add_cmd_list(cmd_list, 'mkdir DEBIAN', deb_dir)
|
||||||
|
add_cmd_list(cmd_list, 'touch DEBIAN/control', deb_dir)
|
||||||
|
run_cmd_list(cmd_list)
|
||||||
|
|
||||||
|
#control file description
|
||||||
|
listcontrol=['Package: acrn-board-inspector\n',
|
||||||
|
'version: %s \n'% version,
|
||||||
|
'Section: free \n',
|
||||||
|
'Priority: optional \n',
|
||||||
|
'Architecture: amd64 \n',
|
||||||
|
'Maintainer: acrn-dev@lists.projectacrn.org \n',
|
||||||
|
'Description: ACRN board inspector tools \n',
|
||||||
|
'Depends: cpuid, msr-tools, pciutils, dmidecode, python3, python3-pip, python3-lxml \n',
|
||||||
|
'\n']
|
||||||
|
with open(deb_dir + '/DEBIAN/control','w',encoding='utf-8') as fr:
|
||||||
|
fr.writelines(listcontrol)
|
||||||
|
run_command('cp -r ./misc/config_tools/board_inspector/ ./build/acrn_board_inspector_deb/bin/', cur_dir)
|
||||||
|
run_command('cp ./misc/packaging/acrn-board-inspector.postinst ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('chmod +x ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('sed -i \'s/\r//\' ./build/acrn_board_inspector_deb/DEBIAN/postinst', cur_dir)
|
||||||
|
run_command('cp ./misc/packaging/acrn-board-inspector.prerm ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
|
||||||
|
run_command('chmod +x ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
|
||||||
|
run_command('sed -i \'s/\r//\' ./build/acrn_board_inspector_deb/DEBIAN/prerm', cur_dir)
|
||||||
|
|
||||||
|
ret = run_command('dpkg -b acrn_board_inspector_deb acrn-board-inspector-%s.deb' %(version), build_dir)
|
||||||
|
if ret != 0:
|
||||||
|
print("ERROR : generate board_inspector debian package acrn-board-inspector-{}.deb failed! \
|
||||||
|
Please check all the files in {}/acrn_board_inspector_deb".format(version, build_dir))
|
||||||
|
else:
|
||||||
|
print("board_inspector debian package acrn-board-inspector-{}.deb was successfully created in the {}.".format(version, build_dir))
|
||||||
|
return
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("deb_mode", help="choose deb mode, e.g. acrn_all or board_inspector")
|
||||||
|
parser.add_argument("build_dir", help="the absolute address of the acrn-hypervisor build directory")
|
||||||
|
parser.add_argument("--version", default="1.0", help="the acrn-hypervisor version")
|
||||||
|
parser.add_argument("--board_name", default="board", help="the name of the board that runs the ACRN hypervisor")
|
||||||
|
parser.add_argument("--scenario", default="scenario", help="the acrn hypervisor scenario setting")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.deb_mode == 'board_inspector':
|
||||||
|
create_acrn_board_inspector_deb(args.version, args.build_dir)
|
||||||
|
elif args.deb_mode == 'acrn_all':
|
||||||
|
create_acrn_deb(args.board_name, args.scenario, args.version, args.build_dir)
|
||||||
|
else:
|
||||||
|
print("ERROR: Please check the value of deb_mode: the value shall be acrn_all or board_inspector.")
|
Loading…
Reference in New Issue
Block a user