분류 전체보기 454

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 8 - debugsfs 드라이버 코드

안녕하세요.   지금까지 디버깅방법을 알아봤습니다. 그런데 커널 소스를 수정하는 것에 낯설게 느껴지고 수정하다가 부팅이 안되면 어떡하지 약간의 불안감도 있을 것입니다. 그래서 저도 코드를 작성할 때 한번 더 확인하고, 기존의 작업했던 내용은 SD Card 내용을 전체 백업을 하였습니다.  사실 커널 코드를 잘못 입력하거나 실수하면 시스템이 오동작할 수 있습니다. 즉 부팅이 안될 수 있습니다. 그래서 책에서는 이것을 조금 방지하고자 debugfs 드라이버 코드를 알려줍니다.  1. debugfs 드라이버 원리  전역 변수처럼 변수를 셀에서 설정 값을 주었을 때만 코드가 작동하고, 재부팅하거나 설정값을 초기화하면 원래코드로 동작하는 간단한 원리입니다.   그러나 커널 코드다 보니, 드라이버 파일로 만들어 작..

IT/Linux Kernel 15:16:35

부의 마스터키(UNLOCK IT), 슈퍼리치 황금의 문을 여는, 독서후기

1. 책 선택 이유  잘 알려진 사람 말고 다른 부자들에 대한 이야기가 궁금해서 찾다 읽어보았습니다.   2. 간략한 내용 소개당신 인생의 ‘부자의 문’을 열어라!빈털터리에서 억만장자가 된, 댄 록이 알려주는 부자가 되는 공식! 당신이 정말 아무것도 없는 빈털터리라고 하더라도‘부의 마스터키’를 얻는다면 이미 부자의 문에 들어선 것이다 당신이 이 책에서 얻을 수 있는 것댄 록은 ‘가난한 아시안 이민자’에서 ‘15만 불의 빚쟁이’를 거쳐 ‘슈퍼리치의 삶’으로 이끌어준 중요한 ‘교훈과 원칙’을 보여준다. 당신이 당신의 커리어를 발전시키고 싶던, 당신만의 길을 개척하던, 망하지 않는 회사를 세우고 싶은 사람이던, 당신에게 유용한 아이디어들을 소개한다.댄 록이 ‘금전적 성공에 대한 철학’을 이끌어준 한 가지 키워..

Book Report 2025.03.08

STM32 시리즈 PWM 실습해 보기 - Nucleo-G071RB

안녕하세요. PWM에 대해서 알아보았습니다. 평가보드(NucleoG071RB)에 장착되어 있는 LED를 PWM기능을 이용해서 밝기조절을 해보겠습니다.  1. NucleoG071RB 하드웨어 확인  평가보드에 LED는 몇 개 있지만, 실제로 제어할 수 있는 LED는 1개입니다. PA5핀에 연결되어 있기 때문에 이 핀을 GPIO에서 PWM 출력으로 바꿔 밝기를 조절합니다. (평가보드마다 제어할 수 있는 LED 개수는 다릅니다.)     평가 보드에 LD4로 해서 SMD 타입으로 장착되어 있습니다.    2. 프로젝트 설정  이전 내용과 크게 변화된 것은 없으므로 새로운 STM32 프로젝트를 만들고 동일하게 RCC 설정합니다. 메인 클럭은 최대 최대 64 MHz로 설정합니다. (G071 최댓값) 1) 핀 설정..

Embedded/STM32 2025.03.07

STM32 시리즈 PWM 이론 학습하기 - Nucleo-G071RB

안녕하세요.  PWM에 대해서 알아보고 Nucleo-G071RB 평가보드에 있는 LED를 이용해서 실습해 보겠습니다.  1. PWM 이란  PWM(펄스폭 변조, Pulse Width Modulation)은 마이크로컨트롤러에서 가장 널리 사용되는 신호 생성 기법 중 하나로, 신호의 주파수는 일정하게 유지하면서 듀티 사이클(Duty Cycle)을 조절하여 출력 전력을 조절하는 방식입니다.   2. PWM 기본 개념 1) PWM 요소  PWM 신호는 일정한 주기를 가지며, HIGH 상태와 LOW 상태가 반복됩니다. 여기서 중요한 두 가지 요소는 다음과 같습니다  주파수 (Frequency, f): PWM 신호가 1초에 반복되는 횟수입니다. 다르게 말하면, 1초에 파형이 몇 개 나오는가? 1초에 1개 파형이 나..

Embedded/STM32 2025.03.06

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 7 - ftrace 사용법 및 분석해 보기

