Skip to the content
PCBKitNew board
4 layers59 × 31 mmStlinux, the printed circuit board in 3D

Board for messing around MMU less variant of Linux

Size
59 × 31 mm
Copper layers
4
Thickness
1.57 mm
Parts
80
Nets
141
Pads
433
Tracks, vias
1,254, 163
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
13 Apr 2023
Updated
28 Sep 2024

Overview

Stlinux is an open-source printed circuit board by VladisM, from the VladisM/stlinux repository on GitHub, published under the WTFPL licence. It is a 4-layer board of 59 × 31 mm with 80 parts on 141 nets, routed with 1,254 tracks and 163 vias.

It is built around the FT230XQ-R, IS25LP064A-JBLE and 24LC08B/P, with the IS42S16160J-6TL among its other parts. Its parts include 38 capacitors, 21 resistors, 6 ICs, 5 diodes and 4 connectors. It belongs with the computers and single-board computers boards and the STM32 boards of this library.

Main components

4

README

README.md

STlinux

Simple board with STM32F446 and SDRAM that is capable of running MMU less linux build. Purpose of this project is to learn new stuffs. It may seems like good thing to have Linux in such small form factor but it isn't. MMU is somehow important in security and using this approach to build device that will be connected to the network is a bad idea.

This project using submodules. After clone use following to init them.

bash
$ git submodule update --init --recursive

System specification

  • Hardware:
    • 32MB SDRAM
    • 8MB QSPI Flash
    • UART console, sd card slot, EEPROM
    • two LEDs and two buttons
  • Software
    • Linux kernel 6.3
    • Busybox 1.36.1

Manufacturing board

Gerber files required for manufacturing are stored in board/ger subdirectory. To manufacture board you shall just find yourself a suitable manufacturer and use latest archive.

To generate BOM you shall use KiCad and revisit folder board/kicad. All project files are stored there.

After soldering board you should apply ftdi configuration into integrated UART bridge. Correct configuration is provided by the file board/ftdi_configuration.xml. For that you are going to need Windows PC and FT_PROG tool (available on their website).

To test if board was correctly manufactured and most importantly assembled. You can use firmware available in board_test folder.

Compile and load firmware, connect using serial port at speed of 115200 and follow instructions.

Warning: at this moment SDIO and SD Card slot test are not implemented!

Compile system and bootloader

Everything is compiled using clfs.sh script in root folder of this project. So, if you want to compile whole system simply call following command. (note, adjust number of cores for compilation using -j)

bash
$ ./clfs.sh --build all -j 8

After some time, you can find all output images in build/images/. There are:

  • bootloader - u-boot.bin
  • linux kernel - zImage
  • device tree - stm32f446-stlinux.dtb
  • system image - clfs.uImage

Bootloader shall be loaded to the board using STLink, and shall be written to the internal Flash memory of MCU.

bash
st-flash write build/images/u-boot.bin 0x08000000

Other components are by default loaded from QSPI Flash, there are two ways how to get them there.

  • Using SD card
  • Using serial port (legacy)

Loading QSPI Flash using serial port

This method was used for first revision of board with nonworking SD card slot. If you have second revision of board, use SD card, it is much more faster.

Once you are in u-boot console, you can use xmodem protocol to send all files and then write them to the QSPI Flash. For writing there is mtd command. Follow next code snippet.

bash
> loadx
# send kernel file (zImage) using your console emulator
> mtd erase kernel
> mtd write kernel ${loadaddr}
> loadx
# send rootfs file (clfs.uImage) using your console emulator
> mtd erase rootfs
> mtd write rootfs ${loadaddr}
> loadx
# send dtb file (stm32f446-stlinux.dtb) using your console emulator
> mtd erase rootfs
> mtd write rootfs ${loadaddr}

Then you can simply reset the board or type run bootcmd and you should be welcomed by kernel boot log.

Loading QSPI Flash using SD card

Compared to using serial port, this one is much much faster because data are transferred over SD card, not xmodem at 115200 bauds.

Create one partition on your SD card, format it as FAT32, and copy there image files from build directory. Then insert your card to the board and run following commands.

bash
> fatload mmc 0:1 ${loadaddr} zImage
> mtd erase kernel
> mtd write kernel ${loadaddr}
> fatload mmc 0:1 ${loadaddr} clfs.uImage
> mtd erase rootfs
> mtd write rootfs ${loadaddr}
> fatload mmc 0:1 ${loadaddr} stm32f446-stlinux.dtb
> mtd erase dtb
> mtd write dtb ${loadaddr}

After reset, your board will boot from QSPI Flash or you can simply type run bootcmd.

Loading directly from SD card

If you are feeling lazy, just copypaste this to bootloader console. And it will boot.

bash
fatload mmc 0:1 ${kernel_addr_l} zImage ; fatload mmc 0:1 ${rootfs_addr_l} clfs.uImage ; fatload mmc 0:1 ${dtb_addr_l} stm32f446-stlinux.dtb ; run set_args ; bootz ${kernel_addr_l} ${rootfs_addr_l} ${dtb_addr_l}

