You are on page 1of 14

<임베디드시스템 개념 / 명령어 정리>

1~7주차(중간)
21511866 이승호
update. 2019. 10. 16

<1주차>
1. 임베디드 특징
: 특정한 목적에 맞게 디자인, 작고 가벼움, 저전력, 다양한 환경에서도 잘 돌아감

2. Real-time system
: 기능적 측면뿐만 아니라 시간적 측면에 따라 정확성이 결정되는 시스템
: 어떤 일을 처리하는데 기한이 있는 것

3. Hard Real-Time <<★★족보 2014년, 2017년>>


: deadline 만족 X -> System Fail

4. Soft Real-Time <<★★족보 2014년, 2015년, 2017년>>


: deadline 만족 X -> 성능 저하 발생, Fail은 발생하지 않음

5. Microprocessor VS Microcontroller
: Microprocessor – CPU core에 독립적으로 존재
: Microcontroller – CPU core에 메모리, 주변장치가 같이 들어있음

6. ROM : non-volatile memory <<★★족보 2012년, 2015년>>


: 전원이 꺼진 경우 메모리의 프로그램, 데이터가 사라지지 않아야 함

7. RAM
: 주로 큰 프로그램과 데이터를 저장하는데 사용
: DRAM – 대용량 저장소로 사용
: SRAM – 제한된 메모리 용량

1 임베디드 개념_명령어(중간)_이승호.hwp
<2주차>
1. RM(Rate Monotonic) <<★★족보 2014년>>
: 주기가 짧을수록 우선순위를 높게 하는 것
: 주기가 제일 짧은 Task를 먼저 실행
: Task(i)의 response time이 Task(i)의 period time보다 작거나 같고, 모든 Task에 대해서 response time이
period time보다 작거나 같으면 RM으로 스케줄링 가능
:  ≤      조건 만족하면 RM 가능(schedulable)



:     (unschedulable)
:       ≤  이면 알 수 없음(inconclusive)

2. Virtualization Types <<★★족보 2012년, 2013년, 2014년, 2015년, 2016년, 2017년>>


: Full virtualization – 완전히 가상화하여, 기존의 OS의 수정없이 바로 가상머신 사용가능
: Hardware-assisted virtualization – 하드웨어가 virtualization 기능을 제공하여 성능은 좋지만 유연성은 떨어짐
: Partial virtualization – OS중에 특정 부분만 가상화 (ex. File System...)
: Para-virtualization – 특정 Hardware virtualization을 위해서 일부 OS의 커널을 일부 수정하여 가상화 한 것

3. Host operating system <<★★족보 2012년, 2016년>>


: 실제 컴퓨터에서 설치된 OS

4. Guest operating system <<★★족보 2012년, 2014년, 2016년>>


: Host OS에 설치되어 그 위에서 실행되는 OS

2 임베디드 개념_명령어(중간)_이승호.hwp
<3주차>
1. EDF(Earliest Deadline First) <<★★족보 2014년>>
: Optimal dynamic priority scheduling
: deadline까지 남아있는 시간이 짧은 것을 우선순위를 높게 설정
: 이보다 더 좋은 scheduling algorithm은 없음
:   ≤  이면, EDF 가능(schedulable)
: 하나의 deadline miss가 다른 연속적인 deadline miss를 발생시킬 수 있음

2. RM vs EDF
: RM – Period가 고정되있고 그에 따른 우선순위가 결정되기 때문에 구현이 간단함
: EDF – 전체 프로세스를 활용, 예기치못한 상황이 발생 가능

3. Priority Inversion(우선순위 역전현상) <<★★족보 2015년, 2016년, 2017년>>


: Critical Section을 공유하는 Task가 2개 있다. 이 중 낮은 Priority의 Task가 실행이 먼저되어 Lock을 잡으면 높
은 Priority는 Block된다. 이 때 두 Task의 중간 순위의 priority를 가진 Task가 실행되고, 높은 priority의 Task의
deadline까지 낮은 priority task가 Lock을 놓지 않으면 결국 높은 priority의 task는 실행되지 못한다.

4. Priority Inheritance(상속) <<★★족보 2016년>>


: 높은 순위의 task가 낮은 순위의 task에 의해 block될 경우, 일시적으로 높은 순위의 task의 priority를 주는 방법
: 문제점 – deadlock을 발생 시킬 수 있음

