bsp 5

모듈 프로그램

간단한 모듈 프로그램을 작성해보자 앞으로 모든 작업은 Ubuntu 20.04에서 소스 파일을 작성해 크로스 컴파일을 진행하고 생성된 모듈 프로그램을 라즈베리파이에서 실행한다 // hello.c #include #include #include static int hello_init(void) { printk("Hello, world\n"); return 0; } static void hello_exit(void) { printk("Goodbye, world\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("Dual BSD/GPL"); 커널에 모듈이 적재되면 module_init()으로 인해 hello_init이 실행되고 커널에..

디바이스 드라이버 제어 방식

응용 프로그램의 하드웨어 제어는 위와 같은 방식으로 제어된다 응용 프로그램이 하드웨어를 제어하기 위해 저수준 파일 입출력 함수를 사용해 디바이스 파일에 데이터를 쓰거나 읽고, 그 결과로 하드웨어를 제어하는 디바이스 드라이버 함수가 호출된다 커널이 어떻게 디바이스 파일과 디바이스 드라이버의 함수를 연결할까? 방법은 디바이스 파일에 기록된 디바이스 타입과 주 번호를 이용하여 등록한다 fs/char_dev.c에 chrdevs라는 전역 변수가 struct char_device_struct chrdevs[MAX_PROBE_HASH];와 같이 정의되어 있다 해당 전역 변수는 struct file_operation *fops;라는 필드를 포함한 문자 디바이스 드라이버를 관리하는 구조체로, 응용 프로그램이 디바이스 파..

디바이스 파일

디바이스 파일에 간단한 파일 처리 함수를 사용하여 하드웨어를 제어 디바이스 파일은 /dev 디렉토리에서 관리 디바이스 파일 생성 sudo mknod /dev/디바이스파일명 파일형태(c, b) 주번호 부번호 해당 디바이스 파일은 문자 디바이스 드라이버(c)에 주 번호 10, 부 번호 235인 디바이스 파일이다 응용 프로그램이 디바이스 파일을 open() 함수로 열면 커널은 해당 디바이스 파일에서 주 번호를 얻어 이 번호가 처리하는 디바이스 드라이버를 찾음 응용 프로그램과 디바이스 드라이버가 연결되면 부 번호가 처리하고자 하는 실질적인 디바이스를 찾음 디바이스 파일 삭제 sudo rm -r /dev/디바이스파일명 파일 입출력 함수 스트림 파일 입출력 함수 : 중간 처리용 버퍼가 존재하고 해당 버퍼는 FILE..

디바이스 드라이버

디바이스 드라이버란 시스템이 지원하는 하드웨어를 응용 프로그램에서 사용할 수 있도록 커널에서 제공하는 라이브러리 응용 프로그램이 하드웨어를 제어하기 위해서는 커널에 자원 사용을 요청 -> 커널은 이런 요청에 따라 시스템을 관리 커널에 자원 사용을 요청하는 방법은 두 가지 1. 시스템 호출 방식 시스템 제어에 필요한 호출 규칙을 정해 놓고, 소프트웨어 인터럽트 서비스를 이용하여 으용 프로그램에서 요청하는 처리를 커널이 수행하는 방식 커널은 각 기능별로 번호를 할당하고, 이 번호에 해당하는 제어 루틴을 커널 내부에 정의 응용 프로그램은 원하는 기능 번호를 레지스터에 저장한 후 소프트웨어 인터럽트 서비스를 호출함으로써 커널에 제어를 넘김 인터럽트에 의해 호출된 후 커널 내의 서비스 루틴은 기능 번호를 살펴보고..

리눅스와 라즈베리파이를 ssh으로 접속하기

1. 리눅스 리눅스에서 ssh 설치 $ sudo apt update $ sudo apt install openssh-server 윈도우에서 ssh로 원격 리눅스 접속하기 putty 설치 https://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY: a free SSH and Telnet client PuTTY: a free SSH and Telnet client Home | FAQ | Feedback | Licence | Updates | Mirrors | Keys | Links | Team Download: Stable · Snapshot | Docs | Changes | Wishlist PuTTY is a free implementation of SSH an..