• 검색 결과가 없습니다.

(Embedded System Programming) ESP30076 임베디드시스템프로그래밍

N/A
N/A
Protected

Academic year: 2022

Share "(Embedded System Programming) ESP30076 임베디드시스템프로그래밍"

Copied!
36
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

ESP30076 임베디드 시스템 프로그래밍 (Embedded System Programming)

조 윤 석 전산전자공학부

Module 3: Linux

(2)

 리눅스에 대한 이해

– 리눅스 주요 명령어 소개 – 리눅스 명령어 사용법

 vi 편집기 사용하기

 리눅스 파일 시스템 및 커널 파일시스템 구성 소개

주차별 목표

(3)

 1991년 핀란드 헬싱키 대학의 리누스 토발즈(Linux Benedict Torvalds) 학생에 의해 개발이 시작됨

 유닉스와 호환되는 공개된 운영체제를 개발하자는 계 획을 모임에 발표하고, i386에서 실행되는 유닉스 운영 체제를 개발하기 시작

 1995년에 들어서면서 리눅스는 i386 계열에서만 실행 되는 운영체제가 아닌 다양한 플랫폼에 포팅됨

 리눅스 커널 이외의 프로그램들은 GNU 프로젝트의 결 과물임

 GNU 프로젝트는 1984년 MIT 인공지능연구소의 연구 원이었던 리차드 스톨먼(Richard Stollman)에 의해 당시 기술을 상업화하려는 흐름과 소스를 공개하지 않는 분 위기에 반감을 가지면서 시작

What is Linux?

(4)

리눅스 주요 명령어

명령어 기능

ls 디렉토리 내에서 파일 목록 보기

cd 지정된 디렉토리로 이동하기

mkdir 디렉토리 만들기

rmdir 디렉토리 삭제하기

cp 파일 또는 디렉토리 복사하기

rm 파일 또는 디렉토리 삭제하기

mv 파일 또는 디렉토리의 이름을 변경하거나 경로 변경하기

chmod 파일 접근 권한 변경하기

cat 텍스트로 작성된 파일 내용을 화면에 출력하기

(5)

리눅스 주요 명령어

명령어 기능

more 텍스트로 작성된 파일 내용을 페이지 단위로 한 화면씩 출력하기

pwd 현재 작업하고 있는 디렉토리 이름 화면에 출력하기

tail 파일의 마지막 일정 부분 화면에 출력하기

grep 특정 패턴 찾기

tar 아카이브 파일을 생성하거나 풀기

df 마운트된 디스크 파일 시스템 보여주기

mount 파일 시스템 마운트 하기

umount 마운트 한 파일 시스템 해제하기

ifconfig 네트워크 카드의 IP 주소 등 설정 변경하기

(6)

리눅스 주요 명령어

명령어 기능

insmod 디바이스 드라이버를 커널에 삽입하기

rmmod 디바이스 드라이버를 커널로부터 삭제하기

lsmod 커널에 모듈로 올라가 있는 모듈 목록보기

mknod 디바이스 관련 특수 파일인 디바이스 파일 만들기

apt-get 데비안 계열의 패키지 관리자

(7)

 파일 및 디렉토리 관리 명령어

– ls, cp, mv, rm, mkdir, rmdir, chmod, cat, more, vi

 기타 명령어

– df, file, tail, pwd, tar, grep

 기타 도구

– gcc, make, ctags, cscope, taglist

 시스템 관리 명령어

– mount, umount, dd, ifconfig, apt-get – TFTP, NFS, 삼바(samba) 설정 및 활용

 디바이스 드라이버 관련 명령어

– insmod, rmmod, mknod, lsmod

리눅스 기본 명령어 요약

(8)

 파일 또는 디렉토리의 위치 지정 경로

– 절대경로

• 항상 리눅스 파일시스템의 최상위 디렉토리를 의미하는 ‘/’로 시작 하는 경로

– 상대경로

• 현재 디렉토리를 중심으로 파일 경로를 지정

• 현재 디렉토리: .

• 상위 디렉토리: ..

• 사용자 계정 단위로 디렉토리 이동: ~

리눅스 파일시스템에서의 경로

(9)

 리눅스 주요 명령어의 옵션들

– ls

• -a(모든 파일보기)

• -l(자세한 정보 보기)

• -s(파일 크기 보여주기)

• -R(하위 디렉토리 파일목록까지 보여주기)

• -F(파일형식을 알리는 문자를 각 파일 뒤에 추가하기)