5. Priority Ceiling
: deadline 문제를 해결
: 어떤 task가 임계구역(mutex를 잡으면)을 들어가면 그 mutex에 관련된 모든 task의 우선순위보다 높은 task의 우
선순위로 만들어줌
: 문제점 – 무조건 우선순위를 높여주기 때문에 원래의 철학과는 맞지 않음

3 임베디드 개념_명령어(중간)_이승호.hwp
<4주차>
1. Linux Command
: adduser / useradd – 새로운 사용자 추가(ex. adduser [option] [id]) <<★★족보 2014년>>
: passwd – 패스워드 생성 변경(ex. passwd [option] 사용자 ID)
: Mkdir – 특정한 디렉토리를 만듬(ex. mkdir /root/test)
: cd – 디렉토리 이동 (ex. cd /root : 최상위에서 가고자하는 디렉토리, cd test : 현재 가고자하는 디렉토리)
: rmdir – 디렉토리 삭제, 디렉토리 안이 empty상태여야함. (ex. rmdir [option] [directory name])
: alias – 어떤 명령어를 다른 이름으로 사용 (ex. alias cpf=’cp –rf’ -> 자주 사용하는 긴 명령어를 사용할 때)
: cat – 입력을 읽어서 standard output으로 출력 (ex. cat > test.txt -> 키보드로 입력 받아서 text.txt로 저장,
cat < test.txt 파일을 읽어서 standard output으로 출력, cat test1.txt test2.txt > test12.txt -> 합병)
: df – disk space 용량 계산 (ex. df[option])
: dmesg – 커널에서 나오는 메시지를 보여주는 명령어 (ex. dmesg | grep usb -> 특정한 문자열을 찾아줌)
: du – 디렉토리 혹은 파일의 수를 출력해주는 명령어
: grep – 특정 파일, 디렉토리에서 특정한 문자열을 찾아주는 명령어 <<★★족보 2012년, 2014년, 2016년>>
( -r : sub directory 까지 찾음, ex. grep ‘AAA’ * -> 현재 디렉토리 안에 있는 모든파일에서 AAA를 찾음, grep
–r ‘AAA’ * -> 현재 디렉토리 포함 sub-directory까지 포함한 모든 파일에서 AAA를 찾음)
: history – 현재 사용했던 명령어들의 기록 (ex. history | grep cp -> 히스토리 결과 중 cp만 찾음)
: ps – 현재 실행하고 있는 프로세스를 보여주는 것 (ex. ps –ax -> service or background 까지 보여줌,
ps –ax | grep xinet -> 특정 프로세스만 찾을 수 있음)
: Kill – 어떤 특정 프로세스를 강제로 종료 (ex. Kill –9 pid)
: pwd – 현재 디렉토리에 full path name을 보여줌(최상위부터 현재까지) (ex. pwd [-LP])
: rm – 파일 삭제
(-f : yes/no 없이 삭제, -i : 삭제할 때 사용자 동의 얻음, -r : 현재 이름의 디렉토리를 삭제, -v : 어떤일을 했을
때 설명을 같이 해줌)
(ex. rm test, -> 디렉토리라면 -> rm –r text -> yes/no 없이 하려면 -> rm –rf test)
(많이 사용 하는 ex. rm –rf * -> 모두 삭제) <<★★족보 2012년, 2013년, 2017년>>
: su – super user의 사용자를 바꿈 (ex. su kittens -> 키튼으로 로그인, su root -> super user로 됨
<<★★족보 2017년>>
: exit – 다 사용하고 종료
: tar – 여러개의 파일을 하나로 묶어주는 명령어 (ex. tar [option] [archive-file] [files or directories])
(ex. -x : 풀 때, -c : 만들 때, -v : 처리된 파일을 상세하게 나열, -f : 보관 파일 또는 장치 사용,
-z : gzip 되어 있는 것을 한꺼번에 풀 때)
(ex. tar zxvf a.tar.gz -> 압축 해제, z대신 c면 만들 때) <<★★족보 2012년, 2013년, 2015년, 2017년>>
: w – 시스템 usage를 보여줌(시스템 얼마나 사용하는지) (ex. w -> 토탈 뷰, w kittens -> 키튼 사용자)
: ln – 링크 명령어 (ex. ln –s /usr/bin/dir ls_dir -> /usr/bin/dir 디렉토리를 ls_dir로 만듬)
: ping – 네트워크 관련
: ifconfig – 리눅스에서 네트워크를 설정해주는 명령어, IP Addr을 설정, 관리 해주는 명령어
<<★★족보 2014년, 2015년, 2017년>>
(ex. ifconfig eth0 192.xxx.xxx.xxx -> IP Addr 설정, ifconfig eth0 down -> interface를 멈출 때)

2. Development environment of an embedded System(개발환경에서 3가지 구성요소)


<<★★족보 2013년, 2014년, 2015년, 2016년, 2017년>>
: Host System
: Target System
: Back-end (USB, ethernet, JTAG)

4 임베디드 개념_명령어(중간)_이승호.hwp
3. Cross Compiler <<★★족보 2012년, 2014년, 2016년>>
: Host System에서 컴파일 하면, 그 코드가 Target System에서 실행이 될수 있도록 해주는 컴파일러

4. Cross debugger
: Target System에 대한 제어를 debugger를 통해 해줌
Host system에서 컴파일러가 타켓 시스템용 binary를 만드는 것.

5. daemon
: 시스템에서 background로 실행되는 프로그램으로 특정한 request가 왔을 때 처리

6. Stand-alone Daemon <<★★족보 2013년, 2015년, 2016년, 2017년>>


: rc-script를 통해 독립적으로 실행
: 항상 실행되므로 리소스 낭비
: 특정한 port listen
: response time이 짧음

7. Super-daemon <<★★족보 2012년, 2013년, 2015년, 2016년, 2017년>>


: 많은 port listen
: request 왔을때만 실행되므로 리소스 사용이 효율적
: response time이 길다

8. TFTP download 명령어


: apt –get install tftp-hpa openbsd-inetd

9. NFS <<★★족보 2012년>>


: 네트워크 파일 시스템
: 다른 컴퓨터 상에 있는 파일 시스템을 로컬 파일처럼 접근할 수 있도록 함
: 리눅스에서는 NFS를 사용해서 여러 시스템이 공통된 디렉토리를 사용할 수 있게끔 하는 기능을 제공
: 편리 – 다른 텀퓨터에 있는 특정 디렉토리를 마치 내 컴퓨터에 있는 디렉토리인 것처럼 사용 가능
: Installation
(1) apt –get install nfs-kernel-server (다운로드)
(2) vim /etc/exports (열고)
(3) mkdir /nfsroot (디렉토리 만들고)
(4) service nfs-kernel-server start|stop (nfs 서버를 restart) <<★★족보 2012년>>
<클라이언트 쪽>
(1) mkdir /mnt/nfs (서비스 디렉토리 만들고)
(2) mount –t nfs localhost/nfsroot /mnt/nfs (server를 client와 연결) <<★★족보 2012년, 2015년, 2016년>>
(3) cd /nfsroot (서버에서)
(4) touch test (서버에서)
(5) ls /mnt/nfs (test가 보이면 잘 연결된 것)
(6) umount /mnt/nfs (연결 해제)

5 임베디드 개념_명령어(중간)_이승호.hwp
10. Booting Sequences by TFTP/NFS
1) TFTP request
2) TFTP reply
3) Download compressed kernel
4) Branch to Kernel
5) Branch & un-compress kernel RAM
6) Mount NFS

