본문 바로가기

분류 전체보기

(48)
FreeRTOS Heap: heap_3, heap_4, heap_5 심층 분석 FreeRTOS 힙 메모리 관리란?FreeRTOS는 임베디드 시스템의 다양한 요구사항을 충족하기 위해 다섯 가지 힙 메모리 할당 스킴을 제공합니다. 이 스킴들은 FreeRTOS/Source/portable/MemMang/ 디렉토리에 각각 heap_1.c, heap_2.c, heap_3.c, heap_4.c, heap_5.c 파일로 제공됩니다.왜 FreeRTOS는 자체 메모리 관리를 제공하는가?표준 C 라이브러리의 malloc()과 free() 함수는 임베디드 환경에서 다음과 같은 문제를 가질 수 있습니다:문제점설명가용성작은 임베디드 시스템에서 항상 사용 가능하지 않음코드 크기구현이 상대적으로 크고 귀중한 코드 공간 차지스레드 안전성대부분 스레드 안전하지 않음결정론적 실행실행 시간이 호출마다 다름단편화메모..
Linux crash dump Linux 커널 디버깅 및 시스템 분석 관점에서 FADump, Minidump, Kmemdump는 시스템 크래시(Crash) 발생 시 메모리 상태를 저장(덤프)하는 서로 다른 메커니즘을 의미합니다.이들은 주로 사용되는 아키텍처(서버 vs 임베디드)와 덤프의 범위(전체 메모리 vs 특정 영역)에 따라 구분됩니다.1. FADump (Firmware Assisted Dump)설명:FADump는 주로 IBM Power (ppc64le) 아키텍처에서 사용되는 덤프 메커니즘입니다.기존의 kdump가 크래시 발생 시 커널 내부에서 kexec를 통해 캡처 커널을 로드하는 것과 달리, FADump는 하드웨어 펌웨어의 도움을 받습니다.시스템이 크래시되면 펌웨어가 메모리 내용을 보존한 상태로 시스템을 완전히 리셋(Reset..
구글 Jeff Dean, Sanjay Ghemawat의 C++ 중심 일반 성능 튜닝 가이드 다 읽어 볼 자신은 없지만... https://abseil.io/fast/hints.html abseil / Performance HintsOver the years, we (Jeff & Sanjay) have done a fair bit of diving into performance tuning of various pieces of code, and improving the performance of our software has been important from the very earliest days of Google, since it lets us do more for more uabseil.io 요약 이 문서는 Google의 Abseil 팀(Jeff Dean, Sanjay Ghemawat 등..
Linux: pstore, ramoops pstore (Persistent Storage)리눅스 커널이 크래시(Crash)가 발생하거나 재부팅되는 상황에서도 로그 데이터를 보존하기 위해 사용하는 파일시스템 인터페이스입니다. 1. pstore의 핵심 역할일반적인 리눅스 시스템은 커널 패닉(Kernel Panic)이 발생하면 시스템이 멈추기 때문에 디스크에 로그를 기록할 수 없습니다. 따라서 재부팅 후에는 왜 죽었는지 원인을 찾기가 어렵습니다.pstore는 이 문제를 해결하기 위해 커널이 죽기 직전의 데이터(dmesg, console 등)를 사라지지 않는 저장소에 기록하고, 재부팅 후에 유저가 파일처럼 읽을 수 있게 해줍니다.2. pstore의 구조 (아키텍처)pstore는 프론트엔드(Frontend)와 백엔드(Backend) 구조로 나뉩니다.Fr..
임베디드 시스템을 위한 리눅스 커널 크리티컬 이슈 해결 및 분석 전략 1. 사후 포렌식(Post-Mortem Forensics): 임베디드 블랙박스 전략엔터프라이즈 서버와 달리, 임베디드 시스템은 커널 패닉 발생 시 콘솔 출력을 확인할 수 없는 경우가 대부분이다. 따라서 항공기의 블랙박스(Flight Data Recorder)와 같이 시스템 붕괴 직전의 커널 링 버퍼(dmesg), 콜 트레이스(Call Trace), 레지스터 상태를 보존하는 메커니즘이 필수적이다.1.1 휘발성 메모리 보존 기술: ramoops와 pstore 아키텍처임베디드 리눅스에서 커널 패닉 로그를 캡처하는 가장 표준적이고 효과적인 방법은 pstore(Persistent Storage) 파일시스템의 ramoops 백엔드를 사용하는 것이다. ramoops는 시스템의 RAM 중 일부를 커널이 초기화하지 않도..
wsl vhdx mount wsl 에 vhdx 이미지를 마운트 시키기 Windows 11 에서 확인윈도우 시작 버튼에서 "가상 디스크 만들기" 선택 VHD 생성하기 버튼. 정보 입력하면 생성. 256GB의 용량을 Dynamic 으로 생성. Attach 하고 포맷하면 바로 윈도우즈에 디스크로 활성화 된다.하지만 wsl 에 추가해서 사용하려는게 목적이다.포맷과 Attach 는 건너뛰고 mount를 시도했다. Gemini, ChatGPT 둘다 이 문제를 해결 못하고 이런저런 방법은 다 알려주는데... wsl --mount --vhd "G:\vm\vhd\mt.vhdx" --bare 두놈 다 "--vhd" 를 빼먹은 것... ext4 포맷 후 사용하기 성공. 호스트 윈도우즈와 PATH 가 공유되는 것을 막으려면/etc/wsl.conf 파..
Linux DRM 하위 시스템 학습 노트 Linux DRM 하위 시스템 학습 노트개요Direct Rendering Manager(DRM)은 Linux 커널의 GPU 인터페이스 하위 시스템이다. 초기에는 X Server의 Direct Rendering Infrastructure를 위한 커널 컴포넌트로 개발되었으나, 현재는 Wayland, SDL2, Kodi 등 다양한 그래픽 스택에서 활용된다.DRM의 핵심 목적은 여러 사용자 공간 프로그램이 GPU 리소스를 충돌 없이 협력적으로 사용할 수 있도록 중재하는 것이다. fbdev와 같은 기존 API는 단일 프로그램이 프레임버퍼를 관리하는 단순한 시나리오에는 적합했지만, 복잡한 3D 가속 환경에서는 심각한 충돌 문제가 발생했다.핵심 아키텍처DRM Core와 Driver 분리DRM은 두 가지 핵심 구성 요..
MQTT 서버까지 진행 STM32 보드에서 수집한 센서 데이터를 전송하고, 실시간 웹 대시보드에서 확인 한 구조를 일단 만들었다.데이터 전송 구조STM32: 온습도 센서에서 데이터 수신, ESP32에 전송ESP32: WIFI/MQTT로 Raspberry pi(Broker)에 센서 데이터를 publishRaspberry pi: Broker 동작 + Web server는 센서 데이터를 subscribeWiFi Provisioning처음엔 간단히 SSID, password 정보를 하드코딩 해두었다. ESP32와 RaspberryPi 사이에 구현되어 있는 BLE를 통해 WIFI 설정을 하는 것으로 기능을 추가했다. MQTT 브로커 주소도 설정하도록 추가했다.ESP32에 BLE 구조 추가기존에 온습도 데이터를 전송하는 것과 별개로 p..
ESP32-C3 https://www.espressif.com/en/products/socs/esp32-c3 ESP32-C3 Wi-Fi & BLE 5 SoC | Espressif SystemsESP32-C3 is a single-core Wi-Fi and Bluetooth 5 (LE) microcontroller SoC, based on the open-source RISC-V architecture. It strikes the right balance of power, I/O capabilities and security, thus offering the optimal cost-effective solution for connected dewww.espressif.com Datasheethttps://www.espre..
FreeRTOS 센서마다 태스크 센서마다 태스크를 만들도록 변경해봤다. https://github.com/ipondroid/mcus GitHub - ipondroid/mcus: STM32 - ESP32 - RaspberryPiSTM32 - ESP32 - RaspberryPi. Contribute to ipondroid/mcus development by creating an account on GitHub.github.com 왜 바꿨을까?처음에는 단순하게 DHT22 센서 하나만 읽어서 온습도 데이터를 LCD에 표시하는 것을 목표로 했고, CAN과 BLE를 연결해보는데 집중했다. 이제 센서를 추가해보기로 하면서 기존 구조를 손보기로 했다.기존 구조의 한계이전에는 단순하게 하나의 태스크에서 모든 걸 처리했다.void SensorTask(..