2026년 5월 14일 목요일

오래간만에 STM32 펌웨어 작업 시작하다가 느낀 점

한동안 high level에서 놀다가 간만에 STM32 펌웨어 작업을 하게 됐다.

복잡한 펌웨어도 아니고 그 high level 코드가 돌아가는 리눅스 보드의 전원을 제어하는 16KB 플래시를 가진 MCU에 올라가는 펌웨어다.

사실, 이 MCU와 상관없이 리눅스 보드 전원 제어용 로드 스위치(active low)에 pull-down 저항을 달아서 전원을 일단 상시 공급하게 설계를 해놔서 당장 안해도 될 작업이었는데, 로드 스위치를 반대(active high) 타입으로 주문해서 조립했다. 아... 진짜...

급한대로 간단하게 펌웨어 만들어서 로드 스위치 입력 신호를 1로 줘야 했다.

오래간만에 STM32CubeIDE를 설치하고 새 프로젝트를 생성해보니... 어라? CubeMX가 없다. 아무리 찾아봐도.

알고보니 STM32CubeIDE 2.0 부터 CubeMX가 빠지게 됐단다.

이제부터 STM32CubeMX는 따로 설치하고 CubeIDE에서 작업하고 싶으면 CubeMX에서 CubeIDE용 프로젝트로 생성한 후 CubeIDE에서 import 하면 된다고...

그래서 윈도에 CubeMX를 설치했다. 다 설정하고 Code Generate 누르기 전에 생각해보니, CubeMX에서는 STM32CubeIDE나 EWARM용 프로젝트를 만들어주기도 하지만, Makefile, CMake 프로젝트도 만들어준다. 음... 안그래도 AI로 코딩하는 시대에 잘 됐다 싶었다.

문제는 나의 모든 개발용 툴들이 WSL2에 있다는 거다. 음. 윈도에서 만든 후 WSL2로 가져가도 큰 문제가 안될 것 같긴 한데... 이미 윈도용 디스크 압박도 심해서 부담스러웠던 터라 CubeMX를 지우고 WSL2에서 설치해보기로 결정.

STM32CubeMX를 다운받아 WSL2에서 압축 풀고 인스톨 실행하면 의외로 CLI로 진행이 된다.

설마 본 프로그램도 CLI로만 도는건가 해서 설치 후 실행해봤더니 역시나 X11 디스플레이를 못잡는다.

$ ./STM32CubeMX
Check exe path on linux
FullExe path1 is: /home/jsjeong/STM32CubeMX/STM32CubeMX
Exe path is: /home/jsjeong/STM32CubeMX
Search java from relative path ----
Checking java in /home/jsjeong/STM32CubeMX/./jre/bin/java
current working dir : /home/jsjeong/STM32CubeMX
av[0] ./STM32CubeMX
chdir to :/home/jsjeong/STM32CubeMX/.
New current working dir /home/jsjeong/STM32CubeMX
Full command: /home/jsjeong/STM32CubeMX/./jre/bin/java
-args[0] java
-args[1] -jar
-args[2] STM32CubeMX
log4j user configuration file not found: /home/jsjeong/.stm32cubemx/log4j2.xml
Configure log4j with default settings from jar:file:/home/jsjeong/STM32CubeMX/STM32CubeMX!/log4j/log4j2.stm32cubemx.xml
2026-05-14 08:07:38,683 [INFO] MicroXplorer:98 - [MX] MX Start == 49483568554686
2026-05-14 08:07:38,687 [INFO] MicroXplorer:653 - Detected Java Version = 21.0.9
Exception in thread "main" java.awt.HeadlessException:
No X11 DISPLAY variable was set,
or no headful library support was found,
but this program performed an operation which requires it.
        at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:164)
        at java.desktop/java.awt.Window.<init>(Window.java:553)
        at java.desktop/java.awt.Frame.<init>(Frame.java:428)
        at java.desktop/java.awt.Frame.<init>(Frame.java:393)
        at java.desktop/javax.swing.SwingUtilities$SharedOwnerFrame.<init>(SwingUtilities.java:1925)
        at java.desktop/javax.swing.SwingUtilities.getSharedOwnerFrame(SwingUtilities.java:2001)
        at java.desktop/javax.swing.JWindow.<init>(JWindow.java:183)
        at java.desktop/javax.swing.JWindow.<init>(JWindow.java:135)
        at com.st.microxplorer.stobjects.STSplash.<init>(STSplash.java:34)
        at com.st.microxplorer.maingui.MicroXplorer.main(MicroXplorer.java:189)
        at com.st.microxplorer.maingui.STM32CubeMX.main(STM32CubeMX.java:59)


생각보다 간단하게 해결

$ DISPLAY=:0 ./STM32CubeMX

깔끔하게 GUI로 실행된다.

이어서 여러가지 설정을 해준 다음, Makefile 프로젝트로 code generate 후, 프로젝트 디렉토리 가서 make 하니 성공.

아... 드디어 무거운 STM32CubeIDE에서 해방인가...