1. 부팅하게 되면 타겟에 있는 부트로더에서 TFTP request를 함


2. TFTP reply를 통해서 host에 있는 linux kernel image를 다운
3. 부트로더 점프
4. uncompress 해서 RAM에 올림
5. 리눅스가 실행이 되면 ip설정 하면 서버에 있는 컴퓨터를 NFS mount

HOST system과 target system을 ethernet으로 연결할때는 cross cable 사용해야함.

6 임베디드 개념_명령어(중간)_이승호.hwp
<5주차>
1. VIM mode <<★★족보 2012년>>
: command mode – 명령어를 입력 후 명령어에 따라 실행(ESC) <<★★족보 2017년>>
: insert mode – I, a, o, s 타이핑하는 text가 입력이 되는 것 <<★★족보 2013년>>
: EX mode – 어떤 문자열을 찾거나 바꿈, file을 열거나 저장

2. File Open
: File Open – 특정 파일 open (ex. vim HelloWorld.c)

3. vi Execution without file name


:w test.c -> 지금 작업한 내용이 test.c로 저장
:o ./test.c -> 특정 file open
:q! -> 아무것도 하지않고 나옴 <<★★족보 2013년, 2017년>>
:wq -> 저장하고 나옴, :q! -> 저장하지 않고 나옴, :q 아무것도 하지 않았으면 그냥 나옴) <<★★족보 2014년>>
:w -> 파일을 저장 <<★★족보 2012년>>

