Ⅱ. 라즈베리 확장
임베디드 개발 환경 구축
§시스템 콜(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 image를 target에 복사
반응형
'프로그래밍 > Raspberry' 카테고리의 다른 글
Raspberry pi2 (커널 이미지에 module built-in) (0) | 2015.08.19 |
---|---|
Raspberry pi2 (시스템 콜 후킹) (0) | 2015.08.13 |
Raspberry pi2 (크로스컴파일) (0) | 2015.08.13 |
Raspberry pi2 (SD card 분석) (0) | 2015.08.13 |
Raspberry pi2 (config.txt 분석) (0) | 2015.08.13 |