From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2a00:1450:4864:20::344; helo=mail-wm1-x344.google.com; envelope-from=leif.lindholm@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0269A21B02822 for ; Mon, 26 Nov 2018 10:38:41 -0800 (PST) Received: by mail-wm1-x344.google.com with SMTP id g67so6162143wmd.2 for ; Mon, 26 Nov 2018 10:38:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=eT3xna/PiNnCItvqrWpam8b//dgAc22FeCUCFQvhJkc=; b=ZD073TWQL4hG98gxmLHjnFe4BSQ6FVsziqJIp0333L4jltBkz673Wyw7VNmPyX9vau 53Qgg34yFyjLIzkdWHoUp11t2TUyMv9E8JONhUcldyFhGZlJTkysSk5gu40PT06SA279 xirnr7LWSZ9Ps8mcVAef3zWu5UXITzLLxZKsY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=eT3xna/PiNnCItvqrWpam8b//dgAc22FeCUCFQvhJkc=; b=h7OpbYmQB7m8rQ9frNHavF3IfUHgU2IoqD0Sr7pY62kFXv4WW+w98cHs6RkxvqeUfC aMEFZ8G1PR/zFXGnDjbtFy3AU2AtFXNtzIw3GTyHpX3eJJZRMJCMjHP4A9aLBQBk4heB 5GNJOWV/fquURvHPz9VJceROdk5fIHGii+TGBDypRzEFk6/3XKigrk49isTUpZLso73Y 6pOPlbaWHGhJ3kDmYjf0FxdihDQ3RNmtkESnjTJUq861nvSeq8wLBTjwk2Ofy73Y8da7 Qzmuyd5J6L+yPdjCqVVBF6pFlTHndAqrZ/dYJ4JA5RDG0WX1AP0m3CDi2Ol7vFdihHJD MVMg== X-Gm-Message-State: AA+aEWZUCw2NgBS9stGDanSttWdQ5swipLhUI6Da5T0mCn5YqzLnJLj1 WNpDVmORTWSEeU7OIEoKIdnvlQ== X-Google-Smtp-Source: AFSGD/URwBE5qec7bZEHhDzq02roZTCQiKi+pcGKAMtCYYOMS8M99cRZcz1HU2lkPu7oahJlLL52Mg== X-Received: by 2002:a1c:48c1:: with SMTP id v184-v6mr14538109wma.26.1543257520049; Mon, 26 Nov 2018 10:38:40 -0800 (PST) Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id y9sm1057240wrq.55.2018.11.26.10.38.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 26 Nov 2018 10:38:38 -0800 (PST) Date: Mon, 26 Nov 2018 18:38:37 +0000 From: Leif Lindholm To: Nariman Poushin Cc: edk2-devel@lists.01.org, mark.nicholson@arm.com Message-ID: <20181126183837.6tftkt23gxapjaka@bivouac.eciton.net> References: <1543238268-32652-1-git-send-email-nariman.poushin@linaro.org> MIME-Version: 1.0 In-Reply-To: <1543238268-32652-1-git-send-email-nariman.poushin@linaro.org> User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [PATCH v2 2/2] Platform/ARM: Add Readme.md X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Nov 2018 18:38:42 -0000 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Nov 26, 2018 at 01:17:48PM +0000, Nariman Poushin wrote: > This covers the bulk of the information originally present in > https://github.com/tianocore/tianocore.github.io/wiki/ArmPlatformPkg-AArch64 > regarding building and running the Foundation/Base FVP Platforms. > > The sections on fetching source have been delegated to the root Readme.md > > Signed-off-by: Nariman Poushin Detailed comments below. Overall, the feedback is pretty much all either - Please refer to top-level Readme.md for generic operations (and improve that if needed.). or - The wiki page is horribly outdated, so it's great you're taking this step and placing the instructions with the code, but you're basing it on something horribly outdated. +Mark (Since he may actually have some links to less outdated information on one of ARM's sites.) (Apologies if reading the below feels like someone throwing bricks at you.) > --- > Platform/ARM/Readme.md | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 102 insertions(+) > create mode 100644 Platform/ARM/Readme.md > > diff --git a/Platform/ARM/Readme.md b/Platform/ARM/Readme.md > new file mode 100644 > index 0000000..f6b97d3 > --- /dev/null > +++ b/Platform/ARM/Readme.md > @@ -0,0 +1,102 @@ > +== Introduction == > +These instructions are to build and run UEFI on the AArch64 Foundation or Base FVPs (Fixed Virtual Platforms). FVPs are fixed configurations of ARM Fast Models; they are also known as RTSMs (Real Time System Models). The Base FVP is an evolution of the VE (Versatile Express) RTSM.
> +While the AArch64 Foundation FVP is free to download, the Base FVP requires an ARM license. The Base FVP has additional debugging and configuration features. > + > +Requirement: > +* A 32-bit or 64-bit Linux host machine. Support for MS > Windows-based toolchains has not been added to the EDK2 > BaseTools. (This is actually no longer true - although we are lacking certain assembler files required to build most full platforms: my w-i-p can be found at https://git.linaro.org/people/leif.lindholm/edk2.git/log/?h=aarch64-vs and lets you build several platforms with large bits of critical assembler functionality stubbed out :) "Building these platforms with Visual Studio is not yet supported." would be a more accurate statement. > + > +== Getting the EDK2 Source with AArch64 support (ARM 64-bit architecture) == > +1) Get the requirements > + > +A Universally Unique Id (UUID) header. Needed to build the EDK2 > BaseTools. On Ubuntu: sudo apt-get install uuid-dev This is mentioned in the top-level Readme.md (without the specific commands). Please add to the text there if necessary. > + > +2) Download the sources > + > +Please see the root edk2/Readme.md for information on how to obtain the source [Readme.md](../../Readme.md) > + > +== Build EDK2 Tianocore == > + > +1) Install AArch64 GNU toolchain: > +
sudo apt install gcc-aarch64-linux-gnu
More like sudo apt-install gcc. But still, this and the esoterics of cross compilation (for those that prefer to faff around) is covered in the top-level Readme.md. > + > +2) Build EDK2: > + > +
cd $(WORKSPACE)/edk2
> +* For the Foundation and Base FVPs (defined by the DSC file > ArmPlatformPkg?/ArmVExpressPkg/ArmVExpress-RTSM-AEMv8Ax4-foundation.dsc): Yikes. That file hasn't existed for quite some time. (edk2-platforms/)Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc is what you want. > +
GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -a AARCH64 -p
> Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -t GCC5
Skip the cross compilation scaffolding, it's covered in the root Readme.md for those who need it. Just give a simple example command line as a sneaky way to point out the .dsc. > + > +Once built, the UEFI Firmware is the following file Build/ArmVExpress-FVP-AArch64/DEBUG_GCC5/FV/FVP_AARCH64_EFI.fd > + > +Note 1: To build the release build, add '-b RELEASE'. Here's an example with the Foundation FVP: > +
GCC5_AARCH64_PREFIX=aarch64-linux-gnu- build -a AARCH64 -p Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc -t GCC5 -b RELEASE
Again, I'd leave the generic build instructions out of this. > + > +== Start Linux from UEFI on the FVPs == > + > +=== Build AArch64 Linux === > +1) Get the AArch64 Linux sources > +
git clone git://git.kernel.org/pub/scm/linux/kernel/git/cmarinas/linux-aarch64.git -b soc-armv8-model
> +cd linux-aarch64
> + > +2) Build the AArch64 kernel with Virtio support > +
make ARCH=arm64 mrproper
> +make ARCH=arm64 defconfig
> + > +Enable Virtio Disk and Ext4 support in the kernel. The Linaro disk file-system uses Ext4. > +
make ARCH=arm64 menuconfig
> +Device Drivers  ---> Virtio drivers  ---> <*> Platform bus driver for memory mapped virtio devices
> +Device Drivers  ---> [*] Block devices  --->  <*> Virtio block driver
> +File systems  ---> <*> The Extended 4 (ext4) filesystem
> + > +Build the kernel. > +
make -j4 ARCH=arm64 CROSS_COMPILE=/gcc-linaro-aarch64-linux-gnu-4.8-2013.06_linux/bin/aarch64-linux-gnu-
If people need a cross compiler, they already have one installed if they got this far. But actually, I think this whole section can go. This shouldn't be a page talking about how to build a Linux kernel. And those virtio options are actually the default in upstream Linux these days. > + > +You should get the binaries: > +* arch/arm64/boot/Image > +* arch/arm64/boot/dts/foundation-v8.dtb > +* arch/arm64/boot/dts/rtsm_ve-aemv8a.dtb This isn't really up to date. There's separate gicv2/gicv3 blobs. And another one for PSCI (I think). > + > +=== Run Linux from UEFI on the Foundation FVP === > + > +1) Download the Foundation FVP: http://www.arm.com/fvp> Maybe change to https://developer.arm.com/products/system-design/fixed-virtual-platforms ? (This is where I get redirected these days.) + > +Decompress the AArch64 Foundation FVP > +
tar xf ~/FM000-KT-00035-r0p8-48rel5.tgz
> + Pretty sure we want to nuke everything from here: > +2) The current version of the Foundation FVP can only start an ELF image. To workaround this limitation, we use the 'uefi-aarch64-bootstrap' to start the UEFI image on this model. > + > +To build the 'uefi-aarch64-bootstrap': > +
pushd ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/
> +CROSS_COMPILE=/gcc-linaro-aarch64-linux-gnu-4.8-2013.06_linux/bin/aarch64-linux-gnu- make
> +popd
> + > +3) The Foundation FVP takes an option for an ELF file to be loaded as well as an option to load a binary data blob into RAM. > + > +Linux kernel (filename = 'Image') and the Device Tree Binary (filename = 'foundation-v8.dtb') are expected to be found in the directory where the model is started from. > + > +A file system example can be downloaded from Linaro: > +
wget http://releases.linaro.org/13.06/openembedded/aarch64/vexpress64-openembedded_minimal-armv8_20130623-376.img.gz
> +gunzip vexpress64-openembedded_minimal-armv8_20130623-376.img.gz
> + > +The file-system needs some minimal preparation: > +
mkdir tmp
> +fdisk -lu vexpress64-openembedded_minimal-armv8_20130623-376.img
> +sudo mount -o loop,offset=$((106496 * 512)) vexpress64-openembedded_minimal-armv8_20130623-376.img tmp/
> +cd tmp
> +sudo ln -s S35mountall.sh etc/rcS.d/S03mountall.sh
> +sudo sh -c "echo 'devtmpfs /dev devtmpfs mode=0755,nosuid 0 0' >> etc/fstab"
> +cd ..
> +sudo umount tmp/
> + > +The following command line can be used to run UEFI in the following manner: > +
$AARCH64_FOUNDATION_MODEL_ROOT/Foundation_v8 --cores=2 --image=ArmPlatformPkg/ArmVExpressPkg/Scripts/uefi-aarch64-bootstrap/uefi-bootstrap-el3-foundation.axf --nsdata=Build/ArmVExpress-RTSM-AEMv8Ax4-foundation/DEBUG_GCC47/FV/RTSM_VE_FOUNDATIONV8_EFI.fd@0xA0000000 --block-device=/vexpress64-openembedded_minimal-armv8_20130623-376.img
> + > +Note: Do not use a symbolic link to the file-system image. The model will not be able to read the image file. > + > +=== Run Linux from UEFI on the Base FVP === > + > +The Linux kernel (filename = 'Image') and the Device Tree Binary (filename = 'rtsm_ve-aemv8a.dtb') are expected to be found in the directory where the model is started from. > +
export PATH=ARM_BASE_AEMV8_ROOT:$PATH
> +export LD_LIBRARY_PATH=ARM_BASE_AEMV8_ROOT:$LD_LIBRARY_PATH
> +FVP_VE_AEMv8A -C motherboard.flashloader0.fname=Build/ArmVExpress-RTSM-AEMv8Ax4/DEBUG_GCC47/FV/RTSM_VE_AEMV8_EFI.fd
> + > + To here. Everything of the above that isn't incorrect these days is ... unhelpful. Not that it wouldn't be useful to have instructions ... just not these. Ideally, there would be some link here to how to bundle this with ARM trusted firmware and run a Linux installer, or a (modern) filesystem available from somewhere. But I'd take no information over the outdated content above. Finally, a more simple request: Could you add a link to this file from top-level Readme.md? Towards the very end, there is an ## ARM that could (probably?) become ## [ARM](Platforms/ARM/Readme.md) And you could then nuke the Juno/VExpress links currently located under that header. Regards, Leif