안녕하세요. 이전 글에서 printk()와 dump_stack() 함수를 확인했습니다. 두 함수에는 사용할 때 자주 호출하는 함수에는 사용하기가 어렵다는 주의점이 있었습니다. 이런 부족한 점을 충족하기 위한 커널 디버깅 소프트웨어가 필요했습니다.   1. ftrace 란?  기존의 커널 디버깅 부족함을 해결해 줄 수 있는 요구사항(함수 호출 흐름을 소스코드 수정하지 않고 확인하고 싶다, 커널의 세부 실행 정보를 출력 원함, 수십 번 호출해도 성능에 부담 주지 않았으면 함, 커널 로그도 함께 보고자 함)을 충족하는 디버깅 기능의 소프트웨어입니다.  ftrace 특징으로  - 인터럽트, 스케줄링, 커널 타이머 등의 커널 동작 추적  - 코드 수정할 필요 없이 함수 필터 지정한 함수와 호출한 함수 콜 스택 출..

IT/Linux Kernel 2025.03.05

STM32 시리즈 ADC 실습하기 - Nucleo-G071RB

안녕하세요.  이전 글에서 ADC와 DAC에 이론에 대해서 간략하게 확인해 보았습니다. 이번에는 ADC를 폴링과 인터럽트모드로 사용하는 방법에 대해서 알아보겠습니다.  1. ADC 프로젝트 1) 프로젝트 생성  이전 내용에서 프로젝트 생성하는 방법을 읽었다는 전제로 간단하게 진행하도록 하겠습니다.  새로운 STM32 프로젝트를 생성하고 가지고 있는 평가보드를 선택합니다. 원하는 프로젝트 이름으로 입력하고 생성합니다.  이전과 동일하게 System Core의 RCC와 RTC 등 기본 설정을 해줍니다. 2) ADC 설정 (폴링, Polling)  사용할 ADC 핀을 선택합니다. 여기서는 A0(PA0) 핀을 통해 ADC 기능을 테스트해 보겠습니다.    PA0핀 설정을 ADC1_IN0로 선택합니다. 그리고 나..

Embedded/STM32 2025.03.03

작은 기부 문화 만들기 13 - 3.1절 외침 뒤 군자금 모은 독립유공자, 후손에게 집을

안녕하세요.   3월 1일은 일본 제국의 지배에 항거해 한국의 독립을 선언한 3.1 운동을 기념하는 날이다. 그리고 독립을 위해 싸우시고, 도우신 분이 있다면 도와드려야 하겠지요.  그렇지 않다면, 누가 가족과 후손을 위해서 희생을 할까요. 작게나마 후손분들에게 도움이 되었으면 하는 마음에 이번 달은 이곳에 기부하였습니다. 1. 모금함 소개  독립을 위해 모든 것을 바친 독립운동가, 곽병도 선생독립운동가 곽병도 선생은 조선13도총간부로 군자금 모집에 중추적인 역할을 하신 분입니다. 1918년 10월, 경상북도에서 군자금을 모집하려고 했으나 실패하고, 1년 뒤인 1919년 10월, 영주에서 군자금 모집에 성공해 대한민국 임시정부에 보내어 독립운동에 힘을 더해주셨습니다. 군자금 모집을 꾸준히 해오던 중 19..

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 6 - printk와 dump_stack 함수

안녕하세요.  이번 시간은 printk()와 dump_stack()함수에 대해 학습하고 간단하게 디버깅 하는 방법을 알아 보겠습니다.  1. printk 함수  이미 C언어를 접해본 분이라면 printf 함수에 대해 잘 알고 있을 거라 생각됩니다. 함수 끝에 k가 붙은 것처럼 kernel에서 사용하기 위한 함수라는 것을 느낄 수 있을 것입니다.  이미 커널의 수많은 내부 함수에서도 printk 함수를 이용해서 에러 정보를 커널 로그에 출력하고 있습니다.   아래 내용은 책에서 소개한 porcess.c 파일의 일부 내용입니다. __show_regs 함수가 실행되면 레지스터 내용을 커널 로그에 출력하는 일부 코드입니다.   1) printk 형식  int printk(const char *fmt, ...);..

IT/Linux Kernel 2025.03.01

[교육후기] OpenCV와 TensorFlow Lite를 활용한 라즈베리 파이 지능형 비전 서비스 개발 - 3일 차(마지막 날)

