ITGenerations
임베디드 수업내용 정리 2018_06_12 본문
기본적인 모듈의 형태
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
init_module()
{
초기화(시작);
}
cleanup_module()
{
종료(마침);
}
-> 중복문제 발생 =심볼릭문제 해결을 위해
"디바이스이름_"
"기능이름_"
eros_start()
{
......
}
eros_end()
{
......
}
module_init(eros_start)
module_exit(eros_end)
(이러한 작용(기능)을 <linux/init.h>에서 수행)
예시
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
trump_start()
{
}
trump_end()
{
}
module_init(trump_start);
module_exit(trump_end);
기본적인 모듈 형태
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
int trump_start()
{
printk(""); // printk는 커널에서 동작하는 printf
......
}
void trump_end()
{
......
}
중복문제해결
$vi eros_mod.c //파일생성
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
int trump_start()
{
......
}
void trump_end()
{
......
}
module_init(trump_start);
modile_exit(trump_end);
Makefile 작성
CC= arm-linux-gcc
KERNEL_DIR=/.../2.4.18-rmk7-pxa1-xhyper255
CFLAGS=-DMODULE -D_KERNEL_
-I$(KERNEL_DIR)/include
TARGET = eros_mod
SRC = $(TARGET).c
OBJ =$(TARGET).o
all : $(TARGET)
$(TARGET) : $(SRC) $(CC) $(CFLAGS) -c $(SRC)
clean: rm-f *.o
3. Make 실행 -> eros_mod.o 생성
$file eros_mod.o로 파일 속성 확인
4. minicom을 통해 타겟보드에 올려서 실행(test)
타겟에 전송된 erosmod.o를 타겟에 올라가 있는 커널에 올리기 위해서 insmod 명령어를 사용한다.
$insmod eros_mod.o
EROS MODULE is started! -> 커널이 실행
$lsmod(확인
$rmmod eros_mod (~.o가 아님에 주의)
EROS MODULE is exited!
$lsmod (모듈이 사라진 것 확인)
vmlinux 실행파일
makefile이 오브젝트들의 파일을 컴파일해서 링크해준다.
-> 여러개의 파일을 하나의 파일로 만들어준다.
~.c -> ~.o ->vmlinux
(
커널소스------------> 오브젝트들
컴파일 make
올리기 insmod eros_mod.o
확인 lsmod
지우기 rmmod eros_mod
확인 lsmod
소프트웨어에도 좋은 소프트웨어, 안좋은 소프트웨어가 있다라고 한다.
1. 펌웨어 - os x
2. 디바이스 드라이버 - os o
3. 모듈 - o
모듈과 디바이스 드라이버의 차이점?
모듈을 디바이스 드라이버처럼 사용하고 싶으면 등록하면 된다.
쉐도우 레지스터란?
마이크로 프로세서에서는 총 7개의 모드가 있고, 모드가 변경될 때를 쉐도우 레지스터라고한다.
각 쉐도우 레지스터의 총 합은 37개다.
16+7+2+2+2+2+1+1+1+1+1+1=37
r13,r14,r15 특별 목적 레지스터다.
r13=
r14=
r15=
#define NULL 0
#define BUFSIZE 512
#define PMODE 0644
/* RW for owner, R for group, other */
// argument counter = argc
// argument vector = argv
main(argc, argv) // cp: copy f1 to f2
int argc; // argument counter
char *argv[]; // argument vector
{
int f1,f2, n;
char buf[BUFSIZE];
if(argc !=3)
error("Usage: cp form to", NULL);
//open source file
if((f1=open(argv[1],0))==-1)
error("cp:cant' open %s", argv[1]);
// create destination file
if((f2=creat(argv[2], PMODE))==-1)
error("cp:can't create %s", argv[2]);
//read data to buffer
while((n=read(f1,buf,BUFSIZE)) >0)
//write data from buffer
if(write(f2,buf,n)!=n)
error("cp:write error", NULL);
exit(0);
}
// print error message and teminate
error(s1, s2)
char *s1, *s2;
{
printf(s1, s2);
printf("\n");
exit(1);
}
Device Driver
모듈과 다른점은, os 자원의 (메모리) 일정 분량을 확보해서 사용한다.
부팅될 때, 자원을 확보하여 디바이스 드라이버가 실행된다.
개발할 때는 모듈로 개발하고, 개발이 끝나면 디바이스 드라이버로 등록한다.
1.디바이스 드라이버가 하는일
- s/w가 h/w 디바이스를 제어할 때 사용
- 디바이스 드라이버가 언제 사용되나?
디바이스 드라이버
네트워크 카드(디바이스)
웹브라우저
특정 웹사이트
웹브라우저에서 특정 웹사이트를 접속하기 위해서는 디바이스 드라이버를 이용하여
네트워크 카드를 이용하여 특정웹 사이트에 접속한다.
2. 디바이스 드라이버의 종류
1) Character Device(입출력장치)
요청한 순서대로 작업을 수행하는 구조
ex)Keyboard, mouse
2) Block Device(저장장치)
중간의 Buffer를 통해 랜덤하게 작업을 수행하는 구조
ex)Hard Disk, CD-ROM
3) Network Device(통신장치)
ex) Network Card
3. Skeleton Device Driver
skeleton device driver를 통한 분석
- skeleton device driver
물리적인 디바이스가 아닌 메모리 공간을 디바이스 처럼 인식하여 디바이스 드라이버 기법을 배우기 위해 사용
- skeleton.c 소스 분석
ps.디바이스 드라이버를 공부하는 사람은 스켈레톤 디바이스 드라이버를 꼭 알아야 된다.
4. Skeleton.,c src 분석
#inlcude <linux/config.h>
#include <linux/module.h>
#include <linux/errno.h>
...
그외 다양한 헤더들
//액션
int skeleton_open()
{
...
}
//액션
int skeleton_release()
{
...
}
//액션
ssize_t skeleton_read()
{
...
}
//액션
ssize_t skeleton_write()
{
...
}
//액션
int skeletion_ioctl()
{
...
}
//액션
static int_init skeleton_init()
{
...
}
//액션
static void_exit skeleton_exit()
{
...
}
//이 부분을 가장 먼저 본다
module_init(skeleton_init);
module_exit(skeleton_exit);
1) 다양한 헤더 파일
2) 스켈레톤 파일 오픈
3) 오픈,릴리즈,리드,라이트,아이오컨트롤,이니트, 익시트, 모듈
5. Device Driver
6. Skeleton test
//수업종료
'Univ > 임베디드' 카테고리의 다른 글
임베디드 리눅스 아키텍처 (0) | 2018.06.14 |
---|---|
2018_06_05 임베디드 수업 (0) | 2018.06.05 |
2018_0529_수업자료 (0) | 2018.05.29 |
2018_0524 임베디드 수업자료 (0) | 2018.05.24 |
2018_05_17 수업자료 (0) | 2018.05.17 |