'임베디드 시스템'에 해당되는 글 1건

* 임베디드 시스템


임베디드 시스템은 내부에 CPU, 메모리, 입출력 포트를 가지고 있어 특정한 기능을 수행하는 시스템이다.


임베디드 시스템의 핵심인 프로세서는 단순한 기능을 가지는 경우 8비트 이하의 저기능 프로세서가 주로 사용되고 고급 기능의 임베디드 시스템 경우는 32비트 이상의 고기능 프로세서가 주로 사용된다. 


32비트급 임베디드 시스템용 프로세서는 ARM 계열 프로세서가 대표적이고 8비트급 프로세서로는 ATmel AVR 시리즈가 대표적이다.


AVR 시리즈는 칩 내부에 플래시 메모리가 있어 PC에서 작성한 프로그램 코드를 쉽게 칩 내부로 보내어 실행할 수 있다는 편리한 점이 있다.



* 임베디드 시스템용 운영체제 


실기간성이 필요한 임베디드 시스템의 경우 실시간 운영체제(Real time OS)가 사용되어야 하는데, 이는 정해진 시간 내에 주어진 작업을 처리하여 시스템이 결과를 출력 할 수 있도록 하는 운영체제 이다. 즉 주어진 작업을 단순히 빨리 처리하기 보다는 정해진 시간 안에 처리를 완료한다는 의미이다. 이를 위해 실시간 운영체제는 시스템 응답속도, 인터럽트 처리속도가 빠르고 선점형 멀티태스킹 및 스케줄링 등이 지원되어야 한다. 


* 리눅스 디렉터리 구조 





/ 최상위디렉터리


/bin 기본 명령어들이 위치하는 디렉터리.. 실행 명령어(예: cp, mv, vi)들이 이 디렉터리에 포함되어 있다.


/sbin 리눅스 시스템 관리에 필요한 명령어가 위치하는 디렉터리이다.


/dev 각 디바이스에 대한 디바이스 파일이 위치하는 디렉터리이다.


/etc 리눅스 환경 설정에 필요한 파일들이 위치하는 디렉터리이다.


/lib 리눅스 기본 라이브러리(커널 모듈)가 위치하는 디렉터리이다.


/opt 사용자가 나중에 추가로 설치하는 패키지가 위치하는 디렉터리이다.


/boot 부팅에 필요한 파일들이 위치하는 디렉터리이다.


/usr 리눅스 응용프로그램, 시스템 파일, 각종 패키지 및 이들을 위한 라이브러리 파일 등이 위치하는 디렉터리이다. 



* 리눅스 주요 명령어

 

cat : 텍스트 파일 내용을 화면에 출력한다. 


cat test.c -> test.c 파일 내용을 화면에 출력


cd : 디렉터리를 이동한다.


cd /usr/bin -> 현 디렉터리에서 /usr/bin 디렉터리로 이동


chmod :  파일이나 디렉터리의 퍼미션 설정(change mode) 이때 퍼미션은 소유자(owner), 그룹(group), 그 외 사용자(others) 


chmod 666 test.dat -> 파일 test.dat에 대해 퍼미션을 666으로 설정한다.(즉 모든 사용자가 해당 파일을 읽기/쓰기 할 수 있다)


chmod 700 exam2 -> 파일 exam2에 대해 퍼미션을 700으로 설정한다.


chgrp : 파일이나 디렉터리의 그룹을 변경한다.


chgrp project2 exam4 -> 파일 exam4의 그룹을 project2로 변경한다.


chown : 파일이나 디렉터리의 소유자를 변경한다,


chown gildong exam5 -> 파일 exam5의 소유자를 gildong으로 변경한다.


cp : 파일이나 디렉터리를 복사한다. 


ifconfig : 네트워크 인터페이스의 각 항목을 설정하거나 설정된 상태를 보여준다.


more : 텍스트 내용을 한 화면씩 출력한다.


mount : mount 명령은 하드디스크, CD-ROM, USB 메모리 등 블록 디바이스에 있는 파일시스템을 리눅스 디렉터리에 연결해 사용자가 이에 접근할 수 있도록 해준다. 마운트 시킨 디바이스와의 연결을 끊을 때는 언마운트 동작 명령인 umount한다.


ping : 목적지까지의 TCP/IP 네트워크 연결 상태를 테스트하는 데 사용한다 일정 개수의 패킷을 보내어 돌아오는 시간, 손실된 패킷 수 등을 표시한다.