4. EX mode
:wq! -> 저장하고 종료
:o file -> open file
:e file -> open file
:e -> 현재 파일을 다시 open
:ZZ -> 수정한 것을 저장하고 vi를 끝냄

5. Commands in command mode


a -> 현재 커서 다음
I -> 현재 커서 앞
o -> 현재 라인 밑으로 새로운 line 생성 후 그곳에 추가
s -> 현재 character 변경
A -> 현재 라인 제일 마지막
I -> 현재 라인의 첫 번째 character 앞에 추가
O -> 현재 라인 위에 추가
cc -> 현재 라인을 바꾸고 replace
h -> 왼쪽
j -> 아래
k -> 위
l -> 오른쪽
w -> 워드 단위로 오른쪽으로 움직이게
b -> 워드 단위로 왼쪽으로 움직이게
{ -> 시작으로
} -> 끝으로
M -> 스크린의 중간
:[n] -> n라인으로
gg -> 첫 번째 라인으로
G -> 마지막 라인으로 <<★★족보 2015년>>

7 임베디드 개념_명령어(중간)_이승호.hwp
<Delete Command>
x -> 현재 커서가 있는 character 삭제
dl -> 현재 커서가 있는 character 삭제
dw -> word 삭제
D -> 현재 커서로부터 라인 끝까지 삭제
dd -> 현재 커서의 그 라인을 삭제 <<★★족보 2012년, 2014년, 2017년>>
<Copy and Paste>
yw -> 현재 커서가 있는 워드가 복사
yy -> 현재 커서가 있는 라인이 복사
[n]yy -> 현재 라인으로부터 n 라인을 복사
p -> 복사
[n]p -> 현재 커서 앞에 n번 복사
dd -> 커서가 있는 그 라인이 없어짐
<Block>
y -> 블락에 있는 텍스트 복사
d -> 블락에 있는 텍스트 삭제
> -> 블락의 현재 라인 앞에 탭 추가
< ->블락의 현재 라인 앞에 탭 삭제
: -> ex mode
U -> 대문자 변경
u -> 소문자 변경
<Undo and Redo>
ctrl + r -> 전에 했던 명령어를 다시 반복(redo)
u -> 전에 했던 명령어를 취소(undo)
<Search>
ex. EX mode에서 /aaa -> vi editer에서 현재 editing하고 있는 그 문서에서 aaa를 찾음
b -> 전 aaa 찾을때
n -> 다음 aaa 찾을 때
<Replacement> - 특정한 문자열을 a에서 b로 바꿈
:%s/windows/linux/g -> 문서 전체에서 사용자 동의 없이 windows를 linux로 바꿈 <<★★족보 2013년, 2014년,
2015년, 2016년>>
:%s/hong/HONG/gc -> 문서 전체에서 사용자 동의를 얻고 hong을 HONG으로 바꿈
:-2.+5s/cat/dog/g -> 현재 커서 앞 2라인, 밑 5라인 까지 그 안에 cat을 dog으로 바꿈

6. Minicom <<★★족보 2013년>>


: 임베디드 시스템과 리눅스 시스템 간의 시리얼 통신을 하도록 하는 프로그램
: apt –get install minicom -> 설치 <<★★족보 2012년, 2014년>>
: minicom –s -> 설정
: ZMODEM(파일보내기) -> host와 target 사이 시리얼 통신 사용 -> 큰 파일을 보낼때는 ZMODEM 권장 X ->
NFS 사용 권장
ZMODEM 과정 : minicom 실행 ctrl A Z type S 누르면 설정완료
7. Toolchain <<★★족보 2013년, 2014년, 2015년>>
: 우리가 작성한 소스코드를 binary 파일로 변경
: 개발환경 구축할 때 설치가 필요