코딩을 위해 OpenCode를 실행하면서 한가지 걱정되는 점이 있었다. STM32CubeMX로 프로젝트를 생성하면 나름 코딩 룰이 생긴다. USER CODE BEGIN ~ USER CODE END 사이에만 사용자 코드를 넣어야 한다. 그 외에 코드를 넣으면 CubeMX로 재설정 하는 순간 그 블록 밖의 코드는 전부 사라진다. 과연 OpenCode가 이 룰을 감지할 수 있을까?

/init 으로 초기 프로젝트 파악 및 AGENTS.md 파일 생성하게 했더니...

AGENTS.md 생성 완료. 요약:

- 대상: STM32L011F4Ux (Cortex-M0+), 16KB Flash / 2KB RAM

- 빌드: make / make clean, arm-none-eabi-gcc 10.3.1 필요

- 핵심 규칙: USER CODE BEGIN/END 블록 밖은 수정 금지 (CubeMX 재생성 구역)

- 하드웨어 구성: USART2(115200), LPTIM1(LSI 37kHz), GPIO(PA4,PA6 출력 / PA5 입력 / PA1,PB9 EXTI), HSI 16MHz

- 플래싱/디버그: 시스템에 도구 미설치, st-flash/openocd 외부 사용 필요

생각보다 잘 감지한다.

자 이제 작업 시작! 

2026년 4월 10일 금요일

랩탑이 가려고 한다.

약 6년 가까이 써온 내 랩탑 Dell XPS 15 7590이 며칠 전부터 팬 소리가 달달거리더니 처음으로 경고가 떴다.

그 동안 포맷 한번 안하고 잘 써왔는데 이제 정말 보내줄 때가 가까이 왔나 싶다.

생각해보니 컴퓨터 트랜드가 AI로 넘어가는 시점에서 주요 과도기들을 다 겪어오지 않았나 싶다. 물론 컴퓨터 과학은 늘 발전하니 사실은 알게 모르게 계속해서 과도기를 겪어 왔었겠지만 유독 체감이 된다.

그 중 하나가 WSL 지원이다. 'MS가 많이 바뀌었구나'를 새삼 느꼈다. 만약 여전히 MS가 기존 정책을 고수했다면 dual boot와 Cygwin을 고민했겠지.

WSL에서 CUDA 지원도 놀라운 변화 중 하나이다. 이 모든게 다 AI 때문이겠지. 처음 랩탑을 사용할 때(2020) AI 관련 R&D를 진행해야 해서 어쩔 수 없이 dual boot로 Ubuntu를 깔았었다. 나중에 과제가 끝나고 나서야 CUDA on WSL2 가 추가되었었다. 불편함을 맨몸으로 다 때려맞고 나니 더 이상 불편하지 않게 된 세상이란...

여하튼 대부분 개발을 Emacs와 Linux toolchain을 사용하는 나에게 WSL은 매우 중요한 변화였다. 그래서 윈도를 사용하면서도 아무 불편함 없이 잘 써왔다.

그리고 어제 밤, 고민에 고민을 거듭하다가 Mac Mini를 질렀다. 마지막까지 AMD Strix Halo 급 미니 PC들과 고민하다가 내린 결정이다. 객관적 하드웨어 성능은 Strix Halo가 좋다고는 하지만 내 PC로 서빙할 것도 아니니 맥으로 결정. 그리고 무엇보다도 내 주머니 사정상 128GB는 도저히 감당하기가 어렵더라.😭

그나저나 무려 4달을 기다려야 한다. 그때까지 내 XPS 15가 잘 버텨주길...

2026년 4월 1일 수요일

2025-2026 겨울을 보내고

오늘 첫째는 개학을, 둘째는 입학을 했다. 드디어 겨울 방학이 끝났다.

이번 겨울 방학의 목표가 나름 있었는데, 대표적인 것 2가지가 첫째의 첫영성체 교리, 그리고 아이들과 여행 다녀오기이다.

본당인 세종 성베드로성당이 임시성당 상태라 많이 간소화된 상태에서 첫영성체 교리가 진행되긴 했어도 생각보다 숙제가 많았다.

기본적으로 일주일에 한번씩 주일 복음쓰기, 가끔 결석할 때는 그날 복음쓰기 숙제는 나와 함께하는 숙제인데, 아들과 함께 하는 필사라니... 많은 것들을 느끼게 하는 축복의 시간이었던 것 같다.

두번째는 여행.

사실 겨울방학 전부터 자연 활동을 좋아하는 아이들을 위해 빙어 낚시나 그와 유사한 체험들을 알아봤으나 끝날 줄 모르는 출장 일정들이 많은 발목을 잡았다. 결국 CDE 동계학술대회 참가 겸 방학기간 교무실에서 고분분투한 와이프에게 혼자있는 시간도 제공해줄 겸 삼부자만 용평리조트에 다녀왔다.

학회 발표있는 시간만 마인크래프트의 도움을 빌리고 그 외엔 열심히 돌아다녔다. 비록 나도 애들도 스키를 못타지만 산꼭대기 가서 알파카 먹이도 주고 오고 발왕산 케이블카 정상 가서 눈폭풍도 만나고 왔다.

