Discussion:
[uClinux-dev] Cortex-M7: Enable FPU and Cache Support (STM32F7xx)
A. Brand
2017-01-01 18:36:42 UTC
Permalink
Hi together,

normally i work bare metal on Cortex-M devices. But with devices such as
the Cortex-M7 with more than 200MHz, i think of using uclinux for my coming
IoT applications.

How is the actual status of the Cortex-M7 Support? My first Target will be
the STM32F769 Discovery board.

As i read the discussions according FPU support for arm v7m devices, i can
not use the gnu arm gcc toolchain by arm hosted at:
https://launchpad.net/gcc-arm-embedded
because this toolchain was linked against newlib, am i right? I need a
least one linked against uClib?

So to get a toolchain supporting a arm v7m with fpv5-sp-d16 i need to add a
configuration for the cortex-m7 to buildroot. According to this thread:
http://buildroot-busybox.2317881.n4.nabble.com/PATCH-00-16-ARM-Cortex-M-support-td129310.html
i have to adapt the dropped patch for the FPU support of the M4 to the M7
FPU.

Ok then i have a toolchain, but as i read through the thread why the FPU
patch was dropped, it seems i have another problem.

The V7M port of linux mainline has no support for the CONFIG_VFP option. It
seems fpu register stack save for task switches is not implemented yet. Is
that right? Were in the source tree can i look at the
hardware dependent code for the task switch? So i can try to add lazy fpu
register save an test it.

In search of a maintainer of the stm32 port i found Alexandre Torgues
branch at kernel.org as the one with the latest commits. But i found no
recent commits on fpu handling.

Thanks for reading this novel.

Does anybody have any suggestions where i can start my development?
Which toolchain to use? Buildroot, something manually built?
On which branch of the kernel should i clone?

Thanks in advance.

Regards

Alex
Waldemar Brodkorb
2017-01-02 17:43:21 UTC
Permalink
Hi Alex,
A. Brand wrote,
Post by A. Brand
Hi together,
normally i work bare metal on Cortex-M devices. But with devices such as the
Cortex-M7 with more than 200MHz, i think of using uclinux for my coming IoT
applications. 
How is the actual status of the Cortex-M7 Support? My first Target will be the
STM32F769 Discovery board. 
I can not speak for the uClinux distribution, I can only tell from
my point of view. Buildroot does have sample defconfigs and tested
support for Cortex-M4 (stm32f429_disco_defconfig /
stm32f469_disco_defconfig). They use uClibc-ng and simple C
applications incuding Linuxthreads should work fine.
As binary format, FLAT is used.
Post by A. Brand
As i read the discussions according FPU support for arm v7m devices, i can not
use the gnu arm gcc toolchain by arm hosted at:    https://launchpad.net/
gcc-arm-embedded
because this toolchain was linked against newlib, am i right? I need a least
one linked against uClib?
Not sure, may be this depends on the functions you want to use from
the C library. I have read newlib has some kind of FPU support.
Post by A. Brand
So to get a toolchain supporting a arm v7m with fpv5-sp-d16 i need to add a
http://buildroot-busybox.2317881.n4.nabble.com/
PATCH-00-16-ARM-Cortex-M-support-td129310.html i have to adapt the dropped
patch for the FPU support of the M4 to the M7 FPU.
Ok then i have a toolchain, but as i read through the thread why the FPU patch
was dropped, it seems i have another problem.
The V7M port of linux mainline has no support for the CONFIG_VFP option. It
seems fpu register stack save for task switches is not implemented yet. Is that
right? Were in the source tree can i look at the
hardware dependent code for the task switch? So i can try to add lazy fpu
register save an test it.
In search of a maintainer of the stm32 port i found Alexandre Torgues branch at
kernel.org as the one with the latest commits. But i found no recent commits on
fpu handling.
May be Maxime Coquelin knows more about it, as he seems to be
involved in STM32 bootloader afboot-stm32, kernel and openocd for this
targets.
But why do you think there is some hardware dependent code involved?
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/kernel/signal.c?id=refs/tags/v4.10-rc2
Post by A. Brand
Thanks for reading this novel. 
Does anybody have any suggestions where i can start my development?
Which toolchain to use? Buildroot, something manually built?
On which branch of the kernel should i clone?
Thanks in advance.
You can try looking at http://www.emcraft.com to see if they support
FPU's in their ARM Cortex-M products.
https://github.com/EmcraftSystems

There is an evaluation to use FDPIC as binary format, it involves
toolchain and kernel modifications:
https://github.com/mickael-guene/fdpic_manifest
The toolchain is built as soft-float.

Rob Landley and Rich Felker started porting musl to ARM
noMMU devices. There requirement is FDPIC support in gcc and kernel, as Musl
does not support FLAT binaries.
http://www.openwall.com/lists/musl/2016/12/07/2
Do not read the complete thread, as Rob and I diverged to discuss
other topics ;)
And _that_ is a novel ;)

<selfpromotion>
If you want to try an underdog project with fresh Cortex-M7 toolchain
support, try http://www.openadk.org/
</selfpromotion>

Or if this is all too confusing, keep going using bare-metal ;)
http://www.st.com/content/ccc/resource/technical/document/application_note/10/6b/dc/ea/5b/6e/47/46/DM00047230.pdf/files/DM00047230.pdf/jcr:content/translations/en.DM00047230.pdf

