[PATCH] docs/system: document an example vexpress-a15 invocation

Alex Bennée posted 1 patch 3 years, 3 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20210128185300.2875-1-alex.bennee@linaro.org
docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
[PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Alex Bennée 3 years, 3 months ago
The wiki and the web are curiously absent of the right runes to boot a
vexpress model so I had to work from first principles to work it out.
Use the more modern -drive notation so alternative backends can be
used (unlike the hardwired -sd mode).

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Anders Roxell <anders.roxell@linaro.org>
---
 docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
index 7f1bcbef07..30b1823b95 100644
--- a/docs/system/arm/vexpress.rst
+++ b/docs/system/arm/vexpress.rst
@@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
   ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
   provided on the command line then QEMU will edit it to include
   suitable entries describing these transports for the guest.
+
+Booting a Linux kernel
+----------------------
+
+Building a current Linux kernel with ``multi_v7_defconfig`` should be
+enough to get something running.
+
+.. code-block:: bash
+
+  $ export ARCH=arm
+  $ export CROSS_COMPILE=arm-linux-gnueabihf-
+  $ make multi_v7_defconfig
+  $ make
+
+By default you will want to boot your rootfs of the sdcard interface.
+Your rootfs will need to be padded to the right size. With a suitable
+DTB you could also add devices to the virtio-mmio bus.
+
+.. code-block:: bash
+
+  $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \
+      -machine type=vexpress-a15 -serial mon:stdio \
+      -drive if=sd,driver=file,filename=armel-rootfs.ext4 \
+      -kernel zImage  \
+      -dtb vexpress-v2p-ca15-tc1.dtb \
+      -append "console=ttyAMA0 root=/dev/mmcblk0 ro"
-- 
2.20.1


Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Philippe Mathieu-Daudé 3 years, 2 months ago
Cc'ing avocado-devel for test idea.

On 1/28/21 7:53 PM, Alex Bennée wrote:
> The wiki and the web are curiously absent of the right runes to boot a
> vexpress model so I had to work from first principles to work it out.
> Use the more modern -drive notation so alternative backends can be
> used (unlike the hardwired -sd mode).
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Anders Roxell <anders.roxell@linaro.org>
> ---
>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
> index 7f1bcbef07..30b1823b95 100644
> --- a/docs/system/arm/vexpress.rst
> +++ b/docs/system/arm/vexpress.rst
> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
>    provided on the command line then QEMU will edit it to include
>    suitable entries describing these transports for the guest.
> +
> +Booting a Linux kernel
> +----------------------
> +
> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
> +enough to get something running.
> +
> +.. code-block:: bash
> +
> +  $ export ARCH=arm
> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
> +  $ make multi_v7_defconfig
> +  $ make
> +
> +By default you will want to boot your rootfs of the sdcard interface.
> +Your rootfs will need to be padded to the right size. With a suitable
> +DTB you could also add devices to the virtio-mmio bus.
> +
> +.. code-block:: bash
> +
> +  $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \
> +      -machine type=vexpress-a15 -serial mon:stdio \
> +      -drive if=sd,driver=file,filename=armel-rootfs.ext4 \
> +      -kernel zImage  \
> +      -dtb vexpress-v2p-ca15-tc1.dtb \
> +      -append "console=ttyAMA0 root=/dev/mmcblk0 ro"
> 


Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Peter Maydell 3 years, 2 months ago
On Thu, 28 Jan 2021 at 18:53, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> The wiki and the web are curiously absent of the right runes to boot a
> vexpress model so I had to work from first principles to work it out.
> Use the more modern -drive notation so alternative backends can be
> used (unlike the hardwired -sd mode).
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Anders Roxell <anders.roxell@linaro.org>
> ---
>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
>
> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
> index 7f1bcbef07..30b1823b95 100644
> --- a/docs/system/arm/vexpress.rst
> +++ b/docs/system/arm/vexpress.rst
> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
>    provided on the command line then QEMU will edit it to include
>    suitable entries describing these transports for the guest.
> +
> +Booting a Linux kernel
> +----------------------
> +
> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
> +enough to get something running.
> +
> +.. code-block:: bash
> +
> +  $ export ARCH=arm
> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
> +  $ make multi_v7_defconfig
> +  $ make

We probably shouldn't be recommending in-tree kernel builds, or
polluting the user's environment with random variables. Try:

$ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
$ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

> +By default you will want to boot your rootfs of the sdcard interface.

"off"

> +Your rootfs will need to be padded to the right size. With a suitable
> +DTB you could also add devices to the virtio-mmio bus.
> +
> +.. code-block:: bash
> +
> +  $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \
> +      -machine type=vexpress-a15 -serial mon:stdio \
> +      -drive if=sd,driver=file,filename=armel-rootfs.ext4 \
> +      -kernel zImage  \
> +      -dtb vexpress-v2p-ca15-tc1.dtb \
> +      -append "console=ttyAMA0 root=/dev/mmcblk0 ro"

thanks
-- PMM

Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Alex Bennée 3 years, 2 months ago
Peter Maydell <peter.maydell@linaro.org> writes:

> On Thu, 28 Jan 2021 at 18:53, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> The wiki and the web are curiously absent of the right runes to boot a
>> vexpress model so I had to work from first principles to work it out.
>> Use the more modern -drive notation so alternative backends can be
>> used (unlike the hardwired -sd mode).
>>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> Cc: Anders Roxell <anders.roxell@linaro.org>
>> ---
>>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
>>  1 file changed, 26 insertions(+)
>>
>> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
>> index 7f1bcbef07..30b1823b95 100644
>> --- a/docs/system/arm/vexpress.rst
>> +++ b/docs/system/arm/vexpress.rst
>> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
>>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
>>    provided on the command line then QEMU will edit it to include
>>    suitable entries describing these transports for the guest.
>> +
>> +Booting a Linux kernel
>> +----------------------
>> +
>> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
>> +enough to get something running.
>> +
>> +.. code-block:: bash
>> +
>> +  $ export ARCH=arm
>> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
>> +  $ make multi_v7_defconfig
>> +  $ make
>
> We probably shouldn't be recommending in-tree kernel builds, or
> polluting the user's environment with random variables. Try:
>
> $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
> $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>
>> +By default you will want to boot your rootfs of the sdcard interface.
>
> "off"
>
>> +Your rootfs will need to be padded to the right size. With a suitable
>> +DTB you could also add devices to the virtio-mmio bus.
>> +
>> +.. code-block:: bash
>> +
>> +  $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \
>> +      -machine type=vexpress-a15 -serial mon:stdio \
>> +      -drive if=sd,driver=file,filename=armel-rootfs.ext4 \
>> +      -kernel zImage  \
>> +      -dtb vexpress-v2p-ca15-tc1.dtb \
>> +      -append "console=ttyAMA0 root=/dev/mmcblk0 ro"
>
> thanks
> -- PMM


Booting a Linux kernel
----------------------

Building a current Linux kernel with ``multi_v7_defconfig`` should be
enough to get something running. Nowadays an out-of-tree build is
recommended (and also useful if you build a lot of different targets).
$SRC points at root of the linux source tree.

.. code-block:: bash

  $ mkdir build; cd build
  $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
  $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

By default you will want to boot your rootfs off the sdcard interface.
Your rootfs will need to be padded to the right size. With a suitable
DTB you could also add devices to the virtio-mmio bus.

.. code-block:: bash

  $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \
      -machine type=vexpress-a15 -serial mon:stdio \
      -drive if=sd,driver=file,filename=armel-rootfs.ext4 \
      -kernel zImage  \
      -dtb vexpress-v2p-ca15-tc1.dtb \
      -append "console=ttyAMA0 root=/dev/mmcblk0 ro"

-- 
Alex Bennée

Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Peter Maydell 3 years, 2 months ago
On Mon, 1 Feb 2021 at 20:09, Alex Bennée <alex.bennee@linaro.org> wrote:
>
>
> Peter Maydell <peter.maydell@linaro.org> writes:
>
> > On Thu, 28 Jan 2021 at 18:53, Alex Bennée <alex.bennee@linaro.org> wrote:
> >>
> >> The wiki and the web are curiously absent of the right runes to boot a
> >> vexpress model so I had to work from first principles to work it out.
> >> Use the more modern -drive notation so alternative backends can be
> >> used (unlike the hardwired -sd mode).
> >>
> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> >> Cc: Anders Roxell <anders.roxell@linaro.org>
> >> ---
> >>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
> >>  1 file changed, 26 insertions(+)
> >>
> >> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
> >> index 7f1bcbef07..30b1823b95 100644
> >> --- a/docs/system/arm/vexpress.rst
> >> +++ b/docs/system/arm/vexpress.rst
> >> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
> >>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
> >>    provided on the command line then QEMU will edit it to include
> >>    suitable entries describing these transports for the guest.
> >> +
> >> +Booting a Linux kernel
> >> +----------------------
> >> +
> >> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
> >> +enough to get something running.
> >> +
> >> +.. code-block:: bash
> >> +
> >> +  $ export ARCH=arm
> >> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
> >> +  $ make multi_v7_defconfig
> >> +  $ make
> >
> > We probably shouldn't be recommending in-tree kernel builds, or
> > polluting the user's environment with random variables. Try:
> >
> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

> Building a current Linux kernel with ``multi_v7_defconfig`` should be
> enough to get something running. Nowadays an out-of-tree build is
> recommended (and also useful if you build a lot of different targets).
> $SRC points at root of the linux source tree.
>
> .. code-block:: bash
>
>   $ mkdir build; cd build
>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

That works, but do you really commonly cd into the build directory?
I usually sit in the source tree...

thanks
-- PMM

Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Alex Bennée 3 years, 2 months ago
Peter Maydell <peter.maydell@linaro.org> writes:

> On Mon, 1 Feb 2021 at 20:09, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>>
>> Peter Maydell <peter.maydell@linaro.org> writes:
>>
>> > On Thu, 28 Jan 2021 at 18:53, Alex Bennée <alex.bennee@linaro.org> wrote:
>> >>
>> >> The wiki and the web are curiously absent of the right runes to boot a
>> >> vexpress model so I had to work from first principles to work it out.
>> >> Use the more modern -drive notation so alternative backends can be
>> >> used (unlike the hardwired -sd mode).
>> >>
>> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> >> Cc: Anders Roxell <anders.roxell@linaro.org>
>> >> ---
>> >>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
>> >>  1 file changed, 26 insertions(+)
>> >>
>> >> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
>> >> index 7f1bcbef07..30b1823b95 100644
>> >> --- a/docs/system/arm/vexpress.rst
>> >> +++ b/docs/system/arm/vexpress.rst
>> >> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
>> >>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
>> >>    provided on the command line then QEMU will edit it to include
>> >>    suitable entries describing these transports for the guest.
>> >> +
>> >> +Booting a Linux kernel
>> >> +----------------------
>> >> +
>> >> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
>> >> +enough to get something running.
>> >> +
>> >> +.. code-block:: bash
>> >> +
>> >> +  $ export ARCH=arm
>> >> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
>> >> +  $ make multi_v7_defconfig
>> >> +  $ make
>> >
>> > We probably shouldn't be recommending in-tree kernel builds, or
>> > polluting the user's environment with random variables. Try:
>> >
>> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
>> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>
>> Building a current Linux kernel with ``multi_v7_defconfig`` should be
>> enough to get something running. Nowadays an out-of-tree build is
>> recommended (and also useful if you build a lot of different targets).
>> $SRC points at root of the linux source tree.
>>
>> .. code-block:: bash
>>
>>   $ mkdir build; cd build
>>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
>>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>
> That works, but do you really commonly cd into the build directory?
> I usually sit in the source tree...

Lets just be explicit and teach the user to fish:

Building a current Linux kernel with ``multi_v7_defconfig`` should be
enough to get something running. Nowadays an out-of-tree build is
recommended (and also useful if you build a lot of different targets).
In the following example $BLD points to the build directory and $SRC
points to the root of the Linux source tree. You can drop $SRC if you
are running from there.

.. code-block:: bash

  $ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
  $ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

>
> thanks
> -- PMM


-- 
Alex Bennée

Re: [PATCH] docs/system: document an example vexpress-a15 invocation
Posted by Alex Bennée 3 years, 2 months ago
Peter Maydell <peter.maydell@linaro.org> writes:

> On Mon, 1 Feb 2021 at 20:09, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>>
>> Peter Maydell <peter.maydell@linaro.org> writes:
>>
>> > On Thu, 28 Jan 2021 at 18:53, Alex Bennée <alex.bennee@linaro.org> wrote:
>> >>
>> >> The wiki and the web are curiously absent of the right runes to boot a
>> >> vexpress model so I had to work from first principles to work it out.
>> >> Use the more modern -drive notation so alternative backends can be
>> >> used (unlike the hardwired -sd mode).
>> >>
>> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>> >> Cc: Anders Roxell <anders.roxell@linaro.org>
>> >> ---
>> >>  docs/system/arm/vexpress.rst | 26 ++++++++++++++++++++++++++
>> >>  1 file changed, 26 insertions(+)
>> >>
>> >> diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
>> >> index 7f1bcbef07..30b1823b95 100644
>> >> --- a/docs/system/arm/vexpress.rst
>> >> +++ b/docs/system/arm/vexpress.rst
>> >> @@ -58,3 +58,29 @@ Other differences between the hardware and the QEMU model:
>> >>    ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
>> >>    provided on the command line then QEMU will edit it to include
>> >>    suitable entries describing these transports for the guest.
>> >> +
>> >> +Booting a Linux kernel
>> >> +----------------------
>> >> +
>> >> +Building a current Linux kernel with ``multi_v7_defconfig`` should be
>> >> +enough to get something running.
>> >> +
>> >> +.. code-block:: bash
>> >> +
>> >> +  $ export ARCH=arm
>> >> +  $ export CROSS_COMPILE=arm-linux-gnueabihf-
>> >> +  $ make multi_v7_defconfig
>> >> +  $ make
>> >
>> > We probably shouldn't be recommending in-tree kernel builds, or
>> > polluting the user's environment with random variables. Try:
>> >
>> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
>> > $ make O=builddir ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>
>> Building a current Linux kernel with ``multi_v7_defconfig`` should be
>> enough to get something running. Nowadays an out-of-tree build is
>> recommended (and also useful if you build a lot of different targets).
>> $SRC points at root of the linux source tree.
>>
>> .. code-block:: bash
>>
>>   $ mkdir build; cd build
>>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig
>>   $ make O=$(pwd) -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>
> That works, but do you really commonly cd into the build directory?
> I usually sit in the source tree...

I have tmux panes, lots of lots of tmux panes. It's more common to live
in the build directories for QEMU because I have to run the binaries I
build. For the kernels I usually have one pane in the tip of source tree
and a bunch of others for build configurations I'm actively messing
about with and rebuilding.

>
> thanks
> -- PMM


-- 
Alex Bennée