– cp

• -i(복사대상 파일이 있을 경우 확인하기)

• -a(원본파일의 속성, 링크 정보들을 그대로 유지하면서 복사하기)

• -r(경로를 복사할 경우 그 안에 포함된 모든 하위경로와 파일들을 복사하기)

리눅스 주요 명령어 및 명령어 옵션

(10)

 리눅스 주요 명령어의 옵션들

– rm

• -i(파일 삭제 시 확인하기)

• -f(강제로 삭제하기)

• -r(디렉토리 삭제 시 하위 디렉토리와 파일들 모두 삭제하기)

– tar

• c(아카이브 파일 생성)

• t(아카이브 파일 목록보기)

• x(아카이브 파일추출)

• f(아카이브 파일 이름지정)

• v(작업 중 자세한 정보 보여주기)

• j(bunzip으로 압축되어 있는 파일 풀기)

• z(gzip으로 압축되어 있는 파일 풀기)

리눅스 주요 명령어 및 명령어 옵션

(11)

 chmod: 파일 접근 권한 변경(소유자, 그룹, 다른 사용자)

– rwxrwxrwx, rw-r--r--, rwxr-xr-x

– 위의 권한을 숫자로 표현시: 777, 644, 755

 cat: 텍스트로 작성된 파일 내용을 화면에 출력

 more: 텍스트로 작성된 파일 내용을 페이지 단위로 한 화면씩 출력

 tail: 파일의 마지막 부분 출력

– -n(마지막 n개의 행 출력. 기본값은 10임), -f(파일의 뒷부분에 새로운 내용 추가시 추가된 내용 출력)

 파이프 기호(|): 명령어에서 나온 결과값을 바로 다음 명 령어의 인수로 전달

– 예: ls –R /etc | more

리눅스 주요 명령어 및 명령어 옵션

(12)

 pwd: 현재 작업하고 있는 디렉토리 이름 화면에 출력하기

 grep: 특정 패턴 찾기

– % grep error /var/log/messages – % ls /sbin | grep mkfs.*

– % netstat –a | grep tftp

 tar: 아카이브 파일을 생성하거나 풀기 (압축 기능도 제공됨)

– % tar xvfz blob_pro3_050126.tar.gz

– % tar xvfj linux-2.4.19-pro3_usb20_v32.tar.bz2

 df: 마운트된 디스크 파일 시스템 보여주기

 mount: 파일 시스템 마운트하기

 umount: 마운트한 파일 시스템 해제하기

 ifconfig: 네트워크 카드의 IP 주소 등 설정 변경하기

– % ifconfig eth0 192.168.10.100

 apt-get: 데비안 계열의 패키지 관리자

– 리눅스 배포본마다 패키지 관리자는 다름 (예: rpm, yum 등)

리눅스 주요 명령어 및 명령어 옵션

(13)

 리눅스 주요 명령어의 옵션들

– apt-get

• –h(도움말)

• -d(설치하지 않고 인터넷에서 다운로드만 하기)

• -u업그레이드 패키지 리스트 보여주기)

– apt-get install

• 새로운 패키지 설치

– apt-get update

• 설치된 패키지 업데이트

– apt-get remove

• 설치된 패키지 제거

리눅스 주요 명령어 및 명령어 옵션

(14)

 현재 작업 디렉토리는 /root/work/cmd라고 가정하 고, 하위에 아무런 내용도 없다고 가정한다. 그런 다 음 아래와 같은 파일 구조를 생성해 보기

기본 명령어 연습하기

CWD=/root/work/cmd

knu/ hgu/ all/

kidec/ csee/ knu/ csee_copied/

welcome hello kidec/ hello 복사본 welcome

(15)

1. cd /root/work/cmd 2. mkdir knu

3. mkdir knu/kidec 4. cd kidec

5. vi welcome

6. mkdir ../../hgu

7. cd ../../hgu ← 현재디렉토리:~/work/cmd/hgu 8. mkdir csee

9. vi csee/hello 10.mkdir ../all

11.cp –r ../knu ../all 12.cd ..

13.cp –r hgu/csee all/csee_copied

기본 명령어 연습하기 - 답안

(16)

 마운트 하기(mount, umount)

– 다양한 종류의 파일 시스템을 리눅스에서 마운트 할 수 있음 (예: ext2, ext3, iso9660, nfs, smb)