8 임베디드 개념_명령어(중간)_이승호.hwp
<6주차>
1. Bootloader <<★★족보 2012년, 2014년, 2015년, 2016년>>
: 어떤 시스템에서 처음으로 실행되는 프로그램을 load 하는 것
OS 로딩, H/W check
loader : flash memory에 있는 어 코드나 데이터를 memory로 올려줌

- uboot loading
- 전원이 켜지면 CPU가 ROM address로 감
- memory에 올라가서 실행함

2. U-boot Loading
1) bootloader 실행
2) memory에 올려주고
3) 커널 올려주고
4) 커널이 실행 될 수 있게 함

3. U-Boot 전체 흐름
: CPU 초기화, start_armboot() call
: 코드 작성
: Bootloader에서 명령어가 들어오면 그 명령어를 처리
: C에서 Linux 부팅

4. U-Boot Commands
<Information Commands>
: bdinfo -> board information
: coninfo -> console information
: flinfo -> flash memory information
: iminfor -> image information
: help -> help
<Memory Commands>
: base -> base address 출력, 세팅
: crc32 -> 특정한 범위에서 crc 체크
: cmp -> 두 개의 메모리 공간 값 비교
: cp -> 메모리 복사
: md -> 특정한 메모리를 보여줌
: mm -> 메모리값을 어떤 특정한 값으로 바꿔줌
: mtest -> 메모리 테스트
: mw -> 메모리 쓰기
: nm -> 메모리 수정
: loop -> 주소 범위의 무한 루프
<Flash Memory Commands>
: cp -> 메모리 복사
: flinfo -> 플래시 메모리 정보
: erase -> 플래시 메모리 삭제
: protect -> 플래시 보호

9 임베디드 개념_명령어(중간)_이승호.hwp
: mtdparts -> 메모리 기술 장치 정의
<Execution Control Commands>
: autoscr -> 스크립트 실행
: bootm -> 메모리로부터 앱 이미지를 사용해서 부팅
: go -> 특정한 메모리 주소로 이동

<Download Commands>
: bootp -> BOOTP/TFTP 프로토콜을 사용한 네트워크를 통해서 이미지 부팅
: dhcp -> IP Addr 자동으로 받게함
: loadb -> 시리얼 라인을 통해 binary file을 로딩
: loads -> 시리얼 라인을 통해 S-Record 파일 로딩
: rarpboot -> RARP/TFTP 프로토콜을 사용한 네트워크를 통해 이미지를 부팅
: tftpboot -> TFTP 프로토콜을 사용한 네트워크를 통해 이미지를 부팅
<Environment Variables Commands>
: printenv -> 현재 환경 변수 출력
: saveenv -> 현재 환경 변수 값을 저장장치에 저장
: setenv -> 환경 변수 설정 <<★★족보 2012년>>
: run -> 명령 실행
: bootd -> default로 부팅

10 임베디드 개념_명령어(중간)_이승호.hwp
<7주차>
1. NOOBS
: 라즈베리파이의 운영체제를 쉽게 설치해주기 위한 프로그램

2. Kernel
: 컴퓨터에서 항상 실행되고 있는 프로그램 중 하나
: process management, CPU scheduling, input/output control 등을 관리해주는, 기능을 제공해주는 운영체제의
핵심 기능

3. Monolithic kernel <<★★족보 2013년, 2014년, 2015년, 2016년>>


: 전체 운영체제가 하나의 kernel space에서 실행
: function call에 의해 엑세스
: 간단, 효과적, 빠름
: porting과 extension하는 데 어려움

4. Micro kernel <<★★족보 2013년, 2014년, 2015년, 2016년>>


: 커널이 제공하는 기능을 작은 서비스 모듈로 나눈 것
: function extension, 재구성이 쉬움
: 많은 리소스를 사용하고 실행 시간이 느림
: 서버들간 메시지 전송에서 context switching 발생 -> 오버헤드 큼 -> 성능 저하
ex) 파일 시스템 수정에서 Monolithic은 rebuild, Micro는 해당 서버만 수정하면 됨

5. linux kernel 역할
: process management - 스케쥴링
: memory management - 매핑
: file system management – 다양한 파일 시스템 지원
: device management – micro kernel이 관리
: network management

6. kernel source directories 구조