ps : 현재 프로세스의 상태를 보여준다.


rpm : RPM(RedHat Package Manager)형태의 파일을 풀어 설치하고 관리 할 수 있게 해주는 패키지 관리 프로그램이다. 레드햇 계열 리눅스에서 주로 사용한다. 이를 사용하면 rpm 형태의 파일로 묶여 있는 프로그램을 쉽게 설치/업데이트/삭제할 수 있다.


그런데 일반적인 rpm 패키지라면 yum 명령을 사용하는 것이 더 편리하다. yum도 rpm과 마찬가지로 레드햇 계열 리눅스에서 사용하는 패키지 자동 설치 및 업데이트 명령이다.


yum install '패키지 이름'


yum으로 설치가 안되는 패키지도 있으며 이런 경우는 직접 rpm 파일을 구해서 rpm으로 설치해야 한다.


shutdown : 리눅스 시스템을 종료한다.


su : subsitute user 의미로서 다른 사용자로 바꾸어 쉘을 새롭게 시작한다.


uname : 시스템 관련 정보를 화면에 출력한다.


vi : 리눅스 기본 텍스트 편집기 


tar : 여러 파일과 디렉터리를 하나의 파일로 묶는 용도 


tar cf test_dir.tar test_dir  -> test_dir의 모든 내용을 test_dir.tar 라는 파일로 묶어준다.


gzip과 gunzip : 파일 압축(gzip)과 해제(gunzip) 기능을 가지며 압축 효율이 초기 유닉스 압축 프로그램인 compress보다 높다.


* 리눅스 시리얼 통신 기능


임베디드 시스템 개발 시 사용하는 리눅스의 대표적인 시리얼 통신 프로그램으로 미니컴이 있다. 대부분의 리눅스 버전에 포함되어 있으며 없는 경우 추가로 설치하면 된다. 이 시리얼 통신 프로그램이 정상적으로 동작하려면 호스트와 임베디드 시스템 사이에 시리얼 포트끼리 서로 연결되어 있어야 하고, 통신 속도(bps), 포트 번호, 제어 방법 등 시리얼 통신을 위한 파라미터도 서로 일치해야 한다.


minicom -s configuration 옵션 메뉴가 나온다.


여기서 상하 화살표 키를 사용해 "serial port setup" 항목을 선택하면 시리얼 포트, 전송속도, 흐름제어(flow control) 등을 설정하는 화면이 나온다.


이 화면에서 먼저 'A'를 사용해 사용할 호스트의 시리얼 포트를 정해준다. 보통 /dev/ttyS1, 또는 /dev/ttyS0 로 준다. 'E' 키를 누르면 시리얼 통신 파라미터를 설정하는 화면이 나온다. 이 화면에서 Current : 38400 8N1 부분은 현재 전송속도가 38400 bps이고 데이터 전송 단위가 8비트씩이며 패리티비트는 사용하지 않고 스톱비트로 1트를 사용한다는 의미이다. 


* 리눅스 make 기능


리눅스 make 기능은 프로그램 개발 과정에서 수시로 수정되는 여러 소스 파일들의 연관관계를 파악하여 자동으로 컴파일 및 실행파일을 만들어 준다. 


Makefile은 make가 이해할 수 있는 일종의 쉘 스크립트 언어이며 기본 구조는 다음과 같이 target, dependency, command의 세 항목으로 이루어진다.


target : dependency

[tab] command

[tab] command


여기서 target 항목은 command가 수행된 이후 최종적으로 생성되는 결과 파일을 지정하며, command 항목이 컴파일 명령이라면 오브젝트 파일이나 실행파일이 target의 이름이 된다. dependency 항목에는 서로 연관관계가 있는 파일 이름들이 나열된다.


command 항목에는 일반 리눅스 명령들이 들어가고 제일 앞에 tab 문자로 시작해야 한다. dependency 항목의 파일들이 수정되었거나, 현 디렉터리에 target 항목이 가리키는 파일이 없을 때 command 항목의 명령들이 차례대로 수행된다.


ex : ex1.o ex2.o ex3.o

  gcc -o ex ex1.o ex2.o ex3.o

ex1.o : ex.h ex1.c

  gcc -c ex1.c

ex2.o : ex.h ex2.c

  gcc -c ex2.c