– 마운트시 사용하는 명령어는 mount, 마운트된 것을 해제할 때는 umount 명령어를 사용함 – 마운트를 하는 방법은 먼저 마운트 지점을 생성하고, mount 명령어를 사용하여 마운트 시킴 – 마운트 하려고 하는 대상이 실제 디바이스의 블록 파일 시스템이 아니라 파일로 구성된 블록

시스템일 경우는 마운트시 –o loop의 추가 옵션을 주어야 함

– % mount –t [파일타입] [마운트 할 블록 파일시스템] [마운트 지점]

 파일로 생성된 CD 이미지 (파일명: /root/kidec_pro3.iso)를 /root/PRO3디렉토리 로 마운트하고자 할 경우

– % mkdir /root/PRO3 ← 마운트 지점 생성

– % mount –t iso9660 –o loop /root/kidec_pro3.iso /root/PRO3 – % df ← 마운트 되었는지 확인하기

– % umount PRO3

 마운트의 다른 예

– % mount –t udf –o loop /root/share/Achro-210T.iso /root/achro-210t – % mount –t ext2 –o loop /usr/local/pxa255/ramdisk_mmc ramdisk – % mount –t nfs 192.168.10.70:/root/work nfs_share

– % mount –t smb –o username=kidec,password=123 //yscho-t/win_share win_share

기타 명령어 (mount)

(17)

 아카이브 파일 풀기 (tar)

– % tar xvfz blob_pro3_050126.tar.gz – % tar xvfj kernel-2.6.35. tar.bz2

 블록 파일 시스템 만들기 (dd)

– % dd if=/dev/zero of=./ramdisk_big bs=1k count=20480

 특정 패턴 찾아내기 (grep)

– % grep error /var/log/messages – % ls /sbin | grep mkfs.*

– % netstat –a | grep tftp

기타 명령어

(18)

 vi(visual editor)는 emacs와 함께 유닉스 환경에서 가장 많이 쓰이는 문서 편집기

 vi는 한 줄씩 편집하는 줄 단위 편집기가 아니라 한 화면을 편집하는 비주얼 편집기라는 의미

 리눅스에 포함되어 있는 vi는 오리지널 vi의 기능을 확장한 vim이 포함되어 있음

 장점

– 프로그램이 가벼움

– 매우 강력한 기능 제공

– 키보드만으로 편집을 간편하게 할 수 있음

vi editor(visual editor)

(19)

 vi 편집기의 세 가지 모드

– 명령모드(편집모드)

• 입력되는 키가 문서에 입력되는 것이 아니라 커서이동, 수정, 삭제, 복사 등의 기능을 수행

– 입력모드

• 현재 입력되고 있는 키가 그대로 문서에 입력

– 라인모드(ex모드)

• ‘:’(콜론) 또는 ‘/’로 시작되며 문서를 저장하거나 불러오거나 검색 하거나 찾아보기, 바꾸기 등의 기능을 사용할 수 있음

Three modes of vi editor

(20)

 vi 편집기의 세 가지 모드

Three modes of vi editor

(21)

 vi 시작하기

vi editor – starting command

명령어 기능

vi vi 편집기 시작하기

vi aa.txt aa.txt 파일을 vi로 편집 시작. aa.txt 파일이 있으면 기존 파일을 불러오고, 새 파일인 경우는 비어 있는 파일로 새로 생성함

vi +10 aa.txt 10번행으로 aa.txt 파일 열기

vi –R aa.txt aa.txt 파일을 읽기 전용으로 열기

vi –r aa.txt 손상된 aa.txt 파일 복구하기

(22)

 vi 저장 및 종료하기

vi editor - saving & exit command

명령어 기능

ZZ 명령 모드에서 ZZ를 누르면 현재 지정된 파일이름으로 저장되면서 료됨

:wq! 변경된 내용 저장한 후 종료됨 (ZZ와 동일한 역할)

:w 현재까지 수정된 내용을 파일에 저장하기

:w bb.txt 현재 내용을 bb.txt 파일에 저장하기

:1,5w tt.txt 1번부터 5번행까지 내용을 tt.txt 파일에 저장하기

:q! 수정한 내용을 파일에 저장하기 않고 vi 종료하기

:e! 현재까지 수정한 내용을 다 무시하고, 현재 파일을 다시 열기

:e bb.txt bb.txt 파일 열기

(23)

 vi 저장 및 종료하기

vi editor - saving & exit command

명령어 기능

:r cc.txt 현재 행 아래에 cc.txt의 내용 삽입하기