It will load everything from SD card into RAM and boot kernel that way.

License

This project is using a lot of software components that are licensed under various licenses. Always make sure to check what component are you working with to prevent any misunderstanding.

Board manufacturing files, firmware for testing, and build script is licensed using the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See COPYING file for more details.

Note: CLFS is abbreviation from Cross Linux From Scratch, in general describing process of cross compiling Linux From Scratch. Please also see CLFS project. My work is influenced by these projects and I learned from their materials a lot.

Parts

80
QtyValueFootprintReferences
29100nCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC201, C202, C205, C208, C209, C210, C211, C212, C213, C214, C215, C216, C217, C218, C301, C302 +13
510kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR401, R402, R403, R502, R505
5330Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR404, R405, R506, R507, R601
547kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR301, R302, R303, R304, R305
5LEDLED_SMD:LED_1206_3216Metric_Pad1.42x1.75mm_HandSolderD401, D402, D501, D502, D601
44k7Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR306, R307, R308, R501
310uCapacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A_Pad1.58x1.35mm_HandSolderC304, C601, C603
222pCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC204, C207
227Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR503, R504
22u2Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC203, C206
247pCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC501, C502
2ExtensionConnector_PinSocket_2.54mm:PinSocket_2x06_P2.54mm_Vertical_SMDJ401, J402
124LC08Package_SO:SOP-8_3.9x4.9mm_P1.27mmU301
1Bus/SelfJumper:SolderJumper-3_P1.3mm_Open_RoundedPad1.0x1.5mm_NumberLabelsJP501
1Crystal_GND24Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm_HandSolderingY201
1FT230XQPackage_DFN_QFN:QFN-16-1EP_4x4mm_P0.65mm_EP2.1x2.1mmU501
1IS25LP064A-JBLEPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU302
1IS42S16160JPackage_SO:TSOP-II-54_22.2x10.16mm_P0.8mmU303
1LD1117S33TR_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U601
1Micro_SD_Card_DetConnector_Card:microSD_HC_Molex_104031-0811J301
1RESET_SwButton_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW401
1STM32F446ZCTxPackage_QFP:LQFP-144_20x20mm_P0.5mmU201
1USB_B_MiniConnector_USB:USB_Mini-B_Wuerth_65100516121_HorizontalJ501
1USER_SwButton_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmSW402
1VDD_ENJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP601

The 79 most common of 80 parts.

Questions

How big is the Stlinux PCB?

It measures 59 × 31 mm and has 4 copper layers, 1.57 mm thick.

What parts does the Stlinux use?

80 parts, built around the FT230XQ-R, IS25LP064A-JBLE, 24LC08B/P and IS42S16160J-6TL. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Stlinux KiCad files?

From the VladisM/stlinux repository on GitHub, at the commit this page was made from: the board is board/KiCad/stlinux.kicad_pcb and its schematic board/KiCad/low_level_io.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Stlinux design in my own project?

Its repository publishes it under the WTFPL licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers95.9 × 90.2 mmCDH PCB, the printed circuit board in 3D

    CDH PCB

    ManSEDS-Satellites-and-Space-Systems/CubeSat-OBC

    The version 2 of the C&DH PCB. Features an STM32H743ZGT6 as central proccessor and 32MB of SDRAM.

    95 parts
  • 2 layers136 × 58 mmImxrt1020-board, the printed circuit board in 3D

    Imxrt1020-board

    martinribelotta/imxrt1020-module

    iMX RT 1020 CPU module

    141 parts37BSD-3-Clause
  • 12 layers68 × 40 mmTeresina Rack, the printed circuit board in 3D

    Teresina Rack

    marcoallegretti/Teresina-Rack

    The goal is an open, self-fabricatable Daisy Patch SM-compatible Eurorack submodule: the same carrier interface and libDaisy application compatibility through a small Teresina firmware variant.

    214 parts
  • 4 layers50 × 80 mmHermes, the printed circuit board in 3D

    Hermes

    1337bowen/Strife

    75 partsMIT
  • 4 layers100 × 66 mmTinyllama, the printed circuit board in 3D

    Tinyllama

    eivindbohler/tinyllama

    A tiny x86 retro computer

    114 parts309GPL-3.0
  • 4 layers87.3 × 56.7 mmCM4ClusterHat, the printed circuit board in 3D

    CM4ClusterHat

    will127534/Miniature-CM4-Cluster

    A dense cluster for four Raspberry Pi Compute Module 4

    240 parts96MIT
  • 4 layers254.9 × 150.1 mmWomo, the printed circuit board in 3D

    Womo

    muccc/WomoLIN

    Open Source Steuerung von LIN Bus Geräten im Caravan Bereich.

    534 parts84GPL-3.0
  • 2 layers114.3 × 40.6 mmKSGER Controller REV 2.0, the printed circuit board in 3D

    KSGER Controller REV 2.0

    omega9380/KSGER-Coverplates

    T12 Soldering Iron control board. A design based on schematics created by Mindstorm88 on the EEVBlog forums.

    54 parts5