Raspberry Pi 27

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

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

IT/Linux Kernel 15:16:35

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

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

IT/Linux Kernel 2025.03.05

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 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 라이브러리를 통해 스레드 처리가능, 콜백기반 모델로 동작할 수 있도록 설계  - 응답성이 좋고, 여러 라이브러리 많음, 개발자..

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 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..

[교육후기] 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

디버깅을 통해 배우는 리눅스 커널의 구조와 원리, 도서 공부하기 2 - Raspberry 4 설치(kernel 4.19)

안녕하세요.   설치하는 것까지 자세히 적으려고 한 것은 아닌데 최대한 책과 동일한 커널 버전의 라즈베리파이 버전으로 맞추려고 했습니다.  그러나 몇 가지 문제가 생겨 해결한 방법도 같이 공유하려고 합니다.   1. 라즈베리파이 OS (라즈비안) 설치  Raspberry Pi Imager로 설치하면 되는 되는 것 아니냐 할 수 있지만 Imager로 바로 설치할 경우 최신 버전의 라즈베리파이 OS이 설치되고 커널 버전도 높아 책과 차이가 발생할 것입니다. imager의 32bit Legacy 버전도 bullseye입니다. Raspberry Pi Imager 다운로드https://www.raspberrypi.com/software/    이것저것 해본 내용을 적어 봅니다.   운영체제 선택에서 우리가 받은 ..

IT/Linux Kernel 2025.02.14

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 학습 1 - 시작 준비

안녕하세요.  시간이 조금 지났지만, 디바이스 드라이버 개발에 깊이를 더 하려고 하니 리눅스 커널에 대해서 이해가 필요하다는 것을 알게 되었습니다. 그래서 책을 보며 학습하는 내용을 정리해 보기로 했습니다.   1. Linux Kernel 학습 위한 책 선정 이유  리눅스 커널을 학습할 수 있는 많은 책들이 있는데 그중에 추천받은 책으로 진행하기로 했습니다. "디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1" 책으로 1, 2권으로 나눠져 있습니다.  또 하나는 선택한 이유 중에 하나는 테스트하는 보드가 라즈베리파이라는 것입니다. 다른 책들도 가능하지만 실습환경 맞춰 따라 하기가 쉽지 않다는 것입니다. 현재 출간된 버전도 라즈베리 파이 3으로 작성되어 실습이 안 되는 부분이 있다고 하지만, Pi 4로 ..

IT/Linux Kernel 2025.02.12

[독서후기] 현업 시니어와 함께 하는 임베디드 소프트웨어 베이직 with 라즈베리파이

1. 책 선택 이유  다른 업무들로 인해 임베디드 소프트웨어 개발에 할당하는 시간이 부족해서 다시 차근히 읽어 볼거리가 없을까 찾다가 읽어 보았습니다.  2. 간략한 내용 소개  간략한 소개 내용이 부족한 것 같아, 목차일부를 같이 포함해 보았습니다.   이 책은 임베디드를 처음 접하는 독자들을 위한 책으로, 현업 시니어가 이론을 설명해 주고 주니어가 실습을 하는 방식으로 되어있습니다. 책의 앞부분은 하드웨어에 대한 내용을 다루고 그 후 소프트웨어 입문에 대한 내용을 다루고 있습니다. 그다음 실절적인 소프트웨어 개발 내용을 다루고 마지막으로 중급자를 위한 내용도 간략하게 소개하고 있습니다. 이 책 한 권이면 막연하게 느껴지던 임베디드 소프트웨어도 한층 가까워질 것입니다. PART 1 하드웨어를 이해하고 ..

Book Report 2025.01.19

자원을 공유하는 다중 쓰레드 실습 소스코드 (뮤텍스-mutex 적용)

안녕하세요.  "[도서]임베디드 소프트웨어 베이직, 13.1 자원을 공유하는 다중 쓰레드 실습" 중 마지막 내용에 전체 소스코드 내용이 없어서  공유합니다.  거의 마지막 실습이고 소스코드 내용을 요약하자면 이전 내용에서 다루었던 pthread를 이용을 하는데 있어 공유하는 변수 2~4개의 다른 쓰레드에서 접근했을 때 어떻게 처리해야 하는지 간략하게 알려줍니다.  세마포어, 뮤텍스 등 방법이 있지만 여기서는 뮤텍스(Mutex)를 활용해서 1씩 증가하고 감소하는 쓰레드와 값이 정상적으로 동작하는지 확인하는 코드입니다.   1. 뮤텍스 활성화 및 쓰레드 4개 테스트 소스코드  100,000번 1씩 증가, 감소하는 쓰레드 함수와 300,000번 1씩 증가, 감소하는 쓰레드를 실행하고, 공유자원으로 사용할 변수..

