From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.92.42.97]) by mx.groups.io with SMTP id smtpd.web10.701.1614290497493580117 for ; Thu, 25 Feb 2021 14:01:37 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@outlook.com header.s=selector1 header.b=VOXrSQsi; spf=pass (domain: outlook.com, ip: 40.92.42.97, mailfrom: spbrogan@outlook.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GMHYaoFO1PIsOUey9dqXFHQs448Kde3JVEUCDZOLsnI7zpIj3g72yBh5Ash7fsRw3rF7AoNIdveY0L0NxYauYw+KqEF6HLoTmFf+zBHhkEGhok0b8PBWqbxURRspVpR+zAYkqCaSzXLApT4Lf0JKDSL74L+k9jQgQ0C8ZnRuDegjUsSGG/ACdnggypsv7ebFEXx/jqC/KvHxUy5K4c5niQxUXFL4QQeFIfW2By3ajIFZ+sTzu7vlIIlm8+VZTUPwBbRx8MQ+aSL89ohnR4oACLHjTk3RTVcBDlAkfXPq+YAys6EY76sagOPvD5PH0jskkwPfmnoYebQYlnkRApVWlA== 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=xgpy82zGPOjdxNdcVxphdMt9pdi01+Qdk5FGV69LF+w=; b=S+DrAzSNgw5ypeH9+/mAxbPoB5JDw69f7F1WtdH3ErDDfrnEcARJvGl1z7jI4lR9cl+CyZY1E/g4XiYinlgylz0av3Qcyhdyk1iKcFvczwSa+GYKpnCc4f2eKpl1UJKngkkYJBte8YW5yEsmp+OoKL27Wqj8m6UsbT+5m599KwDqa0brK/4mTfy7cUlD8VKn1dGWBhh5cvQ2atGhDWah74om8Yo0LJcS0Ri7CGaJxJ6ZPl4i5m620760OTpZv79kVVssOhuVtsHH+jfwQU9Lt1pOEyD2YMs1CzR31SvbKGT6SZPQXuhN4Tg0OwI/OnJQfqAe6noBCiqAzuT9OLKOuw== 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=xgpy82zGPOjdxNdcVxphdMt9pdi01+Qdk5FGV69LF+w=; b=VOXrSQsiOfg4TPL/rDGdTbMi0eANfm05HzjggJR930lqrQnWu6GoMP/TRUzdU0qvSWQZwlGoPMNOVFSPzDeNXEFv2ypcz1e9btc1vjrZom6WmyPpGjOZBRoCLjcdb0Eb5A28sGpVhJGyFcRkvA5GHNGTSZC10gOBoGoULD9sx6ElcYWQmPyqSIXNKBNfYGJiPWWb6d7CBpd3603S4eEQSYJumv3AEDNBOzSChhMmridubKgr7mWVpArkmKYRmfu8c65ohJ7r8RCbd9Dw+WyjAqBRF4Iiudjm4dwI620IymaU/Xwpjos7tC/sUoKxH12nuMSG7s7fEt35NzwZ1j3q6g== Received: from MW2NAM10FT035.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e87::4b) by MW2NAM10HT027.eop-nam10.prod.protection.outlook.com (2a01:111:e400:7e87::221) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3890.19; Thu, 25 Feb 2021 22:01:36 +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 22:01:36 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:9213C692C9CC24C681D61725D0F4BF482C3875ECD0274C84A6B92E94EB6609FA;UpperCasedChecksum:9C9A5B3A4146C3AEE8A6A6198DA4153C3B569492D88E0925715EF12FB0BD9F55;SizeAsReceived:9134;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 22:01:35 +0000 Subject: =?UTF-8?B?UmU6IOWbnuWkjTogW2VkazItZGV2ZWxdIFtQQVRDSCB2MSAxLzJdIEFybVZpcnRQa2cvUGxhdGZvcm1DSTogQWRkIEVES0lJIENJIHN1cHBvcnQgZm9yIEt2bXRvb2w=?= To: devel@edk2.groups.io, gaoliming@byosoft.com.cn, sami.mujawar@arm.com 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@arm.com, Ben.Adderson@arm.com, nd@arm.com 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 14:01:33 -0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 In-Reply-To: <006001d70b82$e723dc20$b56b9460$@byosoft.com.cn> X-TMN: [ulW2ykff71PD5VSWlLB8vvrfb9eYd7C0] X-ClientProxiedBy: CO2PR04CA0168.namprd04.prod.outlook.com (2603:10b6:104:4::22) To DM6PR19MB4010.namprd19.prod.outlook.com (2603:10b6:5:24e::19) Return-Path: spbrogan@outlook.com X-Microsoft-Original-Message-ID: <5bc66055-8a60-ad71-db40-b4cce4564cc5@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.2.78] (50.47.113.221) by CO2PR04CA0168.namprd04.prod.outlook.com (2603:10b6:104:4::22) 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 22:01:35 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 95adcba4-eeb7-40a9-bcea-08d8d9d8eb53 X-MS-TrafficTypeDiagnostic: MW2NAM10HT027: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xqjcp1SveG8VlfBKA2nL0s7BnTctEaXaLnC1Qgm8doUTD5vBor9on5fuaDEH/O0OERmKXXFTBwtvd6FpSk2qC2sRF82N3My6aYWTFI4Jd6zYXq0A11tk9nPfTJbwX4lcA7UhFNV5J0jut86BoDam3XR1CbaWn/hszN/ge06DsS5wLiNWwLywbn1VOL6wbv2bDNE+tSKLZZCaYdloY+cD3oiCx28rWmVt/4GAwQNlH2V9Hx4iIEMz6RUGeNM3VXqZLqadY+a8Ib3CCyG20RtSYjvDgc77o6o2wG536pBnBb5Fh/AkDsd6eznv/SqQyUk6HH+/Gr8Td3kQYVJs5EQ0vKeoRAGPU1255LVfUsshUs3XrjM+54zfyI8aDsxelGUWN83q/SvNSUZB0t+2JF6ForQA9Xv49KkfCCSLUpvE1IYH9RvKm7EiQJMIad2FsFkC X-MS-Exchange-AntiSpam-MessageData: tNiVJG/xA5KlHlhM48J2YtgEagQ5hIGVcs+rEtB8ztA1v1Z+LN8n/n8ipHdWvN6hfmsUaHnAbl6wTQer2x6aR78ES59awSdY9sK2EVhAl8tw63Jnc1mhAk0WSbDIoEtEfXH+4Aawt0aPKaGtHL6gZg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 95adcba4-eeb7-40a9-bcea-08d8d9d8eb53 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2021 22:01:35.9621 (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: MW2NAM10HT027 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable Liming, The patch as authored there doesn't correctly detect if a given set of=20 changes (in a pr) impact the ArmVirtKvmTool platform. I sent a follow=20 up with a link to a branch that will correctly return the DSC file based= =20 on the build configuration requested. Thanks Sean On 2/25/2021 6:31 AM, gaoliming wrote: > 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 >=20 >=20 >=20 >=20