https://www.icloud.com/photos/#/i,pz,0668BC62-C21A-4D69-A6CF-5330F192429D,10149/

이 글을 쓰는 지금(4/1) 이러한 기억들이 모여서 에너지가 되어 오늘 하루 하루를 살게 하는 것 같다.

2026년 2월 25일 수요일

OpenClaw+Kimi K2.5

​드디어 딱 맞는 두뇌를 찾았다. 

아래 스크린샷은 영수증 정리하는 스킬을 추가한 모습. 우리 회사는 영수증을 MS 365 Lists에 저장하는데 API 연동해서 그 동안 정리안된 영수증들을 하나하나 분석해서 구매처(+사업자등록번호), 공급가액, 부가세 등을 정리할 수 있다.

물론 gemini-3-pro, chatgpt-5.2-codex 등도 훌륭한데, 대답의 양과 속도, 품질 측면에서 Kimi-K2.5가 가장 마음에 들었다. 게다가 가격도 싸다 하니 조만간 API 결제할 듯...

지난 몇주간 OpenClaw를 사용해봤고, 앞으로도 계속 쓸 것 같다. 그 동안 몇가지 느낀 점 정리해본다.

1. Apple Intelligence가 이런 컨셉이어야 하지 않을까?

물론 많은 사람들이 보안 측면에서 우려를 한다. 내 PC에 대한 제어권을 넘겨주니 당연한 반응이라 생각한다. 그럼에도 불구하고 Apple이 계속 미루고 있는 Apple Intelligence는 바로 이런 것이어야 하지 않았을까 생각이 든다.


Apple의 과거 Knowledge Navigator 영상이 떠오르는 건 나 뿐일까?

웃긴건 OpenClaw 덕분에 local LLM을 돌려보려고 Mac Mini가 엄청 팔리고 있다고 한다. 역시 하드웨어를 잘 만드는게 최고인가 싶다.

2. 보안 문제

앞서 언급했지만 많은 이들이 걱정하는 부분이다. 이미 몇몇 대기업들은 사용을 금지시켰다는 얘기도 들린다.

그러나 보안은 결국 사용자의 문제라고 난 생각한다. 아무리 엄격한 보안이어도 사용자가 허술하게 관리하면 허술해질 수 밖에 없다.

OpenClaw는 많은 제어권을 가져가는 것으로 보이지만, 실제 사용해보면 내 허락없이는 그다지 많이 접근하지 않는다. 오히려 답답해서 '그 정도는 니가 직접 실행해서 찾아볼 수 있지 않아?' 라고 내가 대답할 정도.

물론 ClawHub에 올라간 몇몇 스킬에 악성코드가 발견되었다는 말도 들리긴 하던데 기본적으로 내가 쓰는 OpenClaw는 'ClawHub를 뒤지느니 제가 직접 만들게요' 라며 스킬들을 만들어 쓴다. 앞으로도 ClawHub 보다는 자작 정책을 계속 유지할 생각이다.

3. 사업의 방향

실력보단 취향이 중요함을 OpenClaw가 입증했다. 사업을 하는 입장에서 앞으로의 방향을 늘 생각하게 되는데 AI 때문에 과감히 포기해야 하는 부분이 있고 AI 덕분에 더 집중해야 하는 부분이 있는 것 같다. 집중해야 하는 건 결국 AI가 아직 해주지 못하는 부분, 피지컬 AI가 나오기 전 단계의 그 어떤 것이어야 하지 않을까?

2025년 10월 12일 일요일

Qualcomm의 Arduino 인수에 대한 짧은 생각

 오픈소스 하드웨어 진영의 반발이 큰건 이해가 된다. 정작 이해가 안되는건 Arduino를 인수하는게 Qualcomm에게 어떤 도움이 되는지 질 모르겠다. 

Arduino는 오픈소스 진영, 특히, IoT와 Maker movement에 막강한 영향력을 미치는 회사다. Arduino의 강점은 빠른 프로토타이핑과 사용자 친화력이다. 그런데 현업에서 들여다보면 상용 제품 개발에 그대로 사용하는 경우는 글쎄… 내 경험상 거의 없다. 

아주 간단한 finite state machine을 갖는 응용, 그래서 8-bit MCU level에서 빠르게 개발해서 PoC를 확보하는 측면에서는 도움이 된다. 하지만 상용 레벨까지 가려면 여러가지 기능의 추가 개발로 인한 개발 도구 및 프레임워크의 한계에 부딪힐 수 밖에 없고 원가 절감의 압박에 ST의 에코 시스템 등으로 다시 개발하는 경우가 많다. 기능이 많아지면 Linux 기반으로 가는 경우도 많다  

게다가 Qualcomm은 주력이 AP이다. 간단한 기능을 하는 MCU 시장은 아니다. AP를 위한 응용 개발 프레임워크로 Arduino로 해보려는건 아닐 것이다. Arduino가 편하긴 해도 Linux를 대체할 수 있는건 아니다. Qualcomm이 ST가 구축한 막강한 MCU 시장을 넘보는건가? 그렇다면 Arduino 인수가 도움이 될까? 글쎄…