클리퍼 펌웨어 프리셋 플래싱
개요
클리퍼 펌웨어 사용중 새로운 업데이트 마다 가장 번거로운 것은 make menuconfig 재설정일 수 있습니다 그도 그런 것이 Input Shaper만 추가되도 당장 두 번의 menuconfig 설정이 필요하고 가끔 업데이트 하시는 분보다 오랜만에 업데이트하시는 분은 환경 설정을 찾다 지쳐 업데이트를 포기 하신 적 많다보니 이를 예방해 보고자 자신이 사용중인 MCU 별 프리셋을 생성해 칩셋 이름으로 변경해 둔다음, 이를 매개 변수로 활용해 if 문으로 문자열 비교를 통해 동일 칩셋에만 플래싱을 시키도록 원본 수정을 최소화 시키되 간단한 스크립트로 작동하게 했습니다
- .config : make_menuconfig에서 설정된 MCU 설정 값이 기록되는 파일입니다
- boot0.sh : 앞서 pt.20에서 사용한 옥토퍼스 보드의 DFU 해제를 위한 스크립트입니다
- dfu.sh : 앞서 pt.20에서 사용한 옥토퍼스 보드의 DFU 진입을 위한 스크립트입니다
- flash.sh : MCU 칩셋 이름을 토대로 매개 변수 입력을 받아 사전 추가된 문자열과 비교해 펌웨어 플래싱을 진행하는 스크립트입니다
- .stm32f446 : 옥토퍼스 MCU입니다
- .stm32f072 : 멜로우/앙리 캔 버스 모듈 MCU입니다
- .mcurpi : Input Shaper용 가상 호스트입니다
프리셋 생성
cd ~/klipper make clean make menuconfig
- 위 명령을 실행해 기 컴파일 폴더를 정리한 뒤 펌웨어 환경 설정으로 진입합니다
- 설정을 마쳤다면 ESC를 누르고 Y를 눌러 저장합니다
- 만약 make clean 과정에서 오류가 생긴다면 아래 파일을 sftp 데몬을 이용해 /home/pi/klipper 폴더에 덮어 씌우기 합니다
Makefile
cp ~/klipper/.config ~/klipper/.stm32f446 make clean
- 프리셋 생성이 끝났다면 cp 명령을 이용해 stm32f446 칩셋 환경 설정을 .stm32f446 파일명으로 복제합니다
- 이런 식으로 여러분이 소유한 MCU 프리셋을 생성합니다
조건 분기 스크립트 작성

#!/bin/bash echo "${1}" &>/dev/null # 매개 변수 입력 받은 결과를 쿼링하지 않도록 숨깁니다 chipname=${1} # 쉘 스크립트 실행 시 입력 받은 첫 번째 매개변수를 chipname으로 지역 변수 선언 합니다 can=.stm32f072 # chipname 지역 변수와 비교할 문자열을 지역 변수 can으로 선언합니다 mcu=.stm32f446 # chipname 지역 변수와 비교할 문자열을 지역 변수 mcu로 선언합니다 rpi=.mcurpi # chipname 지역 변수와 비교할 문자열을 지역 변수 mcurpi로 선언합니다 if [ "${1}" = "${can}" ];then # chipname과 can의 문자열이 같다면 then 구문을 실행하고 다를 경우 else 구문을 실행합니다 sudo service klipper stop make clean # 플래싱 전 ~/klipper/out 폴더내 펌웨어 빌드 내역을 소거합니다 lsusb # usb 장치 조회 후 DFU 모드로 진입한 0483:df11 장치를 육안으로 확인합니다 sleep 5; # 5초 대기 후 (필요없으면 삭제 또는 주석 처리 가능) sed -i "11s/.config/.stm32f072/" Makefile # Makefile 문서의 11행의 .config 문자열을 .stm32f072로 치환합니다 make flash FLASH_DEVICE=0483:df11 # DFU모드로 부티된 CAN 모듈에 새로운 펌웨어를 빌드한 뒤 플래싱 합니다 sed -i "11s/.stm32f072/.config/" Makefile # Makefile 문서의 11행의 .stm32f072 문자열을 .config로 치환합니다 make clean # 플래싱 후 ~/klipper/out 폴더내 펌웨어 빌드 내역을 소거합니다 sudo service klipper start else echo "not correct of your mcu chip type.." # chipname 과 can 문자열이 다를 경우 CLI 프롬프트에 표시하는 문구입니다 fi if [ "${1}" = "${mcu}" ];then ./dfu.sh # DFU 모드로 변경합니다 (릴레이 연동) sudo service klipper stop lsusb sed -i "11s/.config/.stm32f446/" Makefile make flash FLASH_DEVICE=0483:df11 sed -i "11s/.stm32f446/.config/" Makefile make clean ./boot0.sh # DFU 모드를 해제합니다 (릴레이 연동) else echo "not correct of your mcu chip type.." fi if [ "${1}" = "${rpi}" ];then sudo service klipper stop sed -i "11s/.config/.mcurpi/" Makefile make flash sed -i "11s/.mcurpi/.config/" Makefile make clean sudo service klipper start else echo "not correct of your mcu chip type.." fi
스크립트 실행
cd ~/klipper
./flash.sh .mcurpi # ./flash.sh .stm32f446 또는 ./flash.sh .stm32f072 등으로 한 번에 1개의 매개변수만 사용 가능합니다
펌웨어 프리셋 플래싱 시연
- INPUT SHAPER용 가상 호스트 MCU로 직접 플래싱을 해보았으나 매우 잘 동작하고 있습니다
- 스크립트 실행 시 발생하는 문자열 매칭 안됨 문자열 표시는 사전 설정 문자열과 매칭되지 않아 mcurpi 문자열이 매칭될 때까지 표기되는 것이고 이는 정상입니다
감사합니다
At your own risks
0