best regards
Waldemar
_______________________________________________
uClinux-dev mailing list
uClinux-***@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-***@uclinux.org
To unsubscribe see:
http://mailman.uclinu
A. Brand
2017-01-03 14:50:01 UTC
Permalink
Hi Waldemar,

thanks for ur reply.
Post by Waldemar Brodkorb
Hi Alex,
A. Brand wrote,
Post by A. Brand
Hi together,
normally i work bare metal on Cortex-M devices. But with devices such as
the
Post by A. Brand
Cortex-M7 with more than 200MHz, i think of using uclinux for my coming
IoT
Post by A. Brand
applications.
How is the actual status of the Cortex-M7 Support? My first Target will
be the
Post by A. Brand
STM32F769 Discovery board.
I can not speak for the uClinux distribution, I can only tell from
my point of view. Buildroot does have sample defconfigs and tested
support for Cortex-M4 (stm32f429_disco_defconfig /
stm32f469_disco_defconfig). They use uClibc-ng and simple C
applications incuding Linuxthreads should work fine.
As binary format, FLAT is used.
I actually build this configuration already, with stock buildroot
configuration. Due to the similarities
between the stm32 lines i should try to boot this on my hardware.
Post by Waldemar Brodkorb
As i read the discussions according FPU support for arm v7m devices, i can not
https://launchpad.net/
Post by A. Brand
gcc-arm-embedded
because this toolchain was linked against newlib, am i right? I need a
least
Post by A. Brand
one linked against uClib?
Not sure, may be this depends on the functions you want to use from
the C library. I have read newlib has some kind of FPU support.
My question was not concerning the libs support. I think of building the
kernel with hard float support, cause i plan to make heavy use of floating
point in a device driver.
Post by Waldemar Brodkorb
Post by A. Brand
So to get a toolchain supporting a arm v7m with fpv5-sp-d16 i need to
add a
Post by A. Brand
http://buildroot-busybox.2317881.n4.nabble.com/
PATCH-00-16-ARM-Cortex-M-support-td129310.html i have to adapt the
dropped
Post by A. Brand
patch for the FPU support of the M4 to the M7 FPU.
Ok then i have a toolchain, but as i read through the thread why the FPU
patch
Post by A. Brand
was dropped, it seems i have another problem.
The V7M port of linux mainline has no support for the CONFIG_VFP option.
It
Post by A. Brand
seems fpu register stack save for task switches is not implemented yet.
Is that
Post by A. Brand
right? Were in the source tree can i look at the
hardware dependent code for the task switch? So i can try to add lazy fpu
register save an test it.
In search of a maintainer of the stm32 port i found Alexandre Torgues
branch at
Post by A. Brand
kernel.org as the one with the latest commits. But i found no recent
commits on
Post by A. Brand
fpu handling.
May be Maxime Coquelin knows more about it, as he seems to be
involved in STM32 bootloader afboot-stm32, kernel and openocd for this
targets.
But why do you think there is some hardware dependent code involved?
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/kernel/signal.c?id=refs/tags/v4.10-rc2
To my shame i have not looked at the code. So i will resurrect the patches
from the linked thread, port them to my needs and give it a try.
Post by Waldemar Brodkorb
Post by A. Brand
Thanks for reading this novel.
Does anybody have any suggestions where i can start my development?
Which toolchain to use? Buildroot, something manually built?
On which branch of the kernel should i clone?
Thanks in advance.
You can try looking at http://www.emcraft.com to see if they support
FPU's in their ARM Cortex-M products.
https://github.com/EmcraftSystems
I have my problems with using a toolchain from 2010 with a cpu from 2017. I
dont see that emcraft is using an other toolchain than stated here:
https://www.emcraft.com/som/stm32f7-212/installing-activating-cde furthermore
this doc was updated in sep. 2016.
Post by Waldemar Brodkorb
There is an evaluation to use FDPIC as binary format, it involves
https://github.com/mickael-guene/fdpic_manifest
The toolchain is built as soft-float.
Rob Landley and Rich Felker started porting musl to ARM
noMMU devices. There requirement is FDPIC support in gcc and kernel, as Musl
does not support FLAT binaries.
http://www.openwall.com/lists/musl/2016/12/07/2
Do not read the complete thread, as Rob and I diverged to discuss
other topics ;)
And _that_ is a novel ;)
This is totally weird stuff. I will definitely have a eye on FDPIC, but for
me its in a too early stage and i have to little experience in this area.
Post by Waldemar Brodkorb
<selfpromotion>
If you want to try an underdog project with fresh Cortex-M7 toolchain
support, try http://www.openadk.org/
</selfpromotion>
I will give it a try. Maybe i contribute a configuration for the F769.
Post by Waldemar Brodkorb
Or if this is all too confusing, keep going using bare-metal ;)
http://www.st.com/content/ccc/resource/technical/document/application_note/10/6b/dc/ea/5b/6e/47/46/DM00047230.pdf/files/DM00047230.pdf/jcr:content/translations/en.DM00047230.pdf
No this is boring, its my every day work, nothing for a hobby :).

regrads,

Alex

Loading...