[디바이스 드라이버] 2. 모듈 프로그래밍
·
리눅스/디바이스 드라이버
이전 챕터에서 디바이스 드라이버는 모듈로 만들어서 커널에 적재하고, 해제할 수 있다고했다.일단 환경은 라즈베리파이 4B / 64비트 커널 기반으로 진행하였다.가장 간단한, 모듈을 만들어보자면 아래와 같이 만들 수 있을 것이다.   모듈 소스 파일나는 day1_module.c로 이름 붙였다.#include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("IH02");MODULE_DESCRIPTION("Day1");static int __init driver_init(void) { printk("Hello, World!\n"); return 0;}static void __exit driver_exit(void) { printk("Bye, World!\n");}module_i..
[디바이스 드라이버] 1. 디바이스 드라이버란?
·
리눅스/디바이스 드라이버
커널 공간과 사용자 공간  사용자 공간: 우리가 프로그래밍하고, 사용하는 공간응용 프로그램: 사용자가 실행하는 소프트웨어입니다.저수준 파일 입출력 함수: 응용 프로그램에서 파일 입출력 작업을 수행하기 위해 사용하는 함수.장치 파일: 장치 드라이버와 상호작용하기 위해 운영체제에서 제공하는 특수 파일.커널 공간:디바이스 드라이버: 하드웨어 장치를 제어하고 응용 프로그램의 요청을 하드웨어 명령으로 변환하는 소프트웨어하드웨어 제어 함수: 디바이스 드라이버가 하드웨어를 직접 제어하기 위해 사용하는 함수.하드웨어: 컴퓨터 시스템의 물리적 장치.   장치파일하드웨어를 사용하기 위한 디바이스 드라이버와 디바이스 드라이버와 연결하여, 장치를 제어할 장치파일이 존재한다./dev 디렉토리 내부에 장치파일이 존재한다.  리눅..
[라즈베리파이] 커널 빌드 (크로스 컴파일) - SCP 이용
·
라즈베리파이
라즈베리파이상에서 커널을 빌드하는건 시간이 너무 오래 걸린다.크로스컴파일하면 커널을 빌드하면 시간을 절약할 수 있다.  aarch64용 리눅스 커널을 우분투 가상 머신에서 빌드하고, 전송하여 적용시키는 것을 설명하고자 한다. 내가 사용한 PC 우분투 버전은 Ubuntu 22.04.4 LTS (GNU/Linux 4.4.0-19041-Microsoft x86_64) 이다.커널적용 대상은 라즈베리파이 4B 64비트 운영체제 기준이다.   https://www.raspberrypi.com/documentation/computers/linux_kernel.html이사이트에서 공식적으로 라즈베리파이 리눅스 커널 빌드 방법을 자세히 알려주고 있다.   소스 받기로컬 기기에서 빌드할때와 마찬가지로 아래 코드를 통해 l..
[라즈베리파이] 커널 빌드 (로컬)
·
라즈베리파이
나는 "디버깅을 통해 배우는 리눅스 커널의 구조와 원리1" 이라는 책을 참조했다.  라즈베리파이의 라즈비안 OS를 포팅하고 빌드시키고, SSH로 원격접속 등을 통해 환경은 구성하였다.커널은 오픈소스로 배포하고 있어서, 라즈베리파이에서 직접 빌드시키고 적용할 수 있다. 한번 빌드한 커널을 적용시켜보겠다. PC에서 받고 전송하는 크로스컴파일 방법도 다음포스트에서 할것이다.  https://www.raspberrypi.com/documentation/computers/linux_kernel.html이사이트에서 공식적으로 라즈베리파이 리눅스 커널 빌드 방법을 자세히 알려주고 있다. 먼저 현재 내 커널 정보를 확인해보자. 운영체제 이름과 버전: Linux호스트 이름: raspberrypi커널 버전: 6.6.31+..
[라즈베리파이] 커널 구성 요소 : 커널이미지, 모듈, DTB
·
라즈베리파이
앞선 커널 빌드 과정에서 보았듯이 총 3개의 모듈을 빌드해서 적용시킨다.차례대로 자세히 알아보자.1. 이미지파일설명:Image.gz는 커널 빌드 과정에서 생성된 커널 이미지 파일을 gzip 형식으로 압축한 것이다.이 파일은 실제로 라즈베리 파이 등의 장치에서 실행될 커널의 핵심 부분이다.압축을 통해 파일 크기를 줄여 부팅 속도를 개선하고, 저장 공간을 절약할 수 있다.역할:부팅 시 로드되는 실행 가능한 커널로, 하드웨어와 운영 체제 간의 인터페이스를 제공한다.커널 이미지에는 시스템 부팅에 필요한 기본 코드와 하드웨어 초기화 코드가 포함되어 있다.사용 위치:보통 /boot 디렉토리 아래에 복사되어 부트로더에 의해 로드된다. 예를 들어, config.txt에서 커널 파일을 지정할 때 사용된다. 나중에 보겠지..
[라즈베리파이] VNC 접속하기
·
라즈베리파이
이전 포스팅에서 포트포워딩을 통해 SSH로 라즈베리파이에 원격접속해봤다. VNC 원격접속도 이에 연장선상인데 길어질 거같아서 그냥 따로 포스팅한다.    VNC?VNC(Virtual Network Computing)는 네트워크를 통해 다른 컴퓨터의 화면을 원격으로 제어하고 접속할 수 있게 해주는 기술이다. VNC를 사용하면 물리적으로 떨어진 위치에서도 컴퓨터를 직접 사용하는 것처럼 마우스와 키보드를 통해 제어할 수 있다. VNC의 주요 특징과 사용 방법화면 공유 및 제어:VNC는 원격 컴퓨터의 화면을 실시간으로 볼 수 있게 하고, 키보드와 마우스를 통해 해당 컴퓨터를 직접 조작할 수 있게 합니다. 이를 통해 문제 해결, 원격 지원, 서버 관리 등 다양한 작업을 할 수 있습니다.클라이언트-서버 모델:VNC..
[라즈베리파이] 포트 포워딩을 통한 SSH 접속
·
라즈베리파이
SSH, VNC는 원격제어 방법으로, 라즈베리파이를 따로 디스플레이에 연결하지 않고 PC에서 원격접속하여 제어할때 가장 유용하다.SSH란?SSH(Secure Shell)는 네트워크 상의 다른 컴퓨터에 안전하게 원격 접속하기 위해 사용되는 프로토콜이다. SSH는 암호화된 통신을 통해 데이터를 보호하며, 보안이 강화된 원격 로그인, 명령 실행, 파일 전송 등을 가능하게 한다. 주로 서버 관리, 원격 시스템 제어, 안전한 파일 전송 등에 사용된다. 아래와 같은 특징이 있다. 보안성:SSH는 통신 데이터를 암호화하여 전송하므로, 네트워크를 통해 주고받는 정보가 제3자에 의해 도청되거나 변조될 위험이 적습니다. 이를 통해 안전한 인증과 데이터 보호가 가능하다.원격 로그인 및 명령 실행:SSH를 통해 사용자는 원격..
[라즈베리파이] 라즈비안(Rasbian) OS 설치하기
·
라즈베리파이
라즈비안이란?라즈비안(Raspbian)은 라즈베리 파이(Raspberry Pi)라는 소형 컴퓨터를 위해 개발된 운영체제이다. 라즈비안은 기본적으로 데비안(Debian) 리눅스를 기반으로 하며, 라즈베리 파이의 하드웨어에 최적화되어 있다. 간단히 말해 라즈베리파이용 리눅스이다.     Raspberry Pi Imager준비물은 SD카드와 SD카드 리더기이다. SD카드를 리더기에 꽂은후 PC나 노트북에 연결하자.그리고 여러 프로그램으로 라즈비안을 SD카드에 구울 수 있는데, 몇개 써본 결과 Raspberry Pi Imager 프로그램이 가장 편했다. 사용 라즈베리파이 디바이스 선택 및 운영체제를 편하게 선택할 수 있다.https://www.raspberrypi.com/software/ 장치, 운영체제 선택후..
[백준] 1915번 최소비용 구하기 C++ 풀이
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/1916 좀 까먹은 다익스트라를 다시해봤는데 헷갈리는 부분이 있어 정리한다.  풀이제목부터 다익스트라를 사용하는 문제.. 알고리즘을 모르면 풀 수 없으니 모르는 사람은 찾아보자.정리해놓은걸 보면서 풀었는데, 질문게시판에도 나랑 비슷한 사람이 있고, 나도 헷갈리는 부분이 있어 정리해보았다. while(!pq.empty()){ auto cur = pq.top(); pq.pop(); if(cur.X != board[cur.Y]) continue; for(auto nxt : edge[cur.Y]){ if(nxt.X + board[cur.Y] >= board[nxt.Y]) continue; pq.push({..
[백준] 14502번 연구소 C++ 풀이
·
알고리즘 문제 풀이/백준
문제https://www.acmicpc.net/problem/14502오랜만에 알고리즘문제를 올려본다.다음주에 HSAT가 있어서 재활훈련중에, 저번 HSAT 모의고사에서 고생했던 느낌의 문제가 있어서 정리하려고 올려본다.  풀이시뮬레이션유형의 문제였는데, 보드 크기도 최대 8 * 8로 작았기 때문에 모든 벽의 경우의 수를 구하는 브루트 포스 방법이 생각났다.시간 복잡도에서는64칸의 보드에서 3개의 벽을 뽑는 방법 64 C 3 = 41664가 되고,해당 벽을 뽑았을때의 BFS시간 복잡도는잡도는 O((정점의 개수) + (간선의 개수) = 4 + 8 * 8이 된다. 64로 계산가능하다.그럼 41664 * 64로 2,666,496로 널널하게 된다.  처음 계산할때 BFS시간복잡도를 잘못계산해서 거의 딱 된다고 ..
다락공방
오라즈