ex3.o : ex.h ex3.c

  gcc -c ex3.c


 위는 3개의 파일(ex1.c, ex2.c, ex3.c)을 컴파일하여 실행파일을 얻는 예이다. 여기서 target 항목에 지정된 실행파일 "ex"가 생성되기 위해서는 ex1.o, ex2.o, ex3.o 파일이 필요함을 보여준다. 따라서 최초 make 명령을 주면, 컴파일 명령인 gcc -c ex1.c, gcc -c ex2.c, gcc -c ex3.c가 차례로 수행되어 오브젝트 파일 ex1.o, ex2.o, ex3.o 가 차례로 생성되고 마지막으로 링크 동작을 위해 gcc -o ex ex1.o ex2.o ex3.o 명령이 수행되어 실행파일 ex가 생성된다.


이후 ex2.c 와 ex3.c 파일이 수정되었다면 다시 make 라고 치면 자동으로 gcc -c ex2.c 와 gcc -c ex3.c 가 실행되고 이어 gcc -o ex ex1.o ex2.o ex3.o 가 실행되어 수정된 내용이 반영된 실행파일이 만들어진다. 


리눅스 make에서는 매크로를 사용할 수 있는데 이를 사용하면 정의된 문구를 대치하므로 긴 문구나 반복되는 문구를 대신하면 편리하다. 매크로 정의는 매크로이름 = 문구 식으로 하고 사용 시에는 $(매크로 이름) 식으로 한다. 


EXOBJ = ex1.o ex2.o ex3.o

EXHDR = ex1.h ex2.h ex3.h 

ex : $(EXOBJ)

 gcc -o ex $(EXOBJ)

ex1.o : $(EXHDR) ex1.c

 gcc -c ex1.c

ex2.o : $(EXHDR) ex2.c

 gcc -c ex2.c

ex3.o : $(EXHDR) ex3.c

 gcc -c ex3.c 


이외에 predefined 매크로도 있다.


리눅스 make에서는 레이블을 사용할 수 있다. Makefile 파일에서 target 부분 이후에 dependency 항목이 오지 않을 경우 해당 target은 레이블로 인식되며 이때 이 레이블은 make 명령의 파라미터로 사용될 수 있다.


delete : 

   rm $(EXOBJ)


위에서는 "delete" 다음에 dependency 항목이 없으므로 레이블이고 


make delete 와 같이 입력하면 rm $(EXOBJ) 명령이 실행되어 매크로에 의해 정의된 파일들이 삭제된다.



* 리눅스 커널 및 설치


리눅스의 핵심 기능을 제공하는 커널은 최초 버전 1.0부터 시작하여 현재 버전 3이 주로 사용된다.


리눅스 커널이란, 응용 프로그램을 대신하여 하드웨어를 제어하는 편리한 기능을 제공하며, 응용 프로그램의 처리를 요청받아 동작하는 이벤트 중심의 프로그램이다. 응용 프로그램으로 부터 시스템 콜이 요청되거나 하드웨어로 부터 인터럽트 요청이 들어오면, 그 요청에 대응하는 처리를 수행합니다. 다시 말해서 리눅스 커널은 자기 혼자서 동작하지 않는다.


커널 소스 주요 디렉터리별 기능들은 다음과 같다.


kernel 디렉터리 - 커널의 중심이 되는 소스(스케줄링, 프로세스 관리, 시그널 처리 등) 부분이 들어 있으나 일부 프로세서에 종속적인 커널 코드는 디렉터리 arch/'프로세서명'/kernel에 있다.


arm 프로세서 경우는 arch/arm/kernel에 있다. 이 디렉터리에는 커널의 기능별로 소스 파일이 분리되어 있고 예로 module.c, timer.c, signal.c, sched.c 등이 있다.


arch 디렉터리 - 프로세서 유형별로 서브디렉터리를 가지고 있으며 프로세서에 종속적인 커널 코드를 포함하고 있다. 


drivers 디렉터리 - 디바이스 드라이버 코드를 가지고 있으며 각 디바이스 드라이버에 대한 코드가 들어 있는 서비디렉터리를 가진다. 블록 디바이스 드라이버 코드가 들어 있는 block, 문자 디바이스 코드가 들어 있는 char, 네트워크 장치 디바이스 드라이버 코드가 들어 있는 net.. 







블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요