전체 글 471

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

안녕하세요.   이전 글에서는 유저공간에서 실행되는 프로세스를 봤습니다. 이제 커널 공간에서 실행하는 프로세스에 대해 알아보는 시간입니다.   1. 커널 스레드  커널 프로세스는 커널 공간에서만 실행되는 프로세스이며 대부분 커널 스레드 형태로 동작합니다. 리눅스 시스템 프로그래밍에서 데몬과 비슷한 처리를 하는데 데몬과 커널 스레드는 백그라운드 작업을 실행하면서 시스템 메모리, 전원 제어동작 수행합니다. 커널 스레드 특징  커널 공간에서만 실행함  유저 영역과 시스템 콜을 받지 않고 동작하는 것이 데몬과 차이  실행, 휴면 등 모든 동작을 커널에서 직접 제어 관리  대부분 커널 스레드는 시스템이 부팅할 때 생성하고 종료할 때까지 백그라운드로 실행  2. 커널 스레드 종류 1) 커널 스레드 항목 확인  ps..

IT/Linux Kernel 13:34:29

[C++] 생성자(Constructor)에서 조금 알아두면 좋은 읽을거리

안녕하세요.  C++언어를 알고 있는 분이라면, 생성자와 소멸자에 대해서 기본적인 것은 다 잘 알고 있을 거라고 생각합니다. 그중에서 한 번쯤 다시 기억하고 있으면 좋은 것에 대해서 공유해 보겠습니다.   1. 생성자(Constructor)에 관해  생성자(Constructor)라고 하면 기본적으로 객체가 생성될 때 자동으로 호출되는 특수한 멤버 함수입니다. 아래와 같은 기본적인 특징을 가지고 있습니다.  클래스와 같은 이름을 가지며 반환형이 없다. 객체 초기화를 담당한다. 매개변수를 받을 수 있으며, 여러 개의 생성자를 오버로딩할 수 있다.  1) 생성자 인자  생성자 인자가 다르면 디폴트 생성자의 형태도 같아야 합니다. 함수 오버로딩과 비슷할 수 있는데 객체 생성할 때 생성자도 이것을 지켜야 합니다...

Programming/C, C++ 2025.04.01

한 시간 만에 게임 만들기, 독서후기

안녕하세요.  1. 책 선택 이유  C++ 학습하면서 재미있게 응용해 볼 것을 찾는 중에, 한 시간 만에 게임을 만들 수 있고, 콘솔 화면에서 고전 게임을 테스트해 볼 수 있다고 나와서 확인해 보았습니다.  2. 간략한 내용 소개  간단한 C언어 지식 만으로 만드는 7가지 클래식 게임 게임 엔진의 대중화 이후 게임 개발은 예전보다 매우 쉬워졌지만, 여전히 초보자에게는 높은 벽으로 느껴진다. 그 이유는 여러 가지가 있지만 가장 큰 이유를 하나 꼽자면 ‘추가로 배워야 할 것이 너무 많다’ 일 것이다. 대부분의 작업을 도와주는 엔진을 사용하더라도 엔진의 사용법을 추가로 익혀야만 하며 그것만으로도 별도의 도서가 만들어질 정도이다. 이 도서는 이러한 사전 지식 없이, 오직 간단한 C언어 지식만으로 게임 개발에 도..

Book Report 2025.03.30

Visual Studio(VC++)에서 빌드 시 한글 때문에 에러가 발생과 콘솔(디버깅) 창에 한글이 깨져 나올 경우

안녕하세요.  최근에 Qt로 작업하다가 다시 Visual Studio 2022(VC++)로 확인할 것이 있어 설치해서 소스코드를  확인하다가 한글 출력에 이슈가 있어서 확인한 내용을 남깁니다.  이미 다른 분들도 올린 내용이 있지만, 한글 처리 부분에도 여러 가지 경우가 있다 보니 그중에 이와 유사한 경우가 있지 않을까 해서 정리해 보았습니다.  1. 문제 되는 부분 1   VC++ 코딩 중에 간단하게 printf로 한글을 출력을 출력하려고 간단하게 코드를 작성합니다.    확인 삼아 컴파일을 해보니, 아래와 같이 에러가 발생했습니다. 한글만 없으면 문제없이 컴파일이 되었습니다.  "파일에 0x64 오프셋에서 시작하는 문자가 포함되어 있습니다. 이 문자는 현재 원본 문자 집합에서 잘못된 문자입니다(코드 ..

Programming/C, C++ 2025.03.29

[C++] struct와 class 차이