라즈베리파이(Raspberry Pi)에서 스레드(pthread) 테스트

안녕하세요.  읽고 있는 책(하단 참고 도서 참고)에 내용 중 pthread 내용  조금 수정이 필요한 코드 부분이 있어 수정과 확인을 위해서 공유합니다.  1. POSIX Threads (pthread)란?POSIX Threads(pthreads)는 POSIX (Portable Operating System Interface) 표준을 따르는 멀티스레딩 API입니다.멀티스레딩(multi-threading)을 지원하여 하나의 프로세스 내에서 여러 스레드가 동시에 실행될 수 있도록 설계되었습니다.Unix 계열 시스템(Linux, macOS 등)에서 널리 사용되며, C 및 C++에서 멀티스레드를 구현하는 표준 방법입니다.2. 주요 특징경량 프로세스: 스레드는 동일한 프로세스 내에서 실행되므로 메모리 공간과 리..

라즈베리파이(Raspberry Pi) 리눅스 커널 구성 확인 및 빌드(build) 해보기

안녕하세요.   Rasbperry Pi를 사용하지만, 실질적으로 커널을 빌드해 볼 일을 많이 없을 것이라 생각됩니다. Device Driver 개발을 위해 커널 소스 혹은 해더를 다운로드하는 정도일 것입니다. 간단하게 커널 구성 내용과 빌드하는 방법 정도는 알아 두면 좋을 듯합니다.  언제 시점에서 테스트하느냐에 따라서 디렉터리 경로가 변경될 수 있으니 참고해서 따라 하시면 도움일 될 것입니다.  1. 커널 빌드를 위한 패키지 설치 git : 버전 관리 시스템으로, 소스 코드를 효율적으로 관리하고 공동 작업을 지원합니다. Git은 로컬과 원격 저장소 간의 코드 동기화를 가능하게 합니다. bc : 고급 계산기 언어로, 명령줄에서 수학적 계산을 수행할 수 있습니다. 특히, 스크립트에서 복잡한 계산을 처리할 ..

Raspberry Pi CM4에 ModbusTCP Server 실행해 보기 - 4편(ModbusTCP server와 유량센서와 연동)

안녕하세요.  실제로 연동하는 프로그램을 만들어 보려고 합니다.  이전 ModbusTCP내용과 PulseCount를 잘 조합하면 될 것으로 생각했습니다.그런데 가상환경에서 RPi.GPIO의 add_event_detect() 함수를 사용하면 이벤트를 받아서 처리할 수가 없었습니다.    이전 내용을 참고하시면 pigpio 라이브러리 사용하는 방법을 다시 찾아서 확인하였습니다.최종적로 ModbusTCP와 pigpio를 이용해서 작업을 마무리할 수 있었습니다.  1. 코드 구성 확인 소스코드를 보기 전게 간단하게 맥락을 설명하면 아래와 같습니다.  1) 필요한 라이브러리 및 모듈 pyModbusTCP: ModbusTCP 서버를 구현하기 위한 라이브러리pigpio: GPIO 핀에서 센서 데이터를 안정적으로 읽어..

pyinstaller로 실행파일을 만들고 강제종료(ctrl + c) 시 PYI-3170:ERROR 에러 발생 메시지 해결 방법(?)

안녕하세요.  pyinstaller로 실행파일을 만들고 ctrl + c 눌러 종료할 때 보통 아래와 같은 메시지가 나타납니다. 종료할 때 깔끔하게 끝나지 않고 조금 애매하게 종료되는 것 같아서 조금 찾아보았습니다.  1. 테스트 환경   - HW : Raspberry Pi CM4   - OS : bookworm 64bit  - SW :     pip install pyinstaller로 인스톨러를 설치  2. 에러(?) 현상  Python 파일로 실행할 경우 문제없이 종료됩니다. 메모리 혹은 특정 리소스를 점유하고 해제가 필요한 코드에서 에러가 발생하는 것으로 생각됩니다. 현재 시점에서 [PYI-3170:ERROR]로 구글링해도 많이 나오지 않았습니다.  pyinstaller python 프로그램으로 만..