:5 r cc.txt 5번행 다음에 cc.txt의 내용 삽입

(24)

 vi 명령어

– 커서 이동

• 명령 모드에서 커서를 이동하는데 쓰이는 명령어들 ex) h(←), j (↓), k (↑), l (→, Space) 등

– 삽입 명령

• 명령 모드에서 입력모드로 들어가게 되는 명령어들 ex) i, I, a, A, o, O 등

– 삭제 명령

• 명령 모드에서 문자를 삭제하는데 쓰이는 명령어들 ex) x, [n]X, dw, [n]dw, dd, [n]dd 등

– 수정 명령

• 명령 모드에서 문자를 수정하는데 쓰이는 명령어들(대부분 입력 모드로 변경됨)

ex) cw, [n]cw, cf패턴, C, s 등

Commands of vi editor

(25)

 vi 명령어

– 자르기, 복사하기, 붙여넣기

• 버퍼를 사용하여 문자를 복사, 붙이고 자르는데 쓰이는 명령어들 ex) yy, [n]yy, p, P, ddp 등

– 문자열 찾기 및 치환하기

• 문서에서 문자열을 찾거나 치환하는데 쓰이는 명령어들 ex) /[패턴], ?[패턴], n, N, :%s/[old]/[new] g 등

– 블록사용

• 현재 커서 위치부터 특정 영역을 선택하는데 쓰이는 명령어들 ex) v, y, d, >, <, c 등

– 마크사용

• 책갈피와 같은 기능을 제공하는 명령어들 ex) m[x], ‘[x], `` 등

Commands of vi editor

(26)

 리눅스가 부팅되었을 때 최상위 디렉토리인 루트(/) 로 마운트되는 파일시스템을 의미

 커널뿐만 아니라 운영체제 및 응용프로그램까지 모 든 것을 포함

 커널 소스파일 구조와 리눅스 파일시스템은 다름

Linux File System

(27)

/

– 리눅스 파일시스템의 최상위 디렉토리

/root

– 시스템 관리자인 root 사용자의 홈디렉토리

/bin

– 시스템을 사용하기 위한 기본적인 명령어들이 존재

/boot

– 부팅에 필요한 커널과 부팅할 때 필요한 핵심파일들이 존재

– 부팅할 때 부트로더가 /boot 디렉토리에있는 커널의 위치를 참조

/dev

– 디바이스 파일(device file)들이 존재

/etc

– 시스템 환경설정파일들과 응용프로그램 및 서버프로그램 등의 환경 설정에 필요한 설정파일들이 존재

Directories of Linux File System

(28)

/usr

– 프로그램을 설치할 때 패키지에 포함된 대부분의 파일이 설치되는 공간

/lib

– 시스템 운영 및 프로그램 구동할 때 필요한 공유 라이브러리와 부팅할 때 사용되는 커널 모듈들이 포함되어 있음

/lost+found

– 파일시스템의 진단 및 오류수정은 리눅스 명령어 fsck (file system check) 수행 시 발생하는 모든 결과들은 lost+found 디렉토리에 저장되며, 개별 파일시스템의 최상위 디렉토리마다 존재

/mnt

– 외부 장치들을 시스템에 사용하고자 마운트할 때 사용하는 마운트 지점 들을 모아두는 공간

/opt

– add-on 패키지가 설치되는 디렉토리로서 리눅스 배포판에 존재하지 않 는 패키지들은 이 디렉토리에 설치됨

/proc

– 프로세스와 관련된 시스템 정보를 제공하기 위한 곳으로 커널, 파일시스 템, 메모리, 프로세스 등의 정보가 저장되는 곳

Directories of Linux File System

(29)

/tmp

– 프로세스 생성 과정에서 발생되는 임시 파일 저장 공간

/sbin

– 시스템 운영에 필요한 관리자용 명령어들이 들어있음

/var

– 시스템 운영 시 발생되는 다양한 로그(log)들이 저장됨

/home

– 일반 사용자의 홈 디렉토리들이 만들어지는 공간

Directories of Linux File System

(30)

 리눅스 커널

– 리눅스 커널(Kernel)은 운영체제에서 가장 기초적이고 핵 심적인 기능을 담당하는 부분

– 프로그램들과 하드웨어 사이에서 조정자 역할을 함

– 커널은 메모리, 파일, 주변장치 등 시스템을 구성하는 중 요한 자원들을 관리함

– 시간관리, 프로세스 관리, CPU 스케줄링, 입출력 제어 등 컴퓨터 운영에 필요한 핵심사항들을 처리

