uClinux is no longer active.

Mainline Linux kernel has a CONFIG_MMU for ARM, and has been ported to ARMV7-M, with 'defconfig' for STM32, EFM32, LPC18xx. In spite of some limitations, these MCUs could run the same Linux kernel as x86 computers!

For STM32F429, the most thrilling thing is that almost all peripherals have been implemented in mainline kernel now, such as USART, ADC, DAC, pinctrl, LTDC, DCMI, USB, MII/RMII, I2C, with detailed devicetree bindings. stm32429-eval.dts and stm32f429i-disco.dts are good examples.

So I choose STM32F429IIT6, a lqfp-176 SOC enough to hold:

128MB SLC nand flash
10/100M ethernet
640x480@60Hz VGA output
2 USB ports
1 SD card slot
1 camera (OV2640, OV7670, etc)

Few pins are left.

With kernel 4.13.3, all the relative drivers enabled and bug fixed. the kernel is a little bit smaller than 2MB so as to XIP in its internal flash memory, with core drivers such as USART, yaffs, framebuffer, etc. Other drivers such as USB are made into modules, stored in the nand flash.

Just plug in a VGA monitor and a USB keyboard, and enjoy the busybox commands.


Currently there's no hardware floating point support.
USB does not accept low speed devices, so you may need wireless USB keyboards.
Camera driver is so slow that it may trigger DMA underflow error.
Networking is not yet complete. udhcpc does not work, and the only way to get an IP address is to write it in kernel command line. It doesn't have DNS either.