1 / 70

Embedded Linux

Embedded Linux. Network package. vi, emacs,… . Compiler. ls, who, … . Kernel. Device Driver. X window system. RDBMS. Hardware. 운영체제. 운영체제란? 자원 관리자 ( Resource Manager) 응용에게 자원에 대한 서비스 제공 ( Computing Environment) 자원의 종류 물리적인 자원 : 처리기, 메모리, 디스크, 터미널, 네트웍, ...

chidi
Download Presentation

Embedded Linux

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Embedded Linux

  2. Network package vi, emacs,… Compiler ls, who, … Kernel Device Driver X window system RDBMS Hardware 운영체제 • 운영체제란? • 자원 관리자 (Resource Manager) • 응용에게 자원에 대한 서비스 제공 (Computing Environment) • 자원의 종류 • 물리적인 자원 : 처리기, 메모리, 디스크, 터미널, 네트웍, ... • 추상적인 자원 : 태스크, 세그먼트/페이지, 파일, 드라이버, 통신 프로토콜, 패킷, 보안, ...

  3. 운영체제 종류 • RTOS(Real-Time OS) • VxWorks, pSOS, LEX, uITRON, EPOCH, Nucleus • UNIX • Linux • Windows System • MacOS

  4. 임베디드 (실시간) OS의 주요 개념 • 태스크 • 수행중인 프로그램 (an instance of a running program) • 스케줄링 단위 (scheduling entity) • 제어 흐름과 주소 공간의 집합 (a control flow and address space) • 멀티 태스킹 • 여러 개의 태스크를 동시에 실행시키는 것 • 일반 OS 에서의 태스크 • 각 태스크들은 대분분 무관한 프로그램임 • 임베디드 시스템에서의 태스크 • 하나의 큰 응용 프로그램을 논리적으로 나눈 것 • 기능상 매우 밀접한 관계 • 태스크 사이에 이루어지는 작업들이 많다. • 응용 프로그램을 실행을 위해 여러 기능들이 동시 실행 요구 • 순차적이 아닌 동시 실행의 필요성이 있다.

  5. 임베디드 (실시간) OS의 주요 개념 • 스케쥴러(Scheduler) • OS의 핵심기능 • 다음 번에 어떤 태스크를 실행해야 하는 지를 결정하는 코드 부분 • 태스크 선택 정책 : 우선순위 기반의 스케쥴링 • FIFO(First In First Out), Round-robin 등 • 선점(Preemptive) • 어떤 태스크가 수행되고 있을 때 커널이 중간에 그 태스크의 수행을 중지 시키고 다른 태스크의 기능을 수행시키는 기능 • 선점형 커널 / 비선점형 커널 • 다른 태스크로 실행이 넘어갈 때 문맥전환(context switching) 발생 • Context switching • 일단 현재 수행 중인 태스크 상황 하에서의 시스템상태(문맥)를 TCB(Task Control Block)이라는 특정한 자료구조에 저장하고, 다음에 새로운 태스크의 문맥을 가져와 시스템 상태를 복원한 후에 실행하는 것 • Context switching은 overhead이기 때문에 짧을 수록 효율적 임 • thread의 개념을 통해 이를 보완하는 방법

  6. 임베디드 (실시간) OS의 주요 개념 • Mutual exclusion • 두개의 태스크가 동시에 하나의 공유자원에 접근하려고 할 때 한 태스크에게 자원 사용에 대한 배타적 권리를 보장하는 것 • Critical section : 공유자원을 access하는 일련의 코드부분 • 다른 태스크에 의해서 중단되어서는 안 되는 일련의 명령 혹은 코드 블록 • 상호배제 기법 • 인터럽트 발생을 방지 • Critical section에 들어가기 전에 인터럽트를 disable시키고 (CLI) 빠져 나오면서 인터럽트를 다시 enable 시키는 방법 (STI) • 단일 CPU의 경우 단순하게 사용 가능 • semaphore 이용 • semaphore를 얻지 못하면 공유자원을 얻을 수 없으며 일단 semaphore를 얻으면 공유자원을 마음 놓고 쓸 수 있다. • 다른 태스크를 위해서 공유자원을 다 쓰면 semaphore를 풀어야 한다. • Semaphore가 0 이면 waiting한다.

  7. 임베디드 (실시간) OS의 주요 개념 • Semaphore • 공유변수 사용 • mutual exclusion을 만들어 공유자원을 제어 • 태스크 사이의 동기화에 사용 가능 • 사용 방법 • 공유자원에 해당하는 semaphore를 만든다. • 공유자원을 사용하기 직전에 해당 semaphore 얻는다. • 변수 값이 0이 아닌 경우 그 변수 값을 1 감소 시킨다. • 0이면 양수가 될 때까지 기다린다. (SLEEP상태) • 공유자원을 다 쓰면 그 값을 1 증가 시킨다. • 종류 • Binary semaphore : 공유자원의 변수가 0,1인 경우 • Counting semaphore : 1이상의 값

  8. 임베디드 (실시간) OS의 주요 개념 • Task communication • 태스크간에 통신하는 방법 • Global variable을 쓰는 방법 / message passing 방법 • Global variable • exclusive access를 해야 하며, ISR이 포함된 인터럽트를 disable해야 한다. • Task 사이에서는 인터럽트를 disable하는 방법 외에 semaphore를 사용할 수 있다. • message passing • Mailbox, queue, pipe – message의 크기에 따라 결정됨 • Task synchronization • 태스크 간의 동기화 기능 • Semaphore/event flag/signal 등을 사용

  9. 임베디드 (실시간) OS의 주요 개념 • Interrupt service • Asynchronous event를 CPU에 알리는 방법 • Interrupt는 외부에서 들어오는 중요한 신호로서 시간에 민감한 경우가 있기 때문에 interrupt latency가 짧은 것이 좋음. • ISR자체도 짧은 것이 좋은데 그 이유는 ISR 자체가 길어지면 interrupt nesting이 되기 쉽기 때문. • ISR에서는 보통 그에 상응하는 태스크 수준의 service routine을 부르고(HISR) 끝나도록 구성. • HISR에서는 마치 태스크처럼 존재해서 수행이 된다.

  10. 리눅스 역사(history) • Linux 역사 • 핀란드 대학원생 Linus B. Torvalds • 1991 version 0.01 발표 • 1994년에는 리눅스 커널 버전 1.0 • 1996년 2.0 • 1999년 2.2 버전의 발표로, 엔터프라이즈 환경에 진입할 수 있는 초석 마련 • 최근 2.4 버전이 주로 사용되고 2.6 발표 상태 • A. Tanenbaum 교수의 Minix 기반 (http://www.cs.vu.nl/~ast/minix.html) • Philosophy of COPYLEFT(open source) • GNU support • Various Distributions : Redhat, Ubuntu, Fedora, Debian, Slackware, Alzza, …

  11. Linux/GNU를 만들어가는 사람들 • 리누스 토발즈(Linus Torvalds) • 최초의 리눅스 커널을 만듦 • 리눅스 소스코드를 GNU의 GPL에 따라 인터넷에 공개 • 리차드 스톨만(Richard Stollman) • GNU 프로젝트의 리더로 FSF를 설립 • 카피레프트(CopyLeft) 주장 • 래리 월(Larry Wall) • 펄의 제작자 • 오픈 소스 프로그램과 여러 가지 게임 만듦 • 밥 영 (Bob Young) • RedHat의 공동 창립자, 오픈소스 운동의 선구자

  12. process 1 process 2 process 3 process n User Space System Call Interface Filesystem Manager Process Manager Task Management Scheduler Signaling IPC Memory Manager Ext2fs proc xiafs nfs msdos ntfs Paging/Segmentation Kernel Space Buffer Cache Device Manager Network Manager character block socket Ipv6 IrDA Bluetooth Console KBD SCSI CD-ROM PCI ethernet Hardware Interface dev1 dev2 dev3 dev4 devn 리눅스 운영체제 구조 (Source : Linux Kernel Internals)

  13. 리눅스와 GNU • GNU (GNU’s not Unix) • 80년대 초반 리차드 스톨만(Richard Stallman)에 의하여 시작 • GPL (General Public License) • GPL에 의거한 모든 소프트웨어는 무료 • 변경 사항을 포함해서 재판매 하는 것은 허용하나 소스는 공개해야 함 • 프로그래머는 자신의 소프트웨어로 발생하는 어떤 위험이나 손해에 대한 법률적 책임이 없음 • Linux에 gcc, emacs 등을 이식 • BSD의 많은 유용한 유틸리티를 포함하게 하는 계기가 됨 • 리눅스는 GPL에 의거하여 배포

  14. 리눅스 커널 버전의 선택 • 커널 버전 • 역사 : http://www.kernel.org • 버전 숫자 : X.Y.ZZ • X : 커널의 버전 • Y : 릴리즈 번호, 홀수->개발 중, 짝수->안정된 버전 • ZZ : Modifications, 사소한 변화를 의미 • 최신 버전 : 3.0.4 • 새로운 다양한 기능이 이미 추가되어 있음 • 크기가 매우 크다는 단점이 있음 • 커널 버전의 선택 • 임베디드 시스템의 크기를 고려 • 필요한 기능을 고려 • 확장성을 고려

  15. 왜 Linux를 사용하는가 ? • 풍부하고 다양한 하드웨어를 효과적으로 지원 • 대부분의 하드웨어를 지원하는 추세임 • 인터넷에 맞는 강력한 네트워크 구축 • 윈도우와 통신 가능 (삼바) • 놀라운 성능 및 안정성 • Pentium으로도 충분히 빠르며 안전하게 수행 • 다양한 응용 프로그램 • 무료이기 때문 • 배포판 : RedHat 9.0, …

  16. Embedded Linux • 임베디드 리눅스 출현 배경 • H/W의 발전 • 32/64bit 고성능 CPU • S/W의 많은 기능 요구 • OS의 기능이 중요, 안정된 운영체제의 제공(멀티 태스킹의 제공) • 강력하고 다양한 네트워크 환경의 제공 • 다양한 형태의 파일시스템과 실행파일 포맷 지원 • 확장성의 다양함과 용이함의 제공 • Free Software

  17. Embedded Linux (cont’d) • 임베디드 리눅스 장점 • 기능성과 확장성이 우수 (리눅스 이용에 따른 장점) • PowerPC, ARM, MIPS 등 다양한 CPU Platform지원함 • 로열티가 없으므로 가격 경쟁력이 우수 • 사용자 층이 넓어 오류 수정이 빠르고 안정성이 우수 • 기존의 데스크 탑 개발 환경과 동일하여 개발이 용이함 • 임베디드 리눅스 단점 • 기존의 RTOS보다 많은 메모리를 요구함 • 범용 OS로 설계되어 Real-Time을 지원하지 못함 • 개발 환경이 Text 기반의 환경임으로 개발에 어려움이 있음 • GUI 환경을 개발하기 어려움 • 제품화하기 위한 솔루션 구성이 어려움 • 많은 업체들과 개발자들이 독자적으로 개발하고 있어 표준화가 어려움

  18. 리눅스 사용을 위한 준비 • Linux 배포판설치 • 2.1 linux 설치 파일 참조 • 에디터 • SHELL 이해 • 리눅스 명령어 이해 • 시스템 관리 명령어 • 네트웍 관리 명령어 • 파일 관리를 포함한 다양한 리눅스 명령어 • 에디터, 컴파일러 이해

  19. 에디터 • vi • 대표적인 텍스트 에디터 • 텍스트 모드로 동작 • gedit • WordPad 정도의 기능을 가진 그래픽 에디터 • 파일 편집, 저장, 자르기, 복사, 붙이기, 찾기 등의 기능 • kate • KDE Advanced Text Editor • Editing Text documents

  20. Shell

  21. 개요 • 쉘이란 무엇인가? • 명령어 해석기(command interpreter) • 사용자와 os 사이에 창구 역할 • 쉘의 종류 • Bourne shell • Bash(Bourne Again shell) • Korn shell • C shell • … Korn shell C shell Bourne shell core core

  22. 쉘의 핵심 기능 쉘 내장명령어 스크립트 변수 리다이렉션 대표문자 파이프 명령열 서브쉘 후면처리 명령어처리 지역 환경 조건부 무조건부

  23. 쉘 선택 • 쉘 선택 • 시스템 관리자가 설정 /etc/passwd • 쉘의 절대 경로명 Bourne /bin/sh , /bin/bash Korn /bin/ksh C shell /bin/csh

  24. 쉘 선택 • 사용자가 쉘 선택 %chsh Changing login shell for chang Old shell : /bin/csh New shell : /bin/ksh %logout login : chang passwd: $

  25. 쉘의 절차 read a startup file in the user's home directory display a prompt and waits for a user command execute the user's command Control-D Terminate

  26. 시작 파일(Startup file) • Bourne shell : /bin/sh • .profile • .login • Bourne again shell : /bin/bash • .bashrc • .login • C shell : /bin/csh • .cshrc • .login

  27. 실행 파일 vs. 내장 명령어 • Shell내장 명령어 % echo -n {arg}* % cd directory • 유틸리티 프로그램(utility program) • 실행 허용 파일(a file with execute permission) • 디렉토리에 저장되어 있음 • 쉘 변수$PATH에 있는 순서대로 찾아서 실행 /bin, /usr/bin, /usr/local/bin, /usr/ucb, /etc, /usr/bin/X11 % ls ... /bin/ls

  28. 출력 리디렉션 • 출력을 파일에 저장 %command > fileName %ls > sample.txt • 출력을 파일에 첨부(append) %command >> fileName %cat >> sample.txt

  29. 입력 리디렉션 • 입력 리디렉션 • 파일을 표준입력으로 받아서 실행 %command < fileName %elm chang < sample.txt • Here documents %command << word … word

  30. 파이프(Pipe) • Command1의 표준 출력을command2의 표준 입력으로 만든다. %command1 |command2 %ls | wc -w

  31. 명령어 대치 • backquote(`)로 둘러 쌓인 명령어는 그 표준출력으로 대치된다. %echo the date today is `date`

  32. Shell Script Programming • shell script • Shell 명령들을 포함하는 실행 가능 상태의 파일 • Shell script 예제 프로그램 • 파일 확장자 바꾸기 shell script의 첫 줄에 사용 shell 명시 #!/bin/bash #         rfe old_extension new_extension # 예제: # 현재 디렉토리의 모든 *.gif 파일을 *.jpg로 바꾸기 #          rfe gif jpg if [ $# -ne 2 ] then   echo "사용법: `basename $0` old_file_suffix new_file_suffix"   exit 1 fi for filename in *.$1 # 첫 번째 인자로 끝나는 파일들을 찾아서 do   mv $filename ${filename%$1}$2   # 파일 이름에서 첫 번째 인자 부분을 떼어내고 두 번째 인자를 붙인다. done

  33. 기본 명령어

  34. 명령 실행 • Shell • UNIX의 명령어 해석기(command line interpreter) • Bourne shell, Korn shell, C shell • date [yymmddhhmm [.ss]] • display or set current date and time • 온라인 매뉴얼 • man [chapter] word • man -k keyword • $man -k mode • $man chmod • $man 2 chmod

  35. 특수 문자 • 특수 문자 • $stty all • erase kill werase rprnt flush lnext susp • intr quit stop eof • 프로세스 종료 • Control-C • standard way to interrupt the foreground job • 출력 멈춤/계속 • Control-S/Control-Q • 입력 끝 • Control-D

  36. 파일 시스템 bin usr dev home chang

  37. 파일 시스템 • 홈 디렉토리(home directory) • 로그인하면 홈 디렉토리에서 작업 시작 • 시스템 관리자가 설정 • 현재 작업 디렉토리(current working directory) • Shell이 현재 작업 중인 디렉토리 • 로그인 하면 홈 디렉토리가 현재 작업 디렉토리 • cwd 변경 • 디렉토리 이동 • cd [directoryName]

  38. 경로명(pathname) • 절대 경로명(Absolute path name) • 루트 디렉토리로부터 파일이나 디렉토리의 경로 이름 • /home/chang • 상대 경로명(Relative path name) • 파일이나 디렉토리의 경로이름을 cwd을 기준으로 기술 • . : 현재 디렉토리 • .. : 부모 드렉토리

  39. 파일 명령어 • 디렉토리 내용 리스트 ls -adglsFR {fileName}* {directoryName}* -a : hidden files starting with . -l : long listing including permission, owner, modification time -d : directory not files -g : file's group -s : size -F : file type ( *, /) -R : recursively

  40. 파일 명령어 • ls

  41. 파일 명령어 • 파일 내용 리스트 cat [option] {fileName}* more [option] {fileName}* page [option] {fileName}* head [option] {fileName}* tail [option] {fileName}*

  42. 파일 명령어 • 파일 이름 변경 • mv[option]oldFileName newFileName • mv[option] {fileName}* directoryName • mv[option]oldDirectoryName newDirectoryName • 디렉토리 만들기 • mkdir[option]newDirectoryName • 새 디렉토리 생성

  43. 파일 명령어 • 파일 복사 • cp -i {fileName}* directoryName • cp -r directoryName1 directoryName2 • cp -i oldFileName newFileName • 파일 혹은 디렉토리 제거 • rmdir {directoryName}+ • rm -fir {fileName}+ • 파일의 단어 수 세기 • wc -lwc {fileName}*

  44. 파일 특성(file attribute) • 파일 이름 • 파일 크기 • 파일을 구성하는 블록 수 • 파일 갱신 시간 • 최후 갱신 시간 • 파일 소유자/그룹 • 파일 소유자 • 각 프로세스는 소유자가 있다. • 로그인 사용자 아이디(login user id) • 프로세스가 생성한 파일의 소유자 • 그 프로세스의 소유자로 설정된다.

  45. 파일 특성(file attribute) • 파일 타입

  46. 파일 특성(file attribute) • 허용 모드(permission mode)

  47. 파일 변경

  48. 파일 변경

  49. 파일 비교 • diff : 파일간의 모든 차이점과 비슷한 점을 보여줌 • diff [ -i -Dflag ] fileName1 fileName2 -i ; 대소문자의 구분을 무시한다(ignore) -Dflag ; C preprocessor를 위한 출력을 생성

  50. 파일 탐색 • find pathList expression • pathList 파일을 탐색할 경로의 리스트 (recursive search) • expression find . -name "*.txt" -print -name pattern 파일 이름이 pattern과 일치하면 참(*, [, ], ? 포함 가능) -perm oct permission의 8진수 표현이 oct와 일치하면 참 -type ch 파일의 유형이 ch이면 참 (ch: b=block, c=char) -user userId 파일의 소유자가 userId이면 참 -group groupId 파일의 그룹이 groupId이면 참 -atime count 접근(access)한 날 수가 count 이내이면 참 -mtime count 수정(modify)한 날 수가 count 이내이면 참 -ctime count 수정되고 화일의 속성이 바뀐 날수가 count이내이면 참 -exec command 수행 중인 command의 종료값이 0이면 참. \;로 끝남 command의 argument가 {}이면, 현재 화일의 이름으로 치환 -print 현재 파일명을 프린트하고 참 값을 반환 -ls 현재 파일의 속성을 보여주고 참 값을 반환 -cpio device 현재의 파일을 cpio 형식(5120 byte records)으로 device에 쓰고 참 값 반환 !expression expression의 논리 부정 \( expr1 [-a] expr2 \) 두 expression의 and \( expr1 [-o] expr2 \) 두 expression의 or

More Related