– 운영체제는 이러한 커널과 최소한의 필요한 도구들을 묶 은 시스템 소프트웨어

Linux Kernel

(31)

 접근방식에 따른 커널의 분류

– 모놀리식(Monolithic) 커널

• 하나의 커널에 필요한 모든 기능이 통합되어 있고 같은 메모리 공 간 안에 필요한 기능들이 존재함

– 마이크로(Micro) 커널

• 필요한 기능들을 작은 서버 모듈로 나누어 설계하고, 이들 서버를 관리할 수 있는 최소한의 기능만을 커널 핵심부분으로 구현

Linux Kernel의 분류

(32)

 리눅스 커널의 구조

Linux Kernel 구조

(33)

 커널의 주요 기능

– 프로세스 관리(Process Management)

• 프로세스의 생성 및 소멸, 프로세스 간의 통신, CPU 스케줄링 동기화, 제한된 자원에 대해 다중 프로세스들을 효율적으로 관리

– 메모리 관리(Memory Management)

• 가상 메모리와 하드웨어 메모리를 효율적으로 관리

– 네트워크 관리(Network Management)

• 통신 프로토콜을 구현해 주며, 네트워크 라우팅 및 주소지정, 네트워 크 제어기를 관리

– 파일시스템 관리(File System Management)

• 가상 파일시스템에 의한 여러 파일 시스템 타입을 지원

• 디스크의 물리적 구조를 논리적 구조로 표현

• 파일 및 디렉토리 관리 블록 입출력을 위한 버퍼캐시 관리

– 디바이스 관리(Device Management)

• 입출력 요청에 대한 권한 등을 검증,입출력 요청 작업 스케줄링

• 요청된 작업에 따라 주변장치와 메모리 간에 자료전송을 담당

• 입출력 제어기 관리 및 인터럽트 요청에 따른 처리

Linux Kernel의 기능

(34)

 커널 소스파일 구조

Kernel Source File

(35)

 커널 소스파일 구조 kernel/

– 커널 기능 중 프로세스(또는 태스크) 관리를 위한 프로세 스의 생성과 소멸, 프로그램 실행, 스케줄링, 시그널 처리 기능 등이 구현되어있음

fs/

– 리눅스에서 지원하는 다양한 파일시스템들이 구현되어 있 음

– 파일시스템에 액세스하기 위한 표준 API인 open(), read(), write(), ioctl() 등의 시스템 콜들이 구현되어 있음

init/

– 커널 초기화 부분에 대한 코드와 커널의 메인함수가 구현 되어 있음

Directories of Kernel Source File

(36)

 커널 소스파일 구조 drivers/

– 리눅스에서 지원하는 모든 디바이스 드라이버(device driver)는 driver‘s 디렉토리에 존재

include/

– 리눅스 커널에서 사용하는 헤더(header)파일들이 정의되 어 있음

arch/

– CPU에 의존적인 코드들이 구현되어 있음

– CPU마다 부팅과정, 메모리 관리방법, 프로세스 처리 부분 들이 모두 다르므로 아키텍처별로 코드들이 필요함

Directories of Kernel Source File

참조

관련 문서

– 대부분의 임베디드 시스템은 하드웨어 구성이 고정되어 있고 소프트웨어도 하드웨어 안에 내장된 상태로 공장에 서 출하되어

information system).. 경영자 : 소유주로부터 경영 위임 받아 대리인으로서 기업활동 수행.. 회계정보의 역할.. 회계정보.. 회계정보의 역할

MicroSD 메모리에 시스템 이미지 올리기 -리눅스

프로세스들은 시간 할당량 동안 CPU를 할당 받아 실행되는데, 이 시 간 동안 실행을 종료하지 못하면 운영체제에 의해 준비 상태로 쫓겨 나고, 준비 큐의 다음 프로세스가

– 가상 머신 하드 드라이브 생성.. Virtual

Digital Output CM1-YT32B 32-Point Source Output Module CM1-YR16A 16-Point Relay Output Module Analog Input CM1-AD08V 14-Bit 8Ch Voltage Analog Input Analog Output CM1-DA04V

 For unknown exact solution, check if converge the result with step size.. Programming

– 가상 PC를 사용하는 경우 타겟보드에 물리적으로 연결되는 네트워크 포트가 가상 PC 설정창에서 정상적으로 연결되어 있는지 확인한다. – 호스트 컴퓨터에서