VEDA 35일차 - 임베디드 리눅스 프로그래밍
시스템 콜
callback 함수 : 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 의미
프로그램 영역 내에서 수행되는가, 아니면 커널 영역에서 수행하는 가 => 스택은 공유하지만, 프로그램을 읽어오는 공간이 다르다!!
파일 디스크립터로 관리, 시스템 콜은 일종의 인터럽트이다!! (밑의 블로그 참조)
https://hasensprung.tistory.com/176
[운영체제] System Call(시스템콜)을 파보자!
📣 해당 포스트는 운영체제 공룡책과 고건 교수님의 OLC 강의 등을 참고하여 작성되었습니다. 시스템콜을 한마디로 정리하면 커널에 접근하기 위한 인터페이스입니다. 하지만 시스템콜이 이 한
hasensprung.tistory.com
SWI 명령어 : 권한 변경 => 기존의 제한되었던 소프트웨어적인 접근을 허용한다.
리눅스의 철학 : 모든 것을 파일로 취급한다.
하드디스크, 디렉토리, 키보드, 모니터, 네트워크 카드, 사운드 카드, 시스템 정보, 드라이버 정보 등등
파일 open -> 파일 R/W -> 파일 close
파일 종류 : 일반 파일, dir, symbolic link. hard link, device, socket, pipe
FILE* fp = fopen(); //고수준, 주로 어플리케이션에서 파일 접근시
int fd = open(); //저수준, 주로 기기 장치 접근시
read(), write(), close()
File open system call : 파일 존재 여부 확인, 존재하지 않을 경우 파일 생성, 파일 권한 확인
non-blocking option : 일반적으로 오류로 중지되는 것과 다르게 그대로 쭉 실행되는 옵션
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int i=1;
while(1)
{
i++;
printf(".");
if( argv[1] !=NULL) // eg> a.out .
fflush(stdout);
usleep(2000);
}
return 0;
}
/*
해당 코드는 바로 점을 찍지 않고 모아서 출력하는 데, 이는 STDOUT의 방식이 버퍼가 가득 차면
그 때 출력하는 방식이라서 그럼, fflush를 사용하거나 개행 문자를 입력하면 출력됨
*/
***드라이버 단에서의 입출력***
드라이버 만드는 방법은 찾아서 공부할 것(이해도가 부족)
module 제작 -> module을 올리거나 내리기(insmod, lsmod, rmmod), 드라이버가 됨(procfs) | 이 부분은 유심히 볼 것
/dev/dev_name 이 open()으로 전달되면 dev_major, dev_minor 번호를 가지고 디바이스를 검색한다.
dev에서 업로드 : mknod /dev/rpihat c 236 0
ioctl : 명령어(32bit)의 느낌이 더 강하다. write()의 특화 버전!
mobaxterm