«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

2018_06_05 임베디드 수업 본문

Univ/임베디드

2018_06_05 임베디드 수업

ITGenerations 2018. 6. 5. 16:51

S/W로 H/W 제어 하는 방법(3가지)


1. 펌웨어(Firmware) : os 없음

2. 디바이스 드라이버(Device Driver) : os 있음, os 위에서 항상 상주,

3. 모듈(Module) 디바이스 드라이버와 다른점은 항상 상주하지 않음.

-> 디바이스 드라이버의 번거로운 과정을 해결하기 위해서 탄생, 모듈을 디바이스 드라이버로 등록하면 디바이스 드라이버가 된다./ 메모리상에서 존재한다. 


hello.c 파일을 만드면 워킹디렉토리에 존재한다.


크게 나누면 2 가지

1,2

세밀하게 나누면 3 가지

1,2,3



부팅을 하면, os인 리눅스가 동작하고, 리눅스에 필요한 것들은 메모리도 구동된다. 

커널 소스 디렉토리



모듈 디바이스 드라이버는 시스템 내부에서 움직이는 소프트웨어다.

커널 소스 디렉토리 밑에서 존재한다.

디렉토리는 많다. 다만, 커널 소스 커서 디렉토리에 존재한다.



1. 커널 모듈이란?

-모듈: 커널의 기능을 확장하기 위하여 추가시키는것

-디바이스 드라이브: 모듈의 형태로 구현


2. S/W로 H/W를 제어하는 방법

-펌웨어 오에스 없다

-디바이스 드라이버 부팅이 될 때 오에스가 잡고 올라옴

-모듈 부팅이 된 후에 필요에 따라 올리거나 내림


3. 개발 방법

- 임베디드 시스템에는 최종적으로 디바이스 드라이브 형태로 올라가지만,




1. 일반

os

kernel

device driver


os

kernel

module <- ->(왔다갔다함)



2. 작성된 모듈을 사용하기 위한 방법(2가지)

-1. make menu config 를 이용하는 방법


-[ ]: bool 타입이므로 선택이나 선택 안함의 두가지 밖에 없다.

[*] ->선택

[  ]->선택x


- < >: 

<*> ->디바이스 드라이브로 선택

< > -> 디바이스 드라이브로 선택x

<M> -> 모듈로 선택


여기서 M은 object(*.o)의 형태로 모듈로 남겨 놓은 후 부팅할 때는 넣지 말고 나중에 넣는다(적재)는 의미, 모듈로 선택되었으며 필요할 때 insmode로 적재.



$make menuconfig

$make dep

$make zImage



다시 zImage를 만들어줘야되므로 복잡하다.



-2. insmod  명령어를 이용하는 방법


커널소스 ------> object

컴파일

make


1.c    ->    1.0        ->

2.c    ->    2.0        ->

3.c    ->    3.0        ->

.

.

.

.

.     ->                ->         vmlinux

.                                커널 이미지

.                                insmod(Object 파일을 커널에 넣는 명령어)


x.c   ->     x.o        ->    


gcc hello.c -o hello


hello.o


hello


file hello.c       ASCII2.text

file hello.o      relocate

file hello        Executae


relocate 파일(~.o)을 모아서 실행 가능한 파일을 만든다.



제대로 동작하는지 확인하기 위해서


insmod -> 커널 메모리 영역 -> rmmod

넣는것   메모리에 올리는것      빼는것


커널 메모리 영역




주소 symbol

--- -----

x와 관련된 모듈의 symbol이 들어감


symbol 함수와 전역변수

전출력을 위해서 맞추어야 할 표준이 있다. 



$lsmod 현재 들어가 있는 모듈 확인 명령어


3. 모듈 프로그래밍 방법

- 모듈을 만들 때 유용한 두 가지의 3-3 원칙

-1 모듈 소스 코딩 :

코딩시 3개의 헤드 파일을 반드시 include 시켜야 된다.

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/init.h> 


-2 모듈 컴파일 :

Makefile에 3개의 옵션을 넣어야한다.

CFLAGS = - DMODULE                                                                                                      -D_KERNELL_                                                                                                    -I(KERNEL_DIR)/include

 


4. 모듈 소스 구성 형태

-1 모듈 소스 구성 형태

init_module()

     초기화(시작); 

cleanup_module()

        종료(마침); 

}


"insmod"로 모듈 추가 -> 커널 메모리 영역 -> "rmmod"로 모듈 삭제

커널 메모리 영역


모듈 

lsmod를 입력하면 init_module이 호출되면서 모듈이 초기화된다.

rmmod를 입력하면 cleanup_moudle이 호출되면서 모듈이 삭제된다.


-> 모듈 제작 후 중복문제 발생!


-2. 모듈의 심볼릭 문제 해결 방법

" 디바이스이름_"

"기능이름_"

eros_start()

{

....

}

eros_end()

{

....

}


module_init( eros_start )

module_exit( eros_end )

->

이러한 작용(기능)을 <linux/init.h>에서 수행   


5. 모듈 소스 작성

-1 모듈 소스 작성

#include <linux/module.h>

#include <limux/kernel.h>

#include <linux/init.h>

int eros_start()

{

    printk("EROS MODULE is started !\n");

    return 0;

}


void eros_end()

{

    pirntk("EROS MODULE is exited !\n");

}

module_init(eros_start);

module_exit(eros_end); 


'Univ > 임베디드' 카테고리의 다른 글

임베디드 리눅스 아키텍처  (0) 2018.06.14
임베디드 수업내용 정리 2018_06_12  (0) 2018.06.12
2018_0529_수업자료  (0) 2018.05.29
2018_0524 임베디드 수업자료  (0) 2018.05.24
2018_05_17 수업자료  (0) 2018.05.17