From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.92.40.98]) by mx.groups.io with SMTP id smtpd.web10.645.1614290295209842220 for ; Thu, 25 Feb 2021 13:58:15 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=P61zWIS5; spf=pass (domain: outlook.com, ip: 40.92.40.98, mailfrom: spbrogan@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JLB7XYoJTwLyOCBoFSlXcgPqNQlM2a9T4JLqezbp5y4JT/BNSAr5VsnvlDgyBHXJ9kgZF+Cnl1EDw/pthHaDXhyAy6ZsX/DKZeT4XbJ88PHPn+jYuwUiK+ObuNS6fHyX19mr5i5O9lJVccNsf9vpk7voFfWHKzORaFc8nTm8578ohLKefQtJQtLJ0XpNrkL9o8fMyDlbp/Cjly+AWNft66UVV6wJl/dnwXPQLKnp6Dped3tSD7kCPxbED5PT/h7hnQodmr356gsZPuu+JK4LfMuHqZ1xhvvkofLiRVR94FVQluB+fvRud7fnh7XYYgzgfEROAoTXlY0BlYfL+Xd1Vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uh0SDbcPxHgbyPEa3bxrl7/0WJo8ceH3484g0yMJd/g=; b=a26m/fVPShy5dgjqnQwl7aQEeFRro7zS6pe8BTsfWF0ulhxJ2/iAZOJglc/mN5/m0Ud+rHYubnr9U6QM6oNyQ8VomWKJI/vJQ3xJcM/D4t3Qu7+HD0jJr1bZZH6nc6gMwhRpAv56LBMCaO46C/EcLSHBTYsQHMrCVeEc6H9x6JwFuUQw8Vn4vdmZNzmg8lD6wkET5v4mM+3fYOIBr81tHWOxXuLpkpkFR0J5OnYHbAITQM2tER+0mIHKoYXwEXcuyYIY2GnqFrRwsb1B5AEtTAaLfpZP96iA/rfhf7MsffhYkOfbhgu2ZPIscpj/hIkBpBbcajRNTR4vEX8/5/cgTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uh0SDbcPxHgbyPEa3bxrl7/0WJo8ceH3484g0yMJd/g=; b=P61zWIS5tpo9TN1WwjmDALMcKGJUISxr9yI6z7s3Rz9IiZrKbJwgW8D76eiXSIMAGkaX1T5BxWs19r3ZA04L5u7OyxxHD+ap1YCGgwd4DH80gOaXKJLdl4lYOjRDTG88Faq/4+7J9dLl+sIm9T3sE/XIqayUFBu2TQ4fguEw4WUpLHKNK6IxTJvKnU/Pl5Zh5j+Wb5byVeWJjwZKk2XEIy2Vt7/r0MbfTkLJawn1mK/6TeAhCcmCBdnHILsvPbiA60Y7QhovS4MkpSh6Mhn4A6W+l/dfSXNGcrIAQ2hxdGQ3+Af2W096OBTNPS2rYn8ULoTgnPPetFQ6KLSIgutg6w== Received: from MW2NAM10FT035.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e87::49) by MW2NAM10HT133.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e87::303) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3868.27; Thu, 25 Feb 2021 21:58:13 +0000 Received: from DM6PR19MB4010.namprd19.prod.outlook.com (2a01:111:e400:7e87::52) by MW2NAM10FT035.mail.protection.outlook.com (2a01:111:e400:7e87::184) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.19 via Frontend Transport; Thu, 25 Feb 2021 21:58:13 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:AD8613B10C7EADC78FEBDC65B3D887B6C5F1BC32CE0A3FA3D2626FFF7E38DB9F;UpperCasedChecksum:B05F2D301EFABA821C10EE29B50783C858553F46A222B01B9197D57282025389;SizeAsReceived:9481;Count:48 Received: from DM6PR19MB4010.namprd19.prod.outlook.com ([fe80::3d83:7795:7cb8:1a94]) by DM6PR19MB4010.namprd19.prod.outlook.com ([fe80::3d83:7795:7cb8:1a94%7]) with mapi id 15.20.3890.020; Thu, 25 Feb 2021 21:58:13 +0000 Subject: Re: [edk2-devel] [PATCH v1 1/2] ArmVirtPkg/PlatformCI: Add EDKII CI support for Kvmtool To: Sami Mujawar , gaoliming , "devel@edk2.groups.io" CC: "ardb+tianocore@kernel.org" , "leif@nuviainc.com" , "sean.brogan@microsoft.com" , "Bret.Barkelew@microsoft.com" , "michael.d.kinney@intel.com" , "lersek@redhat.com" , Matteo Carlini , Ben Adderson , nd References: <20210122171941.30724-1-sami.mujawar@arm.com> <20210122171941.30724-2-sami.mujawar@arm.com> <006001d70b82$e723dc20$b56b9460$@byosoft.com.cn> From: "Sean" Message-ID: Date: Thu, 25 Feb 2021 13:58:10 -0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 In-Reply-To: X-TMN: [QCLiDrBEgDEOsCzBVlttLcnan0mbimbX] X-ClientProxiedBy: MW4PR03CA0076.namprd03.prod.outlook.com (2603:10b6:303:b6::21) To DM6PR19MB4010.namprd19.prod.outlook.com (2603:10b6:5:24e::19) Return-Path: spbrogan@outlook.com X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.2.78] (50.47.113.221) by MW4PR03CA0076.namprd03.prod.outlook.com (2603:10b6:303:b6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.20 via Frontend Transport; Thu, 25 Feb 2021 21:58:12 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 536b5fe6-5817-4d7e-1517-08d8d9d87249 X-MS-TrafficTypeDiagnostic: MW2NAM10HT133: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 61JsQ4E017xgj6I7a78tkjN2RusmjlAEmXLtEf67L9jKsi8b5DxYmx9edKIxZ/HNbFnNJh2OzfK4Lo61qa+A8W/6MtYYleDxgIoEljKtaJlshwzlSsTq1bmTjTmM2boS48fP1RrLV/J/n2vlmBmNIWXbfIzwsLH9rA5argCZhJ36VxWAYRXvlNIsRgRGdX3/KTZZ1mcPi+dBuqAlflcWyazsIOtfVVwrur4D1C2i9BPWqhkKGRqlY6pCM1xE86Rv+eR6zhwSq30hqaXu9b18ts/WllyUW5iLyxl2xoWj2KNLizcAPpm7xiQggwKncHPkV7RxCberWek+pSnIv4g4MIZAsrJ8UtXiCEvUnGA0nQYNqurw4giXvurWaXXs11Thp+qTS0JrQzkshQKovnCMA94Gd4M0Xue08RCYt4SAbWmGfXFOvoQjIiVa6H1SN+pz X-MS-Exchange-AntiSpam-MessageData: bNeYvujPOAHzbVEIpxWy32H9/HtCaR0lXkfAGnYE6JcUrJeHgk7yacto83L6uJ9z2Wft7MChJPKxOExnTMNcpY1Rm6uh6y0r+ez4FzgHxOeg3gn/u6JBpGUboEXFcMqcbsasjHr6PHoIGTWYecdiqw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 536b5fe6-5817-4d7e-1517-08d8d9d87249 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2021 21:58:13.1598 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: MW2NAM10FT035.eop-nam10.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW2NAM10HT133 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable Sami, Looking over this. The root of the issue is that when I setup the PlatformBuild.py file i=20 chose to split the objects. PlatformBuilder is the UefiBuilder and BuildSettingsManager SettingsManager is the Update, Setup, and PrEval object. This means that you need to add that argument to both objects. I made a few changes based on your v1 (i really prefer not to dup the=20 PlatformBuild.py unless there are major differences). https://github.com/spbrogan/edk2/tree/spbrogan_kvm_feedback I just submitted the PR here: https://github.com/tianocore/edk2/pull/1460 One concern is to make PR evaluation reliable it requires a change in=20 the platform build steps template as build flags are not sent to the=20 PR_EVAL step and thus the wrong DSC would be picked up for your platform. https://github.com/spbrogan/edk2/commit/6b7b405db248356df8ec080add839e6652= f180a5 This should probably land first and then your addition of this platform. Finally, My other question is this is adding 6 more builds for each PR. Do you think this platform provides enough differientation that it is=20 worth taking the overhead? We (edk2 community) may need to rethink=20 platform CI as it can eat up a lot of resources. Thanks Sean On 2/25/2021 6:39 AM, Sami Mujawar wrote: > Hi All, >=20 > It appears that the --dsc parameter would fail in the stuart_setup stage= when running in the upstream EDKII Core CI environment. For some reason it= worked for me in the local CI builds. >=20 > I am testing a v2 version of my patch at https://github.com/samimujawar/= edk2/tree/1596_kvmtool_ci_v2 and will submit it shortly. >=20 > Regards, >=20 > Sami Mujawar >=20 > -----Original Message----- > From: gaoliming > Sent: 25 February 2021 02:31 PM > To: devel@edk2.groups.io; spbrogan@outlook.com; Sami Mujawar > Cc: ardb+tianocore@kernel.org; leif@nuviainc.com; sean.brogan@microsoft.= com; Bret.Barkelew@microsoft.com; michael.d.kinney@intel.com; lersek@redhat= .com; Matteo Carlini ; Ben Adderson ; nd > Subject: =E5=9B=9E=E5=A4=8D: [edk2-devel] [PATCH v1 1/2] ArmVirtPkg/Plat= formCI: Add EDKII CI support for Kvmtool >=20 > Sean: >=20 >> -----=E9=82=AE=E4=BB=B6=E5=8E=9F=E4=BB=B6----- >> =E5=8F=91=E4=BB=B6=E4=BA=BA: devel@edk2.groups.io =E4=BB=A3=E8=A1=A8 Sean >> =E5=8F=91=E9=80=81=E6=97=B6=E9=97=B4: 2021=E5=B9=B42=E6=9C=8824=E6=97= =A5 6:32 >> =E6=94=B6=E4=BB=B6=E4=BA=BA: devel@edk2.groups.io; sami.mujawar@arm.com >> =E6=8A=84=E9=80=81: ardb+tianocore@kernel.org; leif@nuviainc.com; >> sean.brogan@microsoft.com; Bret.Barkelew@microsoft.com; >> michael.d.kinney@intel.com; gaoliming@byosoft.com.cn; lersek@redhat.com= ; >> Matteo.Carlini@arm.com; Ben.Adderson@arm.com; nd@arm.com >> =E4=B8=BB=E9=A2=98: Re: [edk2-devel] [PATCH v1 1/2] ArmVirtPkg/Platform= CI: Add EDKII CI >> support for Kvmtool >> >> Sami, >> >> Do you have these in a PR or somewhere online that is already merged? >> Obviously i can do that but usually developers already have that (eithe= r >> edk2 PR for ci testing or on their fork). >> >> one comment below. >> >> Thanks >> Sean >> >> >> On 1/22/2021 9:19 AM, Sami Mujawar wrote: >>> Kvmtool is a virtual machine manager that can be used to launch >>> guest partitions. ArmVirtPkg already has UEFI (virtual/guest) >>> firmware support for Kvmtool guest. >>> >>> Therefore, update the Platform CI script to add support for >>> building the Kvmtool firmware. >>> >>> Signed-off-by: Sami Mujawar >>> --- >>> ArmVirtPkg/PlatformCI/PlatformBuild.py | 132 +++++++++++--------- >>> ArmVirtPkg/PlatformCI/ReadMe.md | 21 ++-- >>> 2 files changed, 88 insertions(+), 65 deletions(-) >>> >>> diff --git a/ArmVirtPkg/PlatformCI/PlatformBuild.py >> b/ArmVirtPkg/PlatformCI/PlatformBuild.py >>> index >> dff653e919eb42391fc56ec44b4043a75f79d162..473f7d58d15c3e26ef5a25e2 >> 10cb679679b28131 100644 >>> --- a/ArmVirtPkg/PlatformCI/PlatformBuild.py >>> +++ b/ArmVirtPkg/PlatformCI/PlatformBuild.py >>> @@ -2,6 +2,7 @@ >>> # Script to Build ArmVirtPkg UEFI firmware >>> # >>> # Copyright (c) Microsoft Corporation. >>> +# Copyright (c) 2021, Arm Limited. All rights reserved.
>>> # SPDX-License-Identifier: BSD-2-Clause-Patent >>> ## >>> import os >>> @@ -139,7 +140,8 @@ class SettingsManager(UpdateSettingsManager, >> SetupSettingsManager, PrEvalSetting >>> >>> The tuple should be (, >> ) >>> ''' >> >> This doesn't look right. When returning the dsc to use it should only >> return 1 dsc file. The second parameter of the tuple is for key=3Dvalu= e >> pairs to process the DSC file. >> >=20 > If the second parameter is not DSC file, that means ArmVirtKvmTool.dsc i= s not used. > So, this patch doesn't enable CI support for ArmVirtKvmTool. Right? >=20 > Thanks > Liming >> >>> - return (os.path.join("ArmVirtPkg", "ArmVirtQemu.dsc"), {}) >>> + return (os.path.join("ArmVirtPkg", "ArmVirtQemu.dsc"), >>> + os.path.join("ArmVirtPkg", "ArmVirtKvmTool.dsc"), {}) >>> >>> >>> # >> ############################################################## >> ######################### # >>> @@ -150,11 +152,15 @@ class SettingsManager(UpdateSettingsManager, >> SetupSettingsManager, PrEvalSetting >>> class PlatformBuilder(UefiBuilder, BuildSettingsManager): >>> def __init__(self): >>> UefiBuilder.__init__(self) >>> + self.PlatformList =3D [os.path.join("ArmVirtPkg", >> "ArmVirtQemu.dsc"), >>> + os.path.join("ArmVirtPkg", >> "ArmVirtKvmTool.dsc")] >>> >>> def AddCommandLineOptions(self, parserObj): >>> ''' Add command line options to the argparser ''' >>> parserObj.add_argument('-a', "--arch", dest=3D"build_arch", >> type=3Dstr, default=3D"AARCH64", >>> help=3D"Optional - Architecture to >> build. Default =3D AARCH64") >>> + parserObj.add_argument('-d', "--dsc", dest=3D"active_platform= ", >> type=3Dstr, default=3Dself.PlatformList[0], >>> + help=3D"Optional - Platform to build. >> Default =3D " + self.PlatformList[0]) >>> >>> def RetrieveCommandLineOptions(self, args): >>> ''' Retrieve command line options from the argparser ''' >>> @@ -162,8 +168,12 @@ class PlatformBuilder(UefiBuilder, >> BuildSettingsManager): >>> shell_environment.GetBuildVars().SetValue( >>> "TARGET_ARCH", args.build_arch.upper(), "From >> CmdLine") >>> >>> - shell_environment.GetBuildVars().SetValue( >>> - "ACTIVE_PLATFORM", "ArmVirtPkg/ArmVirtQemu.dsc", >> "From CmdLine") >>> + if (args.active_platform =3D=3D self.PlatformList[1]): >>> + shell_environment.GetBuildVars().SetValue( >>> + "ACTIVE_PLATFORM", self.PlatformList[1], "From >> CmdLine") >>> + else: >>> + shell_environment.GetBuildVars().SetValue( >>> + "ACTIVE_PLATFORM", self.PlatformList[0], "From >> CmdLine") >>> >>> def GetWorkspaceRoot(self): >>> ''' get WorkspacePath ''' >>> @@ -207,9 +217,12 @@ class PlatformBuilder(UefiBuilder, >> BuildSettingsManager): >>> >>> def SetPlatformEnv(self): >>> logging.debug("PlatformBuilder SetPlatformEnv") >>> - self.env.SetValue("PRODUCT_NAME", "ArmVirtQemu", "Platform >> Hardcoded") >>> self.env.SetValue("MAKE_STARTUP_NSH", "FALSE", "Default to >> false") >>> self.env.SetValue("QEMU_HEADLESS", "FALSE", "Default to >> false") >>> + if (self.env.GetValue("ACTIVE_PLATFORM") =3D=3D >> self.PlatformList[1]): >>> + self.env.SetValue("PRODUCT_NAME", "ArmVirtKvmtool", >> "Platform Hardcoded") >>> + else: >>> + self.env.SetValue("PRODUCT_NAME", "ArmVirtQemu", >> "Platform Hardcoded") >>> return 0 >>> >>> def PlatformPreBuild(self): >>> @@ -219,58 +232,61 @@ class PlatformBuilder(UefiBuilder, >> BuildSettingsManager): >>> return 0 >>> >>> def FlashRomImage(self): >>> - VirtualDrive =3D os.path.join(self.env.GetValue( >>> - "BUILD_OUTPUT_BASE"), "VirtualDrive") >>> - os.makedirs(VirtualDrive, exist_ok=3DTrue) >>> - OutputPath_FV =3D os.path.join( >>> - self.env.GetValue("BUILD_OUTPUT_BASE"), "FV") >>> - Built_FV =3D os.path.join(OutputPath_FV, "QEMU_EFI.fd") >>> - >>> - # pad fd to 64mb >>> - with open(Built_FV, "ab") as fvfile: >>> - fvfile.seek(0, os.SEEK_END) >>> - additional =3D b'\0' * ((64 * 1024 * 1024)-fvfile.tell()) >>> - fvfile.write(additional) >>> - >>> - # QEMU must be on that path >>> - >>> - # Unique Command and Args parameters per ARCH >>> - if (self.env.GetValue("TARGET_ARCH").upper() =3D=3D "AARCH64"= ): >>> - cmd =3D "qemu-system-aarch64" >>> - args =3D "-M virt" >>> - args +=3D " -cpu cortex-a57" >> # emulate cpu >>> - elif(self.env.GetValue("TARGET_ARCH").upper() =3D=3D "ARM"): >>> - cmd =3D "qemu-system-arm" >>> - args =3D "-M virt" >>> - args +=3D " -cpu cortex-a15" >> # emulate cpu >>> + if (self.env.GetValue("ACTIVE_PLATFORM") =3D=3D >> self.PlatformList[1]): >>> + return 0 >>> else: >>> - raise NotImplementedError() >>> - >>> - # Common Args >>> - args +=3D " -pflash " + Built_FV >> # path to fw >>> - args +=3D " -m 1024" >> # 1gb memory >>> - # turn off network >>> - args +=3D " -net none" >>> - # Serial messages out >>> - args +=3D " -serial stdio" >>> - # Mount disk with startup.nsh >>> - args +=3D f" -drive >> file=3Dfat:rw:{VirtualDrive},format=3Draw,media=3Ddisk" >>> - >>> - # Conditional Args >>> - if (self.env.GetValue("QEMU_HEADLESS").upper() =3D=3D "TRUE")= : >>> - args +=3D " -display none" # no graphics >>> - >>> - if (self.env.GetValue("MAKE_STARTUP_NSH").upper() =3D=3D "TRU= E"): >>> - f =3D open(os.path.join(VirtualDrive, "startup.nsh"), "w"= ) >>> - f.write("BOOT SUCCESS !!! \n") >>> - # add commands here >>> - f.write("reset -s\n") >>> - f.close() >>> - >>> - ret =3D RunCmd(cmd, args) >>> - >>> - if ret =3D=3D 0xc0000005: >>> - # for some reason getting a c0000005 on successful return >>> - return 0 >>> - >>> - return ret >>> + VirtualDrive =3D os.path.join(self.env.GetValue( >>> + "BUILD_OUTPUT_BASE"), "VirtualDrive") >>> + os.makedirs(VirtualDrive, exist_ok=3DTrue) >>> + OutputPath_FV =3D os.path.join( >>> + self.env.GetValue("BUILD_OUTPUT_BASE"), "FV") >>> + Built_FV =3D os.path.join(OutputPath_FV, "QEMU_EFI.fd") >>> + >>> + # pad fd to 64mb >>> + with open(Built_FV, "ab") as fvfile: >>> + fvfile.seek(0, os.SEEK_END) >>> + additional =3D b'\0' * ((64 * 1024 * 1024)-fvfile.t= ell()) >>> + fvfile.write(additional) >>> + >>> + # QEMU must be on that path >>> + >>> + # Unique Command and Args parameters per ARCH >>> + if (self.env.GetValue("TARGET_ARCH").upper() =3D=3D >> "AARCH64"): >>> + cmd =3D "qemu-system-aarch64" >>> + args =3D "-M virt" >>> + args +=3D " -cpu cortex-a57" >> # emulate cpu >>> + elif(self.env.GetValue("TARGET_ARCH").upper() =3D=3D >> "ARM"): >>> + cmd =3D "qemu-system-arm" >>> + args =3D "-M virt" >>> + args +=3D " -cpu cortex-a15" >> # emulate cpu >>> + else: >>> + raise NotImplementedError() >>> + >>> + # Common Args >>> + args +=3D " -pflash " + Built_FV >> # path to fw >>> + args +=3D " -m 1024" >> # 1gb memory >>> + # turn off network >>> + args +=3D " -net none" >>> + # Serial messages out >>> + args +=3D " -serial stdio" >>> + # Mount disk with startup.nsh >>> + args +=3D f" -drive >> file=3Dfat:rw:{VirtualDrive},format=3Draw,media=3Ddisk" >>> + >>> + # Conditional Args >>> + if (self.env.GetValue("QEMU_HEADLESS").upper() =3D=3D >> "TRUE"): >>> + args +=3D " -display none" # no graphics >>> + >>> + if (self.env.GetValue("MAKE_STARTUP_NSH").upper() =3D= =3D >> "TRUE"): >>> + f =3D open(os.path.join(VirtualDrive, "startup.nsh"= ), >> "w") >>> + f.write("BOOT SUCCESS !!! \n") >>> + # add commands here >>> + f.write("reset -s\n") >>> + f.close() >>> + >>> + ret =3D RunCmd(cmd, args) >>> + >>> + if ret =3D=3D 0xc0000005: >>> + # for some reason getting a c0000005 on successful >> return >>> + return 0 >>> + >>> + return ret >>> diff --git a/ArmVirtPkg/PlatformCI/ReadMe.md >> b/ArmVirtPkg/PlatformCI/ReadMe.md >>> index >> 7c11d925f59ede4717d4b210df9d2b97f755ebd8..98a3ca91f40c075bf1a2069 >> edd99e9680a1252e9 100644 >>> --- a/ArmVirtPkg/PlatformCI/ReadMe.md >>> +++ b/ArmVirtPkg/PlatformCI/ReadMe.md >>> @@ -6,13 +6,14 @@ to use the same Pytools based build infrastructure >> locally. >>> ## Supported Configuration Details >>> >>> This solution for building and running ArmVirtPkg has only been val= idated >> with Ubuntu >>> -18.04 and the GCC5 toolchain. Two different firmware builds are suppo= rted >> and are >>> -described below. >>> +18.04 and the GCC5 toolchain. The supported firmware builds are >> described below. >>> >>> -| Configuration name | Architecture | DSC File >> |Additional Flags | >>> -| :---------- | :----- | :----- >> | :---- | >>> -| AARCH64 | AARCH64 | >> ArmVirtQemu.dsc | None | >>> -| ARM | ARM | >> ArmVirtQemu.dsc | None | >>> +| Configuration name | Architecture | DSC File >> |Additional Flags | >>> +| :---------- | :----- | :----- >> | :---- | >>> +| AARCH64 | AARCH64 | >> ArmVirtQemu.dsc | None | >>> +| ARM | ARM | >> ArmVirtQemu.dsc | None | >>> +| AARCH64 | AARCH64 | >> ArmVirtKvmTool.dsc | None | >>> +| ARM | ARM | >> ArmVirtKvmTool.dsc | None | >>> >>> ## EDK2 Developer environment >>> >>> @@ -79,7 +80,13 @@ Pytools build system. >>> ``` >>> >>> - use `stuart_build -c ArmVirtPkg/PlatformCI/PlatformBuild.py -= h` >> option to see additional >>> - options like `--clean` >>> + options like `--clean`, `--dsc`, etc. >>> + >>> + Example: The `--dsc` option can be used to specify the platform t= o >> build. >>> + >>> + ``` bash >>> + stuart_build -c ArmVirtPkg/PlatformCI/PlatformBuild.py >> TOOL_CHAIN_TAG=3D -a --dsc >> ArmVirtPkg/ArmVirtKvmTool.dsc >>> + ``` >>> >>> 8. Running Emulator >>> - You can add `--FlashRom` to the end of your build command and >> the emulator will run after the >>> >> >> >>=20 >> >=20 >=20 >=20