# Building 3D Printer Firmware
A 3D printer firmware is a program that runs on the microcontroller board of a 3D printer. It translates the G-code commands generated by slicing software into actions and movements of the printer's components such as extruders, motors, heaters etc. There are various firmwares available in the market that users can choose based on the functionality and features they need.
Here are a few open-source firmware options for 3D printers that can be built by users:
### [Marlin](https://github.com/MarlinFirmware/Marlin) ![GitHub Repo stars](https://img.shields.io/github/stars/MarlinFirmware/Marlin)
This is the most popular and widely-used firmware for 3D printers. It is highly customizable and supports many different printer models.
### [Klipper](https://github.com/Klipper3d/klipper) ![GitHub Repo stars](https://img.shields.io/github/stars/Klipper3d/klipper)
This firmware runs on a separate microcontroller and offloads processing from the main board to improve speed and accuracy. It is designed to work with a variety of 3D printer setups and supports advanced features like pressure advance and lookahead.
### [Smoothie](https://github.com/Smoothieware/Smoothieware) ![GitHub Repo stars](https://img.shields.io/github/stars/Smoothieware/Smoothieware)
This firmware is known for its smooth and precise movement control. It supports a range of printers and features like automatic temperature control and support for multiple extruders.
## Building Marlin Firmware
Use docker to build Marlin firmware for Prusa printers at Raccoon.
`marlin-184.108.40.206` is tested and used on the Prusa printers.
### Changes in configuration.h
* enable `#define tallbear`
* change `#define Z_MAX_POS 350` to `#define Z_MAX_POS 410`
* enable `#define LCD_BED_LEVELING`
1. `git clone https://github.com/rccn-dev/rccn_marlinfw.git`
2. `cd rccn_marlinfw`
4. upload the hex file to the printer via Arduino-IDE or arduino-cli.