라즈베리 확장

임베디드 개발 환경 구축

§시스템 콜(System call)
운영체제에 의하여 보호되는 자원인 커널 메모리, 커널 데이터 등을 사용자 프로세스가 이용하려면 컨널과
사용자 프로세스가 공유할 수  있는 인터페이스가 필요
권한 레벨을 설정하여 사용자 공간과 커널 공간 구분
서로 다른 공간에 대한 접근은 시스템 호출로만 가능하도록 제한

시스템 호출을 실행하면 사용자 모드에서 시스템 모드로 전환되며, 커널에서 시스템 호출을 종료하면 사용자
모드로 다시 복귀


§리눅스에서 지원하는 시스템 호출
프로세스 관리: fork(), execve(), getpid(), signal()
파일시스템: open(), read(), write(), close()
메모리 관리: brk() emd
네트워크 관리: socket(), bind(), connect()

기타 시스템 정보나 제어 time()


§사용자 프로그램의 번역 과정

§시스템 콜 원리
Linux 에서의 system call 처리
Interrupt 처리 매커니즘 사용
-Interrupt
주변 장치와 커널이 통신하는 방식 중 하나로

주변 장치가 자신에게 발생한 비동기적 사건을

kernel에게 알리는 매커니즘




§시스템 호출 동작 과정(fork 시스템 호출 과정)



§시스템 호출 동작 과정(fork 시스템 호출 과정)

소프트 웨어 인터럽트를 통하여 사용자 모드에서 커널 모드로 전환되어 커널 자원에 접근
Swi 900002;
시스템 호출 번호 900002

시스템 호출 번호를 포함하는 테이블의 시작점이 900000이기 때문에 fork() 시스템 호출 번호는 2

(등록된 시스템 호출 함수 중 세 번째 위치)

호출 번호 2에 해당하는 커널 함수 sys_fork() 호출 


§시스템 호출 구현
hello() 시스템 호출 구현 예
-시스템 호출 후 /var/log/messgaes에 출력 (“hello, I am system call example”)
-$ vi linux/kernel/hello.c  //해당 리눅스 커널 폴더에 파일 생성해야 됨


#include <linux/kernel.h>

Asmlinkage void sys_myhello()

{

    printk(“hello, I am system call example”);

}


시스템 호출 번호 테이블에 등록

$ vi linux/arch/arm/include/uapi/asm/unistd.h  //버전마다 다를 수 있음
-시스템 호출 함수 등록

-$ vi linux/arch/arm/kernel calls.S  //버전마다 다를 수 있음

-Makefile 파일 수정

-$ vi linux/kernel/Makefile

-수정된 커널을 다시 빌드 후 이미지 생성
-$ make ARCH=arm CROSS_COMPILE=/home/kkn/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- zImage   
-Kernel imagetarget에 복사


반응형

+ Recent posts