: Arch – 프로세스에 관련된 파일 존재
: init – 커널 초기화에 관한 디렉토리
: kernel – kernel management
: mm – memory management
: fs – file system management
: ipc – inter process communication
: lib – kernel library 존재
: Driver – 리눅스에서 존재하는 다양한 드라이버
: Net – 네트워크 드라이버
: include – 커널의 헤더파일
: modules – 커널 실행 중 동적으로 추가/삭제
: doc - 문서

11 임베디드 개념_명령어(중간)_이승호.hwp
7. Kernel Source
1) 커널 소스를 host system의 NFS 디렉토리로 복사 (service nfs-kernel-server restart)
2) Target system의 NFS 디렉토리로부터 커널 소스 복사
3) 커널 버전 확인
4) 컴파일 환경 설정
5) 커널을 빌드하기 위한 configuration
6) 컴파일, 커널 이미지 쓰기

8. Reboot
1) Execute minicom
2) check linux kernel version

12 임베디드 개념_명령어(중간)_이승호.hwp
<족보 관련>
1. chmod XXX [file] <<★★족보 2012년, 2013년, 2014년>>
: Read(4) Write(2) Execute(1)
: XXX(사용자, 그룹, 다른 사용자

2. thumb mode in ARM <<★★족보 2012년>>


: 16bit instruction set을 제공
: ARM mode – 32 bit instruction set 제공

3. sequences to build a kernel image <<★★족보 2012년, 2013년>>


1) CD로부터 커널 소스 복사
2) 커널 소스 디렉토리 생성
3) 커널 소스 확인
4) 컴파일을 위한 환경 설정
5) 기본 커널 구성 사용
6) 컴파일
7) 커널 옵션 수정

4. NAND Flash Memory <<★★족보 2012년>>


: 전원이 꺼져도 저장된 데이터를 보존할 수 있고 쉽게 데이터를 쓰고 지울 수 있는 플래시 메모리의 일종

5. Scroll one page down in VI <<★★족보 2013년>>


Ctrl + f
: 아래 한 페이지 – f, 위 한 페이지 – b, 아래 반 페이지 – d, 위 반페이지 – u

6. command to compile the file “test.c” and create the execution file “test.exe”
<<★★족보 2013년, 2015년, 2017년>>
gcc –o test.exe test.c

7. create a symbolick link? test1.txt and test2.txt <<★★족보 2013년>>


ln –s test1.txt test2.txt

8. move the cursor to the end of the current line <<★★족보 2016년>>
$

9. “dnw 0x40000000” mean <<★★족보 2016년>>


: host system에서 data를 다운 받아서 0x40000000 메모리에 쓰도록 하는 명령어

10. “fdisk“ command <<★★족보 2016년>>


: partition 프로그램으로 파티션을 나눌 때 사용
: 파티션 테이블을 관리하는 명령어
: 리눅스의 디스크 파티션을 생성, 수정, 삭제

11. “apt –get” command <<★★족보 2016년, 2017년>>


: 패키지 관리 명령어로 옵션에 따라 삭제, 설치, 업데이트 등을 할 수 있음

13 임베디드 개념_명령어(중간)_이승호.hwp
12. embedded system VS real-time system <<★★족보 2016년>>
: embedded system – 큰 시스템에 어떤 컴퓨팅 시스템에 한 component로 들어가는 시스템
: real-time system – 어떤 operation이 동작할 때 시간적 제한 요소를 가지고 있는 시스템

13. “sudo” command <<★★족보 2017년>>


: 다른 사용자의 보안 권한, 보통 슈퍼유저로써 프로그램을 구동할 수 있도록 하는 프로그램 명령어

14. bridged networking <<★★족보 2017년>>


: 호스트의 NIC와 VM이 서로다른 각자의 IP 주소를 사용

15. NAT networking <<★★족보 2017년>>


: 호스트 NIC을 사용하고 호스트와 IP주소를 공유함

16. Host-only networking <<★★족보 2017년>>


: VM ware는 DHCP 서버 역할을 하며 VM에 IP주소를 제공
: VM ware는 외부와는 통신이 안되고 다른 virtual머신이나 호스트 컴퓨터에서만 사용

17. more text.txt : text파일의 내용을 페이지 단위로 끊어서 볼수 있음 <<2019년>>

14 임베디드 개념_명령어(중간)_이승호.hwp

You might also like