qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-arm] QEMU user mode for cortex M


From: Alex Bennée
Subject: Re: [Qemu-arm] QEMU user mode for cortex M
Date: Sat, 16 Mar 2019 12:01:43 +0000
User-agent: mu4e 1.1.0; emacs 26.1

Massimiliano Cialdi <address@hidden> 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 <address@hidden>
> wrote:
>
>> On Thu, 14 Mar 2019 at 22:30, Massimiliano Cialdi <address@hidden>
>> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]