Is Linux built for microcontroller platforms without an MMU. It relies on a specific version of libc not available in the standard Linaro toolchain binary releases. These instructions use Buildroot to automate compiling the toolchain and creating a simple busybox filesystem.
Is an Arm supplied FPGA based hardware development platform that can be configured to use a variety of Arm Cortex-M family cores. The platform is also available as a FVP (Fixed Virtual Platform) software model - included with Arm's DS-5 toolchain.
The instructions and configuration files supplied describe how to build and run uClinux on
It should be possible to port the example to other Cortex-M variants. However changes may be required to the following configuration files:
MPS2_config.zip
MPS2_config/configs
<buildroot>/configs
<buildroot>/board/arm
mps2
MPS2_config/mps2
<buildroot>/board/arm/mps2
$ make arm_mps2_<platform>_defconfig $ make -j16
This may take a while, it is rebuilding gcc + linux + busybox and will produce 3 things:
Linux kernel Image + busybox in initramfs in output/build/linux-4.11.3/arch/arm/boot/Image Device tree in output/images/<platform>.dtb Toolchain in output/host/usr/bin/
output/build/linux-4.11.3/arch/arm/boot/Image
output/images/<platform>.dtb
output/host/usr/bin/
Note: The FVP target uses a non-upstreamed variant of mps2-an399.dts, because the FVP requires a different ethernet device node than used by the in-tree dts.
This bootwrapper is a simple Linux bootloader intended for use with Cortex-M devices on Arm's MPS development platform.
git clone https://github.com/ARM-software/bootwrapper.git -b cortex-m-linux
PHYS_OFFSET = 0x60000000
PHYS_OFFSET = 0x21000000
DTB = ./mps2-an399.dtb
DTB = ./mps2-an399-fvp.dtb
DTB = ./cm3ds.dtb
export CROSS_COMPILE=<workspace>/buildroot-2017.05.01/output/host/usr/bin/arm-buildroot-uclinux-uclibcgnueabi- cd ./bootwrappermake
export CROSS_COMPILE=<workspace>/buildroot-2017.05.01/output/host/usr/bin/arm-buildroot-uclinux-uclibcgnueabi-
cd ./bootwrapper
make
This will produce boot.axf (A small assembler shim which jumps from flash to RAM. Loads at 0x0, jumps to PHYS_OFFSET). linux.axf (Includes the bootwrapper + Image at PHYS_OFFSET)
boot.axf
linux.axf
$ FVP_MPS2_Cortex-M7 -a linux.axf
The MPS2 board allows images to be programmed into flash via configuration files on the board's MMC card.
SOFTWARE/
MB/HBI0xyz/ANxyz/images.txt
MB/board.txt
[IMAGES] TOTALIMAGES: 2 IMAGE0ADDRESS: 0x00000000 IMAGE0FILE: \SOFTWARE\boot.axf IMAGE1ADDRESS: PHYS_OFFSET** IMAGE1FILE: \SOFTWARE\linux.axf**PHYS_OFFSET is the appropriate RAM address for your platform, detailed above
[IMAGES] TOTALIMAGES: 2 IMAGE0ADDRESS: 0x00000000 IMAGE0FILE: \SOFTWARE\boot.axf IMAGE1ADDRESS: PHYS_OFFSET** IMAGE1FILE: \SOFTWARE\linux.axf
An example Linux boot log is included in the supplied MPS2_config.zip archive