안녕하세요.    AI가 코딩을 대신해 주고 편리함을 주고 있어 긍정적인 일이기도 하지만, 개발자라서 기본을 놓이고 너무 의존만 하는 것 같아서 다시 기본으로 돌아가보자는 생각으로 기초적인 다시 내용들을 정리해보려고 합니다.   프로그램 언어는 어떤 곳에서 사용하느냐에 따라서 Python, Java, Ruby, R 등 여러 가지 언어가 있지만, 임베디드를 개발하는 곳에서는 아직 C와 C++ 이 상당 부분 차지하고 있습니다.   그중에 C언어에서 C++로 넘어왔다면 클래스와 객체지향 등 여러가지 용어를 들어 보았을 것입니다. Class는 C++에서 중요한 역할을 하고 있습니다.  그런데 한번쯤 C++에서 struct와 class가 무슨 차이가 있을까 생각을 했을 수도 있습니다. 왜냐하면, struct 안에..

Programming/C, C++ 2025.03.28

쓰지 않으면 아이디어는 사라진다, 최상의 아이디어를 끌어내는 메모 발상법, 독서후기

안녕하세요.  1. 책 선택 이유    최근 이런저런 생각이 나서 아이디어 기록하는 방법에 대한 것은 없을까 하다가 읽어보았습니다.  2. 간략한 내용 소개  “연봉 1억 이상, 에이스 직원에게는 아이디어 노트가 있다!” 최상의 아이디어를 끌어내는 메모 발상법  레오나르도 다 빈치, 토머스 에디슨, 스티브 잡스의 공통점은? 짐작하다시피 생존했던 시대는 달랐지만 셋 다 지독한 메모광이었다는 사실이다. 인류 역사상 가장 유명한 셀럽인 다 빈치는 항상 주머니에 수첩을 넣고 다니면서 무엇이든 기록한 것으로 유명하고, 그를 본받아 항상 노트를 들고 다녔다는 발명가 에디슨은 3500권에 이르는 메모장을 남겼다고 한다. 스티브 잡스 역시 매일 자신의 모든 것을 기록할 정도의 메모광이었던 것으로 널리 알려져 있다. (..

Book Report 2025.03.27

Raspberry pi CM4(Bullseye) OpenCV에서 gstreamer를 통해 카메라 영상 출력

안녕하세요.   이전 글(아래링크 창고)을 따라 OpenCV 4.6.0을 설치했다면,  Raspberry pi CM4에 OpenCV 4.6.0과 Contrib 모듈 설치해보기안녕하세요.   에지 컴퓨팅이라고 해서 단말 장치에서 가까운 위치에서 컴퓨팅을 하는 것을 말합니다. 그래서 라즈베리 파이가 단말장치가 되고 여기서 컴퓨팅, 분석까지 하는 것으로 생각해remnant24c1.tistory.com   Bullseyes 32bit에서 libcamerasrc를 사용할 생각으로 gstreamer 최신 버전(1.9.2 혹은 1.20.x)을 다운로드하여서 컴파일할 경우 아래와 같은 컴파일 에러가 발생했습니다.  현재 상황에서는 gstreamer최신 버전을 사용하고자 한다면, Buster OS 버전 혹은 64bit ..

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 12 - 4_4_user_process생성과 종료 과정 분석

안녕하세요.  이전 글에서 4_4_user_process라는 사용자 프로그램을 만들어 ftrace 메시지까지 만들어 봤습니다. 책에서는 raspbian_proc로 만들어 테스트한 내용입니다. 내용은 거의 동일합니다.   ftrace 메시지를 바탕으로 프로세스가 어떻게 생성되고 종료하는지 과정을 분석하는 내용입니다.  1. ftrace_log.c 분석 준비  분석할 내용은 get_ftrace.sh를 실행 디렉터리에 ftrace_log.c 파일로 되어 있을 것입니다.파일을 열어 확인합니다.  이전에 봤던 메시지 형태입니다. 그런데 얼마 실행하지 않은 것 같은데 많은 양의 메시지가 저장되어 있습니다. 전체 다 보는 것은 아니고 실행했던 파일 부분을 찾아서 보겠습니다.  rpi_kernel_src $ vim f..

IT/Linux Kernel 2025.03.23

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 11 - _do_fork() 흐름 파악과 ftrace 메시지 추출

안녕하세요.    _do_fork() 함수를 알아보기 위한 사전 정보가 조금 필요에 _do_fork() 마무리하지 못해서 추가 부분을 정리해 봅니다.  1. 유저 레벨 프로세스 생성 시 _do_fork() 함수처리 흐름  유저 레벨 프로세서 생성할 때 흐름은 아래와 같이 fork() 함수 호출하면 glibc 통해 시스템콜을 발생하고 이에 대응하는 sys_clone() 함수 호출합니다. 이후 호출을 따라가면 _do_fork() 함수를 호출합니다.  1) sys_clone 함수  sys_clone() 함수 내부를 보면 return 값(PID)을 받기 위해 _do_fork() 함수를 호출합니다.  SYSCALL_DEFINE5 매크로와 함께 커널 소스 빌드하는 과정에서 sys_ 접두사가 붙여 sys_clone으..

