[yocto] odd(?) behaviour with qemu arm image and "runqemu-extract-sdk"

Scott Garman scott.a.garman at intel.com
Tue Jan 1 10:50:00 PST 2013


On 12/29/2012 09:33 AM, Robert P. J. Day wrote:
>
>    first time perusing these sections in the yocto docs, kind of
> puzzling result so i'm prepared to believe i did something silly.
> reading:
>
> http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#workflow-using-stand-alone-cross-development-toolchains
>
> "Workflow Using Stand-alone Cross-development Toolchains", and i
> already had an OE qemuarm core-image-minimal built that i can run
> just fine with:
>
> $ runqemu qemuarm
>
> so i was reading that section and followed the link over to the ADT
> manual:
>
> http://www.yoctoproject.org/docs/1.4/adt-manual/adt-manual.html#extracting-the-root-filesystem
>
> where it talked about "Extracting the Root Filesystem", so i figured,
> what the heck, i'll give that a shot, so i ran "runqemu-extract-sdk"
> on the very rootfs tarball that had been created by my build and
> extracted it under ~/rootfs, then without reading any further, tried
> this variation of runqemu for the first time:
>
> $ runqemu qemuarm ~/rootfs
> Assuming /home/rpjday/rootfs is an nfs rootfs
> Continuing with the following parameters:
> KERNEL:
> [/home/rpjday/oe/builds/oe/qemuarm/tmp-eglibc/deploy/images/zImage-qemuarm.bin]
> ROOTFS: [/home/rpjday/rootfs]
> FSTYPE: [nfs]
> Setting up tap interface under sudo
> [sudo] password for rpjday:
> Acquiring lockfile for tap0...
> runqemu-export-rootfs restart /home/rpjday/rootfs
> Error: Unable to find rpc.mountd binary in
> /home/rpjday/oe/builds/oe/qemuarm/tmp-eglibc/sysroots/x86_64-linux/usr/sbin/
> Have you run 'bitbake meta-ide-support'?
> Set 'tap0' nonpersistent
> Releasing lockfile of preconfigured tap device 'tap0'
> $
>
>    so ... how many things did i do wrong?

Hi Robert,

When you built your original image, it generated a filesystem in a file 
(in this case, an ext3 one) which the runqemu script used to boot with.

But booting an nfs-based image with runqemu requires our userspace NFS 
server. This is a new requirement that requires you to build the 
meta-ide-support target.

So in this case, what you're seeing is exactly what is intended - the 
runqemu script tells you what you need to do to proceed. You did nothing 
wrong.

There was a time (a long time ago) when meta-ide-support was built 
anytime qemu was built, but we ended up splitting it out since it added 
an unnecessary build dependency on meta-ide-support when most users 
never needed to boot an NFS image.

   some random thoughts on this
> before i dig back into the docs and code:
>
> 1) why the name "runqemu-extract-sdk"?  it seems that the point of
> that script is to just untar a root filesystem.  i don't see anything
> being "extracted" per se.

I suppose runqemu-extract-rootfs might be a better name for it. When the 
script was first developed, the main use case for it was extracting the 
-sdk images so they could be used with our application developer tools.

The key thing this script does is extract the rootfs tarball under 
pseudo, which creates a virtual mapping of file ownership that is 
necessary for the rootfs to be usable but not require root access from 
the end user's perspective.

> 2) i notice that the "dev" directory created by that script contains
> only regular files instead of actual special device files.  but if i
> use "sudo" to just untar exactly the same tarball, i get real device
> files.  is that the expected behaviour of that script?

Yes - since the invokation of pseudo from the runqemu-extract-rootfs 
script creates a pseudo database that will later be used when runqemu 
boots the rootfs to read the files.

> 3) what should i have done earlier to have the apparently necessary
> usr/sbin/rpc.mountd in my sysroot?

Just what the script said: bitbake meta-ide-support


   it seems odd that i can run my
> built qemu image just fine if i run it normally, but if i
> runqemu-extract-sdk to unload a rootfs, suddenly my sysroot is missing
> that utility.

By now I hope it should be clear that the rpc.mountd was not needed to 
boot a .ext3 image. It's only needed for NFS-based booting. So the file 
didn't suddenly disappear when you went to boot the NFS-based rootfs. It 
was just needed for the first time then.

>    and one more thing.  from that first link in the dev manual, there's
> that note that takes you over to the ADT manual.  and it's entirely
> possible that there some critical info *before* the section
> "Extracting the Root Filesystem" but given how one got there (by
> following the link), the reader might miss it.

I'll have to leave this one to our app dev folks and ScottR if they 
agree something should be changed.

Scott

-- 
Scott Garman
Embedded Linux Engineer - Yocto Project
Intel Open Source Technology Center



More information about the yocto mailing list