From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-arm@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [Qemu-arm] QEMU user mode for cortex M
Date: Sat, 16 Mar 2019 12:01:43 +0000 [thread overview]
Message-ID: <87sgvnt4d4.fsf@zen.linaroharston> (raw)
In-Reply-To: <CABgYhWdu-H6zfWjwwtJbFK6TJa89tqERtX=djYpFobWjir_C6A@mail.gmail.com>
Massimiliano Cialdi <cialdi@gmail.com> writes:
> I have tried to follow some websites, such as, for example,
> https://gnu-mcu-eclipse.github.io/qemu/options/,
> http://sushihangover.github.io/arm-cortex-m-semihosting-with-qemu/ or
> https://balau82.wordpress.com/2010/11/04/qemu-arm-semihosting/ without
> success
>
> I have my exetutable compiled with
> /opt/gcc-arm-none-eabi-8-2018-q4-major/bin/arm-none-eabi-gcc -std=gnu11
> -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -fno-common
> -specs=rdimon.specs -Wl,--cref,-Map=main.map main.c -o main.elf
I thought you wanted to target a cortex-m4?
Have a look at how test-armv6m-undef is built. It is the simplest
dumbest M profile image you can build with a kernel that maps to 0 and a
simple reset vector at the start of the vector table:
>
> then I try to execute qemu:
> ~/Downloads/qemu/qemu-3.1.0/arm-softmmu/qemu-system-arm -d
> unimp,guest_errors -machine virt -monitor null -serial null -semihosting
> -nographic -semihosting-config enable=on,target=native -kernel
> main.elf
I don't know what the virt machine defaults to for CPU but I'm fairly
sure it's not an m-profile CPU.
> write access to unsupported AArch32 64 bit system register cp:12 opc1: 15
> crm:8 (non-secure)
>
>
> and nothing happend. Where am I wrong? I'm wrong at the compilation stage,
> at the execution stage or both? Is there something wrong with the command
> line parameters? Which one? How do I force a cortex-m4? How can I force the
> Cpu without having to choose any machine?
It's hard to say without seeing what your test is doing. However I can force
a cortex-m4 on a microbit and run the following ok:
./qemu-system-arm -monitor none -display none \
-chardev file,path=test-armv6m-undef.out,id=output \
-semihosting -M microbit \
-cpu cortex-m4 \
-kernel tests/test-armv6m-undef
-d in_asm,cpu,nochain
>
> best regards
> Max
>
> On Fri, Mar 15, 2019 at 11:05 AM Peter Maydell <peter.maydell@linaro.org>
> wrote:
>
>> On Thu, 14 Mar 2019 at 22:30, Massimiliano Cialdi <cialdi@gmail.com>
>> wrote:
>> >
>> > hello,
>> > I would like to try some algorithms on cortex M (especially cortex M4).
>> I don't need to emulate the whole machine, I just need the user mode.
>> > To test the feasibility, I wrote the trivial "hello world".
>> >
>> > I can compile it with arm-none-eabi-gcc, but the newlib associated with
>> it does not implement any syscall.
>> > So I tried, on ubuntu, with the cross compiler arm-linux-gnueabihf-gcc
>> and its libc6, but the latter is only distributed for cortex A.
>> >
>> > What do you suggest? Should I recompile the libc6 for cortex M (or do I
>> find it pre-compiled)? Should I implement (and how?) syscalls on newlib?
>> >
>> > In summary, I would need a step-by-step guide to running Cortex M code
>> on QEMU arm user mode.
>>
>> User-mode in Cortex-M is a weird thing to do, because what QEMU
>> gives you is the A-profile Linux syscalls. It's a hybrid that
>> we only continue to provide because it happens to be used and
>> useful to the gcc folks doing compiler testing. I would
>> recommend against using it, personally.
>>
>> System emulation mode will get you something that actually
>> works the way the real hardware does. You can then do
>> output either via the UART or via semihosting (you need to
>> enable the latter on the commandline).
>>
>> thanks
>> -- PMM
>>
--
Alex Bennée
next prev parent reply other threads:[~2019-03-16 12:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-14 21:46 [Qemu-arm] QEMU user mode for cortex M Massimiliano Cialdi
2019-03-15 10:04 ` Peter Maydell
2019-03-15 10:56 ` Alex Bennée
2019-03-15 22:12 ` Massimiliano Cialdi
2019-03-16 12:01 ` Alex Bennée [this message]
2019-03-16 14:06 ` Peter Maydell
2019-03-16 20:34 ` Massimiliano Cialdi
2019-03-17 11:10 ` Massimiliano Cialdi
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=87sgvnt4d4.fsf@zen.linaroharston \
--to=alex.bennee@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.