IT/Linux Kernel 2025.03.20

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 10 - 프로세스 생성

안녕하세요.   프로세스와 스레드에 대해 보았고, 이번에 생성하는 과정을 확인을 알아보겠습니다.  진행하기 앞서서 유저 모드와 커널 모드 부분을 먼저 알고 시작해야 할 것 같아서 앞쪽 내용에 추가해 보았습니다. 알고 있는 내용이면 이 부분은 넘어가고 아래쪽 2. 프로세스 생성부터 보면 됩니다.  1. 유저 모드와 커널 모드 그리고 영역  유저 모드와 커널 모드가 나오면, 권한에 관한 것이라고 알 수 있는데, 공간에 대한 개념이 같이 나오기 때문에 혼돈이 있을 것 같아서 나눠서 생각해 보면 좋을 것 같아서 추가해 보았습니다. 1) 유저 모드와 커널 모드 (1) 유저 모드(User Mode)  - 권한 수준: 제한된 권한을 가진 모드입니다. 응용 프로그램(예: 웹 브라우저, 문서 편집기)이 주로 유저 모드에..

IT/Linux Kernel 2025.03.17

요즘 어른을 위한 최소한의 인공지능 이야기, 도서후기

1. 책 선택 이유   AI 관련 지식을 소홀히 하고 있는 것 같아서 조금 빠르게 읽어 볼 만한 책을 찾다가 읽어보았습니다.   2. 간략한 내용 소개   인공지능 기원부터 미래까지,현재 인공지능에 관해 알 수 있는 모든 것! 연일 인공지능에 관한 새로운 소식이 쏟아진다. 업데이트 속도도 빠르다. 잠깐만 소식을 놓쳐도 뒤처진 느낌이 들 정도다. 인공지능이 뭔지 찬찬히 이해할 틈도 없이 말이다. 찬찬하고 친절한인공지능 입문서이자 교양서 이 책은 인공지능에 관심은 많지만 잘 모르는 이들을 대상으로 쓴 인공지능 입문서다. 인공지능 기원부터 미래까지 친절하게 설명한다. 책은 독자들이 접근하기 쉽게 질답 형식으로 구성되어 있다. 저자는 IT 분야 기자로 오래 일했고, 양육자이기도 하다. 기자로 일하면서 받은 질문..

Book Report 2025.03.15

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 9 - 프로세서란

안녕하세요.   드디어 디버깅의 영역에서 벗어나 프로세스의 영역으로 들어오게 되었습니다. 프로세스 부분도 양이 많아서, 배워야 할 것이 적지 않을 것으로 생각됩니다.  책 내용을 천천히 정리해 가는 것으로 생각하면 좋을 것 같습니다.  1. 프로세스란?  리눅스 개발자 입장에서 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 의미합니다.  프로세스를 관리하는 자료구조이자 객체를 태스크 디스크립터(task descriptor)라고 부르고 task_struct구조체로 표현합니다. 이 구조체에 프로세스가 사용하는 메모리 리소스, 프로세스 이름, 실행 시각, 프로세스 아이디(PID), 프로세스 최상단 주소와 같은 속성정보가 지정되어 있습니다. 그러나 이것만으로 프로세스의 흐름까..

IT/Linux Kernel 2025.03.12

Qt QMap의 iterator와 auto 상식 +1

안녕하세요.   간단하게 QMAP 클래스 사용하다가 iterator방법에 대해서 좀 더 알고 있으면 좋을 것  같아서 간략하게 남겨 보았습니다. 테스트 환경은 Qt 6.8.1입니다.  1. QMap은?  Qt 프레임워크에서 제공하는 데이터 컨테이너 클래스로, 키(key)와 값(value)의 쌍을 저장하는 연관 컨테이너입니다. 이는 정렬된 맵(sorted map) 자료 구조로 구현되며, 키가 자동으로 정렬됩니다.   QMap 사용법은 알고 있으리라 생각되어서 자세한 방법은 넘어가도록 하겠습니다. 간단하게 설명하자면 템플릿(template) 또는 제네릭(generic) 타입으로 변수를 선언하고, 키와 값을 쌍으로 저장하거나 읽으면 됩니다. QMap map;map["Apple"] = 1;map.insert("..

Programming/Qt 2025.03.11

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

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

IT/Linux Kernel 2025.03.09

부의 마스터키(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