Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 May 2023 07:10:15 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Mario Marietto <marietto2008@gmail.com>
Cc:        Thomas David Rivers <rivers@dignus.com>, freebsd-arm@freebsd.org
Subject:   Re: some QEMU success in running armv7
Message-ID:  <CANCZdfrYdgZyov4QAtvz8UkxPCiSJNOJyyuOuuGZLHAuGCJW%2BQ@mail.gmail.com>
In-Reply-To: <CA%2B1FSigvF8V-8=iUHdaM-dmRCxXrms4FRfQDqAWFTsb4iEB--w@mail.gmail.com>
References:  <202305190249.34J2n3hg029621@office.dignus.com> <CA%2B1FSigvF8V-8=iUHdaM-dmRCxXrms4FRfQDqAWFTsb4iEB--w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000069e3005fc0ba550
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

You'd never use kvm for armv7 when running on amd64 anyway... You can't run
the code directly, but have to use the emulation stream.

Warner

On Fri, May 19, 2023 at 1:45=E2=80=AFAM Mario Marietto <marietto2008@gmail.=
com>
wrote:

> Nice review. infortunately kvm does not work ? and a qemu vm without kvm
> is very slow and useless.
>
> Il ven 19 mag 2023, 04:49 Thomas David Rivers <rivers@dignus.com> ha
> scritto:
>
>>
>> Just f.y.i. - here's the steps I was able to deduce today
>> to get FreeBSD armv7 running under qemu... just in case
>> someone goes looking for this... (I was doing this on a
>> FreeBSD 12.3-RELEASE x86_64 system.)
>>
>>
>> 1.   Retrieve the armv7 image from:
>>         fetch
>> https://download.freebsd.org/releases/arm/armv7/ISO-IMAGES/13.2/FreeBSD-=
13.2-RELEASE-arm-armv7-GENERICSD.img.xz
>>      and unzip it.   This is an actual hard-drive image of a working
>>      system.
>>
>> 2.  Assuming the qemu port has been installed - this command
>>     starts that system
>>
>>     qemu-system-arm -M virt -m 512m -nographic \
>>        -bios edk2-arm-code.fd \
>>        -hda FreeBSD-13.2-RELEASE-arm-armv7-GENERICSD.img
>>
>>     the existing terminal will be the console.  There is no
>>     networking.
>>
>>     There root user's password is 'root'.
>>
>> Unfortunately this doesn't provide networking in the guest.  This
>> compilation of QEMU also doesn't support the "-netdev user" mode
>> of networking so I can't take advantage of that.  (The FreeBSD 12.3
>> host is using QEMU emulator version 7.2.0 - from just the pkg
>> install.)  However, I found that using this option on qemu:
>>
>>     -nic tap,ifname=3Dtap7,script=3Dno,downscript=3Dno
>>
>> got it to use the tap interface on the host to emulate the virtio
>> device to the guest.
>>
>> I also found this discussion regarding alignment issues in the
>> virtio driver in armv7:
>>
>>
>> https://forums.freebsd.org/threads/kernel-panic-on-armv7-with-qemu.89016=
/#post-610281
>>
>> that resulted in PR 271288.   Apparently it's because of newer versions
>> of QEMU doing a better job at reporting unaligned memory accesses in the
>> guest for the armv7 "ldm" instruction.
>>
>> When I use the tap interface, I did get the exact panic mentioned
>> in the forum and the PR.
>>
>> I did find that specifying the rtl8139 device worked around the panic
>> with the QEMU option:
>>
>>   -nic tap,ifname=3Dtap7,script=3Dno,downscript=3Dno,model=3Drtl8139
>>
>> by the way - tap7 happens to be a tap device I'd already configured
>> on the host FreeBSD 12.3 system - if you're doing this yourself,
>> it will likely need to be a different tap device, see this
>> write-up for info about how to configure a tap + bridge on your
>> FreeBSD host:
>>
>> http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.ht=
ml
>>
>> So - it seems a newer version of the armv7 kernel with the patch
>> applied will fix the virtio driver problem, until then, model=3Drtl8139
>> works around it and I have networking and everything!
>>
>>         - Dave R. -
>>
>> --
>> rivers@dignus.com                        Work: (919) 676-0847
>> Get your mainframe programming tools at http://www.dignus.com
>>
>>

--000000000000069e3005fc0ba550
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>You&#39;d never use kvm for armv7 when running on amd=
64 anyway... You can&#39;t run</div><div>the code directly, but have to use=
 the emulation stream.</div><div><br></div><div>Warner</div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, May 19, 2023=
 at 1:45=E2=80=AFAM Mario Marietto &lt;<a href=3D"mailto:marietto2008@gmail=
.com">marietto2008@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204=
,204,204);padding-left:1ex"><div dir=3D"auto">Nice review. infortunately kv=
m does not work ? and a qemu vm without kvm is very slow and useless.</div>=
<br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">Il ven=
 19 mag 2023, 04:49 Thomas David Rivers &lt;<a href=3D"mailto:rivers@dignus=