안녕하세요.  이번에는 교육 마지막 날로 TF Lite 사용을 좀 더 활용하고 웹서비스와 연동하는 내용들을 진행되었습니다. 그리고 마지막 궁금한 사항들에 대해 질문하고 테스트한 소스들을 정리하는 시간으로 마무리했습니다. 1. node.js 사용해 보기 1.1 node.js 간략 설명   - V8엔진으로 빌드된 이벤트 기반 자바스크립트 런타임 플랫폼(JS를 기계어로 변환)  - js 엔진을 서버 쪽에도 추가해서 양쪽에서 js를 사용할 수 있도록 한 것이다.  - npm: Node.js용 패키지 매니저  - libuv: 비동기라이브러리, Node.js는 싱글 스레드이지만, libuv 라이브러리를 통해 스레드 처리가능, 콜백기반 모델로 동작할 수 있도록 설계  - 응답성이 좋고, 여러 라이브러리 많음, 개발자..

STM32 시리즈 ADC와 DAC 이론 학습 - Nucleo-G071RB

안녕하세요.  Uart 실습을 끝냈고, 이번에는 ADC, DAC에 대해서 간단히 알아보겠습니다. 1. ADC와 DAC의 개요  전자기기에서 신호를 다룰 때, 아날로그(Analog) 신호와 디지털(Digital) 신호 간의 변환이 필요합니다. ADC(Analog to Digital Converter)와 DAC(Digital to Analog Converter)는 이러한 변환을 수행하는 핵심 장치입니다.   ADC: 아날로그 신호를 디지털 신호로 변환하는 장치 (마이크, 온도센서) DAC: 디지털 신호를 아날로그 신호로 변환하는 장치 (오디오 플레이어, 신호발생기)  이러한 변환 기술은 오디오 처리, 센서 데이터 변환, 영상 신호 처리, 통신 시스템 등 다양한 응용 분야에서 필수적입니다.   2. ADC(A..

Embedded/STM32 2025.02.27

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 5 - 디버깅과 ftrace 예습

안녕하세요.  이번 장에서는 디버깅하는 방법 예습차원에서 중요성, ftrace 내용을 알려주고 있습니다.내용 잘 학습해 보아요. 1. 디버깅의 중요성 1) 임베디드 및 BSP 개발 도중 만나는 대표적인 문제  - 부팅 도중 커널 크래시 발생 - 인터럽트 핸들러를 설정했는데 인터럽트 핸들러가 호출되지 않음 - 시스템 응답 속도가 매우 느려짐 - 파일 복사가 안됨 - 다른 개발자가 작성한 커널 코드를 만날 가능성이 높음   (디바이스 드라이버는 커널함수로 구성되어 있으며 각 서브 시스템을 담당한 개발자가 작성한 코드이기 때문입니다.)  그렇기 때문에 정상적인 동작할 때 몇 가지 내용 파악이 필요   - 함수가 실행될 때 변경되는 자료구조 - 함수가 실행되는 빈도와 실행 시간 - 실행 중인 코드를 어떤 프로세..

IT/Linux Kernel 2025.02.26

[교육후기] OpenCV와 TensorFlow Lite를 활용한 라즈베리 파이 지능형 비전 서비스 개발 - 2일 차

안녕하세요.  1일 차 내용에 이어서 진행하지만, 교재가 얇게 제작되어 추가적인 부분은 강사분의 pdf 교재로 진행했습니다.  Raspberry Pi 특성도 있고 과정에 IoT 내용도 있어 몇 가지 하드웨어 제어해 보았습니다.  1. Raspberry Pi 하드웨어 제어 실습  간단하게 Raspberry Pi에 있는 IO Pin을 이용해서 Button과 LED제어 테스트를 합니다.  Header Pin에 점퍼선을 그냥 연결해도 되지만, 연결성을 좋게 하기 위해서 액세서리 모듈과 브레드보드를 사용했습니다. LED는 GPIO2, Button은 GPIO4에 연결합니다.   라즈베리파이 LED와 Button 연동 파이썬 소스 확인  Button을 누르면 High(1) 신호를 보내고, 그것을 확인해서 High(1..

STM32 시리즈 UART 실습 학습 - Nucleo-G071RB

1. Nucleo-G071RB 보드의 UART 연결(평가보드 UART와 PC 연결 형태) 1) Nucleo-G071RB 보드 구성  외부 핀을 연결해서 테스트할 수 있지만, 평가보드(Eval Board)에는 ST-LINK와 함께 시리얼통신을 할 수 있는 가상 COM PORT를 지원합니다.      보드에 전원을 인가하고 장치 관리자의 포트를 확인하면 STLink Virtual COM PORT가 추가되어 있습니다. STM32 CUBE IDE 프로그램을 설치할 때 보통 같이 설치가 되나 그렇지 않다면 검색을 해서 별도로 설치해 주어야 합니다.    2) Nucleo-G071RB UART 회로 부분  STM32G071의 UART2_RX, TX와 STM32F103의 STLK_RX, TX가 연결되어 시리얼 통신을..

