From: "mar.krzeminski" <mar.krzeminski@gmail.com>
To: Peter Crosthwaite <crosthwaitepeter@gmail.com>
Cc: Edgar Iglesias <edgar.iglesias@xilinx.com>,
Peter Maydell <peter.maydell@linaro.org>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] Loading image/elf to cpu that has different not system memory address space
Date: Thu, 24 Sep 2015 19:14:18 +0200 [thread overview]
Message-ID: <56042F6A.2030804@gmail.com> (raw)
In-Reply-To: <CAPokK=rxL9jAcuCjh6z4KSUZrWgeHVKRW55LOxtuYCA6mYjpOw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4338 bytes --]
W dniu 24.09.2015 o 05:07, Peter Crosthwaite pisze:
> On Wed, Sep 23, 2015 at 8:06 PM, Peter Crosthwaite
> <crosthwaitepeter@gmail.com> wrote:
>> On Wed, Sep 23, 2015 at 10:31 AM, mar.krzeminski
>> <mar.krzeminski@gmail.com> wrote:
>>> W dniu 23.09.2015 o 17:46, Peter Maydell pisze:
>>>
>>>> On 23 September 2015 at 08:17, Marcin Krzemiński
>>>> <mar.krzeminski@gmail.com> wrote:
>>>>> Hello,
>>>>>
>>>>> I am trying to write a model of embedded board that have corterx-m3 and
>>>>> cotex a9 processors.
>>>>> Because M3 see different memory at address 0x0 than A9 (m3 has small rom,
>>>>> a9
>>>>> has whole ram) I created different address space for m3 (thanks Peter
>>>>> Crosthwaite! for hints how to do this!).
>>>>> Now I stacked at loading "kernel" to start M3. If I use default address
>>>>> space for M3 I can load I run my elf filr (it can be image, but currently
>>>>> it
>>>>> is easiest for me with elf) all works fine.
>>>>> The problem is when I switch to my new (root MR is not from
>>>>> get_system_memory() call ) i got execution outside RAM exception.
>>>>> That is happening because there are only zeroes in memory pointed by my
>>>>> second address space.
>>>>> The question is how can I load image to this memory (it might be elf, but
>>>>> binary image also is fine)?
>>>>> I can not even find the code that loads data to memory in fist place.
>>>>> Could
>>>>> you point me where the loading is done in the code?
>>>> This is going to be complicated. I suspect you will need to add
>>>> some infrastructure for specifying per-CPU image loading (maybe
>>>> via CPU properties?), which we don't have at all right now.
>>>>
>>>> (Our current image loading code for arm lives in hw/arm/boot.c.)
>>>>
>>>> thanks
>>>> -- PMM
>>>>
>>> I couldn't find the place were actual data are put int M-, I don't know why
>>> I haven't seen
>>> rom_add_blob() in boot.c.
>>> At the machine init level I know all MRs, so I'll use
>>> memory_region_get_ram_ptr(),
>>> and put data there.
>>> If you have idea how to add this into framework, and someone beside me needs
>>> this,
>>> maybe I can implement that?
>>>
>> We definately need it. We need to be able to associate multiple
>> softwares with multiple CPUs.
>>
>> This is known to work, and could be what you are looking for:
>>
>> https://github.com/Xilinx/qemu/blob/pub/2015.2.plnx/hw/misc/blob-loader.c
>>
>> You pass -device loader,cpu=#,...
>>
>> then various other fields, all on the command line (depending if your
>> loading elfs or raw blobs). It is badly named, it is more than just a
>> blob loader now. It works best when you don't use -kernel (you may
>> need to hack your machine model to disable any checks that forces
>> -kernel).
>>
>> The key feature of that device is it loads from the argument CPUs
>> perspective, so if your M3 CPU AR is correctly set it will load via it
>> when you use -device loader,cpu=1,foo.elf.
>>
> Other key feature, is the command line options is repeatable for
> multiple blobs and multiple CPUs.
>
> Regards,
> Peter
>
>> The implementation is slightly bogus, it is using a global AS pointer
>> loader_as to pass the cpu AS to loader infrastucture. git grep that
>> tree (2015.2.plnx branch) for "loader_as" to see the needed changes to
>> core loader infrastructure and cherry pick the device and it should be
>> close to working.
>>
>> HTH
>>
>> Regards,
>> Peter
>>
>>> Thanks,
>>> Marcin
Great functionality, I'll probably integrate it, but for fast checking
if all works I'll use also
global pointer ( generally it is used already in load.c).
As I looked into code it seem that it is possible to pass CPU state down
to loading functions,
so those can use AS connected with CPU. If someone is interested in that
patch I can try to prepare it...
Today I stacked on other interesting think - and I do not want to spam
this list - it is hack in cortex-m3
from armv7m.
/ /* Hack to map an additional page of ram at the top of the address//
// space. This stops qemu complaining about executing code
outside RAM//
// when returning from an exception. *///
// memory_region_init_ram(hack, NULL, "armv7m.hack", 0x1000,
&error_abort);//
// vmstate_register_ram_global(hack);//
// memory_region_add_subregion(system_memory, 0xfffff000, hack);
/Why it is there, seem to be old...
Thanks,
Marcin
[-- Attachment #2: Type: text/html, Size: 5669 bytes --]
next prev parent reply other threads:[~2015-09-24 17:14 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-23 15:17 [Qemu-devel] Loading image/elf to cpu that has different not system memory address space Marcin Krzemiński
2015-09-23 15:46 ` Peter Maydell
2015-09-23 17:31 ` mar.krzeminski
2015-09-24 3:06 ` Peter Crosthwaite
2015-09-24 3:07 ` Peter Crosthwaite
2015-09-24 17:14 ` mar.krzeminski [this message]
2015-09-24 18:38 ` Peter Crosthwaite
2015-09-24 18:58 ` mar.krzeminski
2015-09-29 22:40 ` Alistair Francis
2015-09-29 22:59 ` Peter Maydell
2015-09-30 5:18 ` Marcin Krzemiński
2015-09-30 10:44 ` Peter Maydell
2015-09-30 12:15 ` Marcin Krzemiński
2015-09-30 13:26 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56042F6A.2030804@gmail.com \
--to=mar.krzeminski@gmail.com \
--cc=crosthwaite.peter@gmail.com \
--cc=crosthwaitepeter@gmail.com \
--cc=edgar.iglesias@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).