You'll need to have installed the GNU Embedded Toolchain Building for ARMother targets typically requires additional programs and tools. If you haven't yetAdditionally, some targets may have a unique build process, meaning the instructions here will not apply to them. Please see the [[Installing_ChipWhisperer]] guidepage for the specific target you want to build for before following these instructions, specifically which can be found under the '''Installing ARM ToolchainHardware Documentation''' section, for detailsof the [[Main Page]].
Once you have a working compiler (check by typing 'arm-none-eabi-gcc' at the command line).:
<ol style="list-style-type: decimal;">
<li>We want to use the existing SimpleSerial firmware as a base for our project, but we don't want to edit the existing firmware. Instead, we'll make a new project with a copy of this firmware. Copy the directory of the firmware you want to modify in the <code>chipwhisperer/hardware/vicitims/firmware</code> to a new folder. For example, if you want to modify the <code>simpleserial-base</code> firmware, copy the contents of the <code>simpleserial-base</code> folder to a new one. The name is arbitrary, but for this example, we'll call it <code>simpleserial-base-lab1</code>. You must keep it in the same directory, as it will reference other files within that directory for the build process.</li>
<li><dl>
<dt>Open a terminal with arm-none-eabi-gcc in the path. If using Windows the sidebar on the [[Installing_ChipWhisperer]] page</dt></dl>
</li>
<li><p>Change the terminal to the newly copied directory. For example:</p>
Windows:<pre>cd c:\chipwhisperer\hardware\victims\firmware\simpleserial-base-lab1</pre>
Linux/macOS:<pre>cd chipwhisperer/hardware/victims/firmware/simpleserial-base-lab1</pre></li>
<li><p>Then, run <code>make</code> to build the system. Make sure you specify which platform you're using as your target. You can see a list of supported targets by typing <code>make PLATFORM=</code>. You'll also need to specify a <code>CRYPTO_TARGET</code>. Most targets and tutorials work with <code>TINYAES128C</code>, so if you're unsure, this is usually a reliable option. For example, for the ChipWhisperer Lite NXP Kinetis K24F target, run:</p><pre>make PLATFORM=CWLITEARM CW308_K24F CRYPTO_TARGET=TINYAES128C</pre>
<p>Which should have the following output:</p>
<pre>...Bunch of lines removed...
Linking: simpleserial-base-CWLITEARMCW308_K24F.elfarm-none-eabi-gcc -I. -O0 -g -DDEBUG -DCPU_MK24FN1M0VLL12 -DFRDM_K64F -DFREEDOM -w -fno-common -ffunction-sections -fdata-sections -ffreestanding -fno-builtin -mthumb -mapcs -std=gnu99 -mcpu=cortex-m4 -I. -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fmessageMMD -length=0 MP -ffunction-sections static -gdwarf-2 -DSS_VER=SS_VER_1_1 -DSTM32F303xC -DSTM32F3 -DSTM32 -DDEBUG -DHAL_TYPE=HAL_stm32f3 HAL_k24f -DPLATFORM=CWLITEARM CW308_K24F -DTINYAES128C -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=objdir/simpleserial-base.o -I.././simpleserial/ -I.././hal -I.././hal/stm32f3 k24f -I.././hal/stm32f3k24f/CMSIS -I.././hal/stm32f3k24f/CMSIS/core -I.././hal/stm32f3/CMSIS/device -I.././hal/stm32f4/Legacy Drivers -I.././crypto/ -I.././crypto/tiny-AES128-C -std=gnu99 -MMD -MP -MF .dep/simpleserial-base-CWLITEARMCW308_K24F.elf.d objdir/simpleserial-base.o objdir/simpleserial.o objdir/stm32f3_halclock_config.o objdir/stm32f3_hal_lowlevelfsl_adc16.o objdir/stm32f3_sysmemfsl_clock.o objdir/fsl_cmp.o objdir/fsl_cmt.o objdir/fsl_common.o objdir/fsl_crc.o objdir/fsl_dac.o objdir/fsl_dmamux.o objdir/fsl_dspi.o objdir/fsl_dspi_edma.o objdir/fsl_edma.o objdir/fsl_ewm.o objdir/fsl_flash.o objdir/fsl_flexbus.o objdir/fsl_flexcan.o objdir/fsl_ftm.o objdir/fsl_gpio.o objdir/fsl_i2c.o objdir/fsl_i2c_edma.o objdir/fsl_llwu.o objdir/fsl_lptmr.o objdir/fsl_mmcau.o objdir/fsl_pdb.o objdir/fsl_pit.o objdir/fsl_pmc.o objdir/fsl_rcm.o objdir/fsl_rnga.o objdir/fsl_rtc.o objdir/fsl_sai.o objdir/fsl_sai_edma.o objdir/fsl_sdhc.o objdir/fsl_sim.o objdir/fsl_smc.o objdir/fsl_sysmpu.o objdir/fsl_uart.o objdir/fsl_uart_edma.o objdir/fsl_vref.o objdir/fsl_wdog.o objdir/k24f_hal.o objdir/system_MK24F12.o objdir/aes.o objdir/aes-independant.o objdir/stm32f3_startupstartup_MK24F12.o --output simpleserial-base-CWLITEARMCW308_K24F.elf -Xlinker --gc-sections -Xlinker -static -Xlinker -z -Xlinker muldefs -T .././hal/k24f/MK24FN1M0xxx12_flash.ld --specs=nano.specs -T -specs=nosys.specs -Wl,--start-group -L .././hal/stm32f3k24f/LinkerScript-l:lib_mmcau.ld a -lm -lc -lgcc -lnosys -Wl,--gcend-sections -lm group -Wl,-Map=simpleserial-base-CWLITEARMCW308_K24F.map,--cref -lm
.
Creating load file for Flash: simpleserial-base-CWLITEARMCW308_K24F.hexarm-none-eabi-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature simpleserial-base-CWLITEARMCW308_K24F.elf simpleserial-base-CWLITEARMCW308_K24F.hex
.
Creating load file for EEPROM: simpleserial-base-CWLITEARMCW308_K24F.eep
arm-none-eabi-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex simpleserial-base-CWLITEARMCW308_K24F.elf simpleserial-base-CWLITEARMCW308_K24F.eep || exit 0
.
Creating Extended Listing: simpleserial-base-CWLITEARMCW308_K24F.lssarm-none-eabi-objdump -h -S -z simpleserial-base-CWLITEARMCW308_K24F.elf > simpleserial-base-CWLITEARMCW308_K24F.lss
.
Creating Symbol Table: simpleserial-base-CWLITEARMCW308_K24F.symarm-none-eabi-nm -n simpleserial-base-CWLITEARMCW308_K24F.elf > simpleserial-base-CWLITEARMCW308_K24F.sym
Size after:
text data bss dec hex filename
11600 120 4588 8 2388 14108 1296 5892 1704 371c simpleserial-base-CWLITEARMCW308_K24F.elf
+--------------------------------------------------------
+ Built for platform CW-Lite Arm (STM32F3)k24f Target
+--------------------------------------------------------
</pre></li>
Ensure that the "Built for platform ___" matches your target device.
</ol>