Embedded/STM32 2025.02.23

[교육후기] OpenCV와 Tensorflow Lite를 활용한 라즈베리 파이 지능형 비전 서비스 개발 - 1일 차

안녕하세요.    예전과 달리 AI 관련 뉴스가 많고, 이런저런 강의를 보고 있는 중에 3일 과정인 "OpenCV와 Tensorflow Lite를 활용한 라즈베리파이 지능형 비전 서비스 개발"이라는 교육이 있어서 수강해 보았습니다.  전체내용은 양도 많기도 해서 간략하게 확인하는 겸 이런 과정으로 진행되는구나 참조로 보면 좋을 듯합니다.  1. 출석 확인  집체교육으로 진행되었고 7시간으로 10시 ~ 6시간 교육이 진행되며, 스마트폰을 통해 입실, 퇴실을 확인하였습니다.   2. 라즈베리파이 준비 2.1 하드웨어 준비   LCD, RaspberryPi 4, 센서 키트와 소형 모니터, 키보드, 마우스를 나눠주고 연결하는 방법부터 시작합니다.  교재내용에 맞춰 설치하는 것을 진행하고, raspberry.or..

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 4 - 전처리 코드 생성과 objdump 사용

안녕하세요.   라즈베리 파이 커널을 설치하고 나머지 뒷부분을 마무리하도록 하겠습니다.  리눅스 커널을 빌드하는 과정에서 전처리코드를 생성하는 방법이 나옵니다.커널에는 많은 양에 매크로가 소스분석에 걸림돌이 됩니다. 그래서 소스코드를 분석할 때 전처리 코드를 함께 보는 것을 추천하며 추출하는 방법 두 가지를 알려 줍니다.  1. 전처리 코드 생성 1) 전체 전처리 파일 추출  이전 글에서 처럼 root 권한을 얻어서 다음 내용을 진행합니다.  리눅스 커널 소스 디렉터리 안에 Makefile이 있습니다.  대략 420번 줄 KBUILD_CLAGS에 "-save-temps=obj \"를 추가해 주고 build 스크립트를 실행해 주면 전체 소스 파일에 전처리코드가 담긴 *.i, *.s 파일이 생성됩니다. 약 ..

IT/Linux Kernel 2025.02.20

생각이 글이 되기까지, 10대들을 위한 글쓰기 수업, 독서후기

1. 책 선택 이유  이전 책에서 블로그 글쓰기에 대해서 강조한 것이 있어서, 글을 조금 잘 쓰고 싶다는 생각이 들어서 찾아보았습니다. 글쓰기 책 중에 유명한 것은 글자가 작고 어렵게 느졌습니다. 10대들을 글쓰기 수업이라는 부제목이 있어 조금 쉽게 설명하고 있을 거라고 생각했습니다.  2. 간략한 내용 소개  생각의 확장, 생각이 자라는 글쓰기글을 쓰면서 생각하고, 글을 다시 쓰면서 생각이 자란다 우리에게 글쓰기가 왜 필요할까? 생각을 명확히 파악하려면 어떻게 해야 할까? 생각보다 답은 간단하다. 일단 글로 써라. 글쓰기라는 도구를 이용해 무질서한 머릿속에서 내 생각을 뽑아내는 것이다. 누군가는 생각이 먼저 정리되지 않으면 글을 쓸 수 없다고 말할지 모른다. 이 책의 저자는 그런 사람들에게 놀라운 메시..

Book Report 2025.02.19

STM32 시리즈 UART 이론 학습 - Nucleo-G071RB (STM32F 차이점)

안녕하세요.   이번에는 UART 이론 내용을 다뤄 보겠습니다. 그런데 기존의 레지스터와 조금 변경된 내용이 있어 같이 내용을 추가해 보았습니다. STM32 시리즈마다 다를 수 있으므로, 평가보드나 사용하고 있는 MCU의 DataSheet는 꼭 확인해 보시기 바랍니다.   1. UART (Universal Asynchronous Receiver/Transmitter)란? 1) 설 명  UART는 직렬 통신(Serial Communication) 방식 중 하나로, 데이터를 비동기 방식(Asynchronous)으로 송수신하는 하드웨어 모듈입니다. 즉, 데이터를 1비트씩 순차적으로 보내는 방식이며, 클럭 신호 없이 송신기와 수신기가 같은 전송 속도를 유지해야 합니다.  2) UART의 특징  - 비동기 방식 ..

Embedded/STM32 2025.02.18