.com" target=3D"_blank">rivers@dignus.com</a>&gt; ha scritto:<br></div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex"><br>
Just f.y.i. - here&#39;s the steps I was able to deduce today<br>
to get FreeBSD armv7 running under qemu... just in case<br>
someone goes looking for this... (I was doing this on a<br>
FreeBSD 12.3-RELEASE x86_64 system.)<br>
<br>
<br>
1.=C2=A0 =C2=A0Retrieve the armv7 image from:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 fetch <a href=3D"https://download.freebsd.org/r=
eleases/arm/armv7/ISO-IMAGES/13.2/FreeBSD-13.2-RELEASE-arm-armv7-GENERICSD.=
img.xz" rel=3D"noreferrer noreferrer" target=3D"_blank">https://download.fr=
eebsd.org/releases/arm/armv7/ISO-IMAGES/13.2/FreeBSD-13.2-RELEASE-arm-armv7=
-GENERICSD.img.xz</a><br>
=C2=A0 =C2=A0 =C2=A0and unzip it.=C2=A0 =C2=A0This is an actual hard-drive =
image of a working<br>
=C2=A0 =C2=A0 =C2=A0system.<br>
<br>
2.=C2=A0 Assuming the qemu port has been installed - this command<br>
=C2=A0 =C2=A0 starts that system<br>
<br>
=C2=A0 =C2=A0 qemu-system-arm -M virt -m 512m -nographic \<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0-bios edk2-arm-code.fd \<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0-hda FreeBSD-13.2-RELEASE-arm-armv7-GENERICSD.im=
g<br>
<br>
=C2=A0 =C2=A0 the existing terminal will be the console.=C2=A0 There is no<=
br>
=C2=A0 =C2=A0 networking.<br>
<br>
=C2=A0 =C2=A0 There root user&#39;s password is &#39;root&#39;.<br>
<br>
Unfortunately this doesn&#39;t provide networking in the guest.=C2=A0 This<=
br>
compilation of QEMU also doesn&#39;t support the &quot;-netdev user&quot; m=
ode<br>
of networking so I can&#39;t take advantage of that.=C2=A0 (The FreeBSD 12.=
3<br>
host is using QEMU emulator version 7.2.0 - from just the pkg <br>
install.)=C2=A0 However, I found that using this option on qemu:<br>
<br>
=C2=A0 =C2=A0 -nic tap,ifname=3Dtap7,script=3Dno,downscript=3Dno<br>
<br>
got it to use the tap interface on the host to emulate the virtio<br>
device to the guest.<br>
<br>
I also found this discussion regarding alignment issues in the<br>
virtio driver in armv7:<br>
<br>
=C2=A0 <a href=3D"https://forums.freebsd.org/threads/kernel-panic-on-armv7-=
with-qemu.89016/#post-610281" rel=3D"noreferrer noreferrer" target=3D"_blan=
k">https://forums.freebsd.org/threads/kernel-panic-on-armv7-with-qemu.89016=
/#post-610281</a><br>
<br>
that resulted in PR 271288.=C2=A0 =C2=A0Apparently it&#39;s because of newe=
r versions<br>
of QEMU doing a better job at reporting unaligned memory accesses in the <b=
r>
guest for the armv7 &quot;ldm&quot; instruction.<br>
<br>
When I use the tap interface, I did get the exact panic mentioned<br>
in the forum and the PR.<br>
<br>
I did find that specifying the rtl8139 device worked around the panic<br>
with the QEMU option:<br>
<br>
=C2=A0 -nic tap,ifname=3Dtap7,script=3Dno,downscript=3Dno,model=3Drtl8139<b=
r>
<br>
by the way - tap7 happens to be a tap device I&#39;d already configured<br>
on the host FreeBSD 12.3 system - if you&#39;re doing this yourself,<br>
it will likely need to be a different tap device, see this<br>
write-up for info about how to configure a tap + bridge on your<br>
FreeBSD host:<br>
=C2=A0 =C2=A0<a href=3D"http://bsdwiki.reedmedia.net/wiki/networking_qemu_v=
irtual_bsd_systems.html" rel=3D"noreferrer noreferrer" target=3D"_blank">ht=
tp://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html</a=
><br>
<br>
So - it seems a newer version of the armv7 kernel with the patch<br>
applied will fix the virtio driver problem, until then, model=3Drtl8139<br>
works around it and I have networking and everything!<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 - Dave R. -<br>
<br>
--<br>
<a href=3D"mailto:rivers@dignus.com" rel=3D"noreferrer" target=3D"_blank">r=
ivers@dignus.com</a>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Work: (919) 676-0847<br>
Get your mainframe programming tools at <a href=3D"http://www.dignus.com" r=
el=3D"noreferrer noreferrer" target=3D"_blank">http://www.dignus.com</a><br=
>
<br>
</blockquote></div>
</blockquote></div></div>

--000000000000069e3005fc0ba550--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrYdgZyov4QAtvz8UkxPCiSJNOJyyuOuuGZLHAuGCJW%2BQ>