PCB Editor 혹은 Or CAD에서 LoadLibrary fails to load with error 126 or error 87 발생할 경우

안녕하세요.   오늘은 OrCAD로 회로 설계하다가 경험할 수 있는 에러에 대해서 공유드립니다.  평상시와 같이 회로설계를 하면서 footprint show를 눌렀는데, OrCAD가 에러 하나를 내고 죽는 현상이 나타났습니다.     저장하고 있지 않은 상황이라 살짝 당황했습니다. 그래서 급하게 검색했습니다.  1. 원인 검색   정확하진 않지만, AMD 계열 그래픽 원인으로 파악되었습니다. ATI 그래픽 카드로 교체했거나, NVIDIA와 같이 사용하는 경우 호환이 되지 않아 나타나는 듯합니다.   OrCAD, PCB Editor에서만 나타나는 것이 아니라, 그래픽 프로그램 (Photoshop, AutoCad) 등에서도 발생하는 듯합니다.  2. 해결책 1) 알려진 해결책   - ATI 그래픽 최신 드라..

Raspberry Pi에서 유량센서(YF-B10-S)로 유량계산하기

안녕하세요.   이전 글에서 유량센서(YF-B10-S) 제품에 대해서 확인해 보았습니다. 이번 글에서는 실제로 어떻게 값을 구할 수 있는지, Raspberry Pi를 이용해서 확인해 보겠습니다.     YF-B10-S(유량센서) 확인해 보기안녕하세요.  사이드 프로젝트로 유량파악해서 ModbusTCP로 전달이 필요하다는 요청을 받았습니다. 우선 유량을 확인할 수 있는 센서를 확인해 보겠습니다.  파이프 규격과 재질에 따라 가격과remnant24c1.tistory.com  1. 유량센서 테스트 환경  - 라즈베리 파이 CM4 - YF-B10-S 유량 센서 (하네스 SM 3핀 Female 커넥터 장착) - 10kΩ 풀업 저항 (NPN 출력 신호 안정화용) - 점퍼 와이어 혹은 연결 커넥터 하네스 커넥터(SM..

Raspberry Pi 4에 Asterisk 조금 쉽게 설치하기

안녕하세요.   처음에 테스트할 때 Raspberry OS 자체에 Asterisk설치했는데 컴파일 에러 발생하고 그래서 다른 것과 충돌해서 그런가 해서 Raspberry Pi OS를 다시 설치해서 테스트했지만 동일하게 에러가 발생했습니다.  그래서 인터넷상의 해결책을 찾으며 이런저런 것을 설치해 보고 설정도 해보니 엉망이 되어서 기본 OS는 건들지 않게 하기 위해서 도커를 설치해서 테스트하였습니다.   또한 패키지 버전으로 쉽게 설치하는 것과 소스 버전으로 컴파일해서 설치하는 버전도 컨테이너만 바꿔서 작업하면 효율성도 높아질 것이라 생각이 되었습니다. 1. 도커 설치 및 ubuntu Image Container 설치  - Raspberry OS위에 도커 설치하고 그 안에 ubuntu OS(Ubuntu 2..

Qt를 이용한 멀티캐스트 수신 코드 및 테스트 (Multicast Receiver)

안녕하세요.  이전 내용에서 Raspberry Pi의 Multicast로 데이터를 보내는 것을 확인했습니다. 다음 내용으로 보낸 데이터를 확인하는 것이 필요합니다. 그래서 찾던 중에 리눅스와 윈도우에서 크로스 컴파일되는 Qt 예제 코드가 있어서 확인해 보았습니다.   Raspberry Pi4를 이용한 멀티캐스트 송신 코드 및 테스트 (Multicast Sender)안녕하세요.  IPTV나 네트워크 쪽으로 통신 프로그램할 경우가 아니면 주로 사용하는 방식은 아니지만 이번에 확인할 일이 있어서 찾아본 내용 공유드립니다. 송신부는 C 프로그램으로 테스트remnant24c1.tistory.com  1. Receiver 소스 확인   Receiver 클래스에서 단순한 UI 구성과 함수를 생성해서 작동하도록 되어 ..

Programming/Qt 2024.07.10