728x90

커널 이미지 구현

- 개발 도구 설치 : 툴체인 설치, 빌드 자동화 도구 이용

- 커널 포팅 준비 : 커널 소스 설치, 커널 패치

- 리눅스 커널 수정 및 구현 : 빌드 환경파일, cpu 아키텍처 소스, 커널 초기화 코드, 디바이스 드라이버, 커널 컴파일 코드 수정 혹은 구현

 

 

 

개발 환경

- 임베디드 시스템은 개발 환경과 타겟 시스템이 다름

- 호스트 시스템 : 개발 환경과 운용환경이 다를 경우 개발을 위한 환경. 여기서 루트파일 시스템, 어플리케이션 개발 -> 호스트 컴퓨터

- 크로스 컴파일 환경 : 임베디드 시스템을 위한 소프트웨어 개발하기 위해 호스트 시스템 구축하는 개발 환경

- 빌드 루트 : 툴체인과 RFS(root file system)를 보다 쉽게 구축할수 있도록 만든 것

 

 

 

커널 개발 방식

1. 커널을 타겟 보드에서 다운로드하여 직접 수정 사용

2. pc에서 크로스 컴파일러로 커널 이미지 생성 후 타겟에 이식

 

 

크로스 컴파일러 선택

- 타겟 프로세서에 맞는 것을 찾아 사용해야힘

- arm 프로세서를 대상으로 크로스 컴파일러 설치

 

 

 

라즈베리파이 3의 툴체인

- git clone https://github.com/raspberrypi/tools ~/tools

 

 

 

툴체인을 다운받으면 바로 사용할수있는가

- 경로 설정을 하면 어느 디렉토리에서나 사용 가능

1. $path 라는 환경변수에 크로스컴파일러의 경로 추가.

2. bashrc에 적용

 

 

 

커널 소스 컴파일 과정

- ncursesdv, build-essential 패키지 설치 apt 명령어

- 커널 소스 다운

 - kernel.org에서 표준 커널 소스 다운 후 타겟에 맞게 수정,

 * 패치 파일- 하드웨어 제조사에 해당 보드에 맞게 수정 없으면, 개발자가 직접 수정해야함

 

 

라즈베리파이의 리눅스 커널 소스

- git clone --depth=1 https://github.com/raspberrypi/linux.git 

 

 

라즈베리파이3을 위한 기본 설정

- cd linux

- KERNEL=kernel7(64비트 리눅스 커널 생성)

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

- bcm2709_defconfig

- make ARCH=arm menuconfig 추가 수정 시

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

- arch/arm/boot에 zImage 커널 파일 생성완료

 

 

 

zImage 분석

- readelf -S zImage

- 14개 색션의 헤더들이 있음

 - 시작 주소 0x3d922c

- bss : 커널에서 전역변수를 사용할때 사용하는 메모리

- stack : 지역변수나 함수들을 호출할때 사용하는 메모리

 

 

 

 

 

 

라즈베리파이 커널 부팅 로고 바꾸기

 

1. 라즈베리파이 커널 다운

- 툴체인 다운

 

- bashrc에 경로 추가

- soruce ~/.bashrc로 적용

 - ncurse-dev, build-essential

 

 

2. 라즈비안 커널 소스 다운

 

 

3. 라즈비안 부팅시 로고 변경

- find 명령어로 logo 파일 검색

- 로고 디렉토리로 사진 옮기기

 

-jpg파일을 ppm 파일로 변경

- ppm 이미지 색상을 변경

- 이미지 색상변경

 

4. 커널 이미지 생성

- KERNEL=kernel7

- 나머지는 디폴트로 커널 설정

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2789_defconfig

zImage 생성

- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

 

zImage 파일을 kernel7.img로 변경

- mv zImage kernel7.img

-> 이후 sd 카드에 옮기기

 

 

부팅 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

커널 소스 분석 환경 준비

커널

- 하드웨어 자원을 효율적으로 사용하게 해주는 소프트웨어

- 리눅스는 커널이 오픈소스로 무료로 사용 변경 수정 가능

- 리눅스 커널은 리눅스 재단에서 버전 관리

 

리눅스 커널 다운로드하는곳

- kernel.org

- tar.xz 압축 파일로 다운로드됨

 

커널 소스

- 압축 파일 안에 대부분 c언어로 작성. 일부는 어셈블리어

 

리눅스 커널 분석에 필요한 환경

- 소스에서 수정이 필요한곳을 찾아 수정해야함

- but 소스코드가 방대하여 함수, 변수, 기능 찾기가 힘듬

- 소스 코드 중 원하는 부분을 찾는 도구를 사용해야함.

- 이클립스의 ctags, cscope, taglist 등 도구 설치 or vim 에디터에 이 도구들 결합하여 사용

 

각 도구별 활용 방법

- 리눅스 터미널에서 vim에 cscope와 plugin 연동해 사용

- vim, cscope, ctags에 taglist.vim, the nerd tree, srcexpl.vim 추가해서 사용

- vim은 기본적인 에디터

- ctags : 프로그램 소스로부터 태그를 생성. 태그는 간단하게 인덱스라 생각하면됨. 함수나 변수, 클래스 맴버, 매크로등 요소들을 인덱스로 생성하여 디비로 만들고. db정보를 이용해 vim 에디터에서 쉽게 변수, 함수 검색

 

ctag 설치 과정

- sudo apt-get install ctags

 

스크립트 존재 확인

- ls -al ./scripts/tags.sh

- make tags ARCH=arm -> 아키텍처를 arm에 국한해서 태그 생성

 

tags 파일 생성 확인

- ls -alh tags

 

 

cscope

- 소스코드 심볼에 대한 인덱스 구성. 이 인덱스를 통해 심볼이 위치한 파일을 찾을 수 있음

- cscope는 ctags가 가진 제약사완 보완해서 같이 사용

 

cscope 설치

- sudo apt-get install cscope

 

arm용 cscope db 생성

- make cscope arch=arm

 

db 파일 생성 확인

- ls -alh cscope.*

 

vim-plug

- 커널 소스분석을 위한 심볼 데이터페이스 생성을 끝낸후 vim에서 쓰면되는데 직관적인 환경 구성을 도움

- vim과 플러그인들을 조합하고 ctag, cscope 연동

- source explorer, nerd tree, tag list 플러그인 등 설치 필요 -> www.vim.org

 

 

설치 방법

- mkdir .vim

- cp download/screxpl.vim .vim

- cp download/nerd_tree.zip .vim

- cp download/taglist_46.zip .vim

- cd .vim

- mkdir plugin

-mv scexpl.vim ./plugin

- unzip nerd_tree.zip

- unzip taglist_46.zip

- ls ./plugin (nerd_tree.vim , scexpl.vim, taglist_46.vim 확인

 

 

 

 

커널 소스 분석하기

커널 소스 다운로드 방법

- 라즈베리파이에 맞는 리눅스 커널 소스

git clone --depth=1 https://github.com/raspberrypi/linux

 

컴파일 방법

- make 명령어 사용

- makefile이라는 파일을 찾아 정의해놓은 소스를 빌드하기 위한 순서대로 수행

- 리눅스 소스 트리 루트에 컴파일러 설정 항목이 있음

- 크로스 컴파일러의 설치 위치가 다를수 있어 변경이 필요할수도 있음

- make 하기전, 아키텍처와 컴파일러 설정. 

export ARCH=arm

export CROSS_COMPILE=aarch64-linux-gnu-

 

 

커널의 부팅과정과 소스코드

- 부트로더에서 커널이 올라올 경우 zImage가 올라와서 압축이 해제됨

- zImage 앞부분 압축 해제 코드/ 뒷부분 :  압축된 커널 내용

 

 

zImage 압축 해제 순서

- 초기화 작업 후 zImage에 내장된 압축 해제 프로그램에서 진행

- piggy.gzip 같은 리눅스 커널을 메모리 상에 압축을 해제해서 올림 

 

압축 해재 후 실행 순서

 

커널의 계층적 구조

 

 

운영체제 커널 분석 - 리눅스 커널 소스 분석

1. 라즈베리파이 커널 소스 다운

- 이후 src 폴더에 옮김

 

2. 운영체제 소스 분석을 위한 도구 다운로드 및 설치

ctag

- 태그 데이터베이스를 만들어 코드에서 찾고자하는 함수가 있을때 함수가 정의된 곳으로 이동시켜줌

 

cscope

- ctags에서 지원하지 않는 함수들을 탐색이 가능

- 일바족으로 ctags, cscope 같이 사용

 

ctag 설치

- sudo apt-get install ctags 

 

 

테크 디비 생성

- 범위 지정 후 메이크

- make tags ARCH=arm

 

cscope 설치

- sudo apt-get install cscopes

 

cscope db 생성

- make scope ARCH=arm

 

vim 플러그인 이용하기

- www.vim.org 서 다운 가능

- source expolorer, nerd tree, taglist 다운

 

 

플러그인 설치

- .vim 디렉토리 생성하여 플러그인 복사

- unzip으로 해제해야함

 

vim과 플러그인 연동 - vim 설정 수정

- vi .vimrc

 

 

라즈베리파이 운영체제 소스 분석

- 커널 소스가 있는 폴더에서 vim 실행

 

- f7, f8, f9 클릭하여 플러그인 켜기

 

- ctrl + h,j,k,l 화면에서 커서 이동

 

커널의 시직 프로그램

init/main.c

 

start_kernel 찾기

- ex mode 진입 : esc + :

- start_kernel 검색

- 왼쪽이 소스 익스플로러, 중간이 소스 에디터, 우측이 함수 목록

 

 

start_kernel로 이동

- start_kernel 엔터

하단 창에 커서가 지정된 함수가 정의 된 곳이 나옴

setup_arch 함수로 이동

- start_kernel 함수 내 setup_arch 함수 위 커서 놓기

- 아래 창으로 이동 후 file path 에서 엔터

이전으로 이동하기

- space

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

부트로더 구현

부트로더

- 특정 cpu에서 운영체제나 프로그램 돌릴수있게 cpu 동작에 필요한 기초적인 부분이나 rom, ram, uart 등 기본적인 디바이스들이 동작할수있도록 만들어지는 프로그램

 

u-boot universal bootloader

- arm 기반 소프트웨어 개발시 가장 많이 사용하는 부트로더

 

 

u-boot 로 부트로더 구현시 필요한것

- 하드웨어 초기화로 cpu 클록, 인터럽트, uart, serial, gpio 등 초기화 코드가 있음

-> lolevel_init, board_init_f, board_init_r 등 세가지 루틴으로 할 수 있음

 

 

라즈베리파이 부트로더 구현 과정

- make 파일로 만들어서 제공

- 필요한 환경 설정 -> defconfig

1. 부트로더 소스 다운

 - 호스트에 깃 설치

 - 부트로더 클론

 - 클론한 폴더 확인

2. 부트로더 이미지 생성

 - 크로스 컴파일러 설치

 - 크로스 컴파일러 버전 확인

 - 크로스 컴파일러 환경변수 지정 - export CROSS_COMPILE=크로스 컴파일러 이름

 - 라즈베리파이 환경 설정 - configs 폴더의 rpi_3_defconfig 파일에 환경 설정 존재. 여기서 필요한 장치, 필요없는 파일 지정

 - 부트로더 컴파일

 - u-boot.bin 파일 생성 확인

 - 이미지로 변환

3. 생성된 이미지를 sd카드에 복사

4. sd카드를 라즈베리 파이에 삽입

 - 전원 공급 후 3초이내 스페이스바 클릭 -> uboot 프롬프트로 진입

 

 

펌웨어 구현 과정 실습

 

u-boot 소스코드 분석하여 라즈베리파이 부트로더 구현  - gpio에 연결된 led 기능 제어 실습

1. uboot 소스코드 다운

git clone git://git.denx.de/u-boot.git

2. cross compiler 설치 및 등록

- aarch64-linux-gnu

sudo apt-get install gcc-aarch64-linux-gnu

export 명령어로 교차 컴파일러 등록

- export CROSS_COMPILE=aarch64-linux-gnu-

 

3. uboot 소스코드 분석

find 명령어로 파이 소스 찾기 : find ./ -name *bcm*

find ./ -name *rpi*

rpi_3_defconfig 파일

- 부트로더명을 u-boot에서 ncs-em으로 변경

 

 

 

rpi.h 확인

 

 

rpi.c 확인

- 메모리맵을 확인해보면 물리적 주소가 0x3f00 0000

 

 

4. uboot 소스에 명령어 추가 - gpio 물리적 주소를 통한 led 제어

gpio를 통해 led 제어하는 hello.c 파일 작성

 

gpio 사용하는 방법

1. bootloader 함수 사용하는 방법

2. gpio의 물리적 주소를 사용하는 방법 -> 사용

* 주변장치 물리적 시작 주소 : 0x3f00 0000(데이터시트)

* gpio offset : 20 0000

=> gpio 물리적 시작 주소 : 0x3f20 0000(주변장치 물리적 시작 주소 + gpio offset)

 

 

물리적 주소로 gpio 제어 프로그램 작성 hello.c

- gpset0 : 전압을 가함

- gpclr0 : 전압을 가하지 않음

- 18번 핀 사용하므로 18번 시프트

 

kconfig 수정

- 메뉴컨피그 사용시 항목이 출력되도록 설정

 

 

makefile 수정

- menuconfig 설정시 같이 빌드되도록 hello.o 추가

 

u-boot 환경 설정

- defconfig파일 사용 -> 타겟명이 rpi3이므로 rpi_3_defconfig

make rpi_3_defconfig

menuconfig 설정

- hello 명령어 추가

 

5. uboot 소스에서 부트로더 이미지 생성

크로스 컴파일러 확인

컴파일

u-boot.bin 생성 완료

 

uboot.bin을 sd카드로 옮겨 raspberry pi 부팅

- 이름을  kernel8.img로 변경

 

부팅 후 3초 이내 키보드 입력하여 uboot 명령어 모드 진입

- config_sys_prompt 를 u-boot에서 ncs_em으로 바꿔 다음과 같이 출력

 

led 명령어 수행

 

 

 

 

 

300x250
728x90

펌웨어 설계 문서 분석

펌웨어 구현 개발 도구

- 소스 코드 및 컴파일을 호스트 PC에서 작성 하여 임베디드 보드에 다운로드 후 실행

- 호스트 시스템 : 프로그램 개발 PC환경

- 타겟 시스템 : 프로그램이 실행되는 임베디드 시스템

-> 호스트 시스템과 타겟 시스템 사이 통신, 디버그 정보를 얻기위해 추가적인 개발환경 필요 : 에디터, 컴파일러, 디버거, 링커 등

 

호스트와 타겟 시스템의 운영체제 제한

- 호스트 시스템 운영체제는 대중적인 OS 지원

- 타겟 시스템 : 펌웨어 상태서 하드웨어 스펙에 의존. 

 

운영체제 외 개발에 필요한 도구

- 컴파일 : 소스프로그램을 실행 파일로 변환하는 과정

 

컴파일 과정

1. 전처리 : 소스코드 전처리

2. 컴파일러 : 전처리 코드를 어셈블리 코드로 변환

3. 어셈블러 : 어셈블리 코드를 재배치 가능한 기계어 코드로 변환

4. 링커 : 외부 라이브러리와 기계어 코드를 합쳐 실행가능 기계어 코드 작성

5. 로더 : 메모리에 올려 실행

6. 메모리

- 툴체인 : 소스 파일을 실행파일로 만드는데 사용되는 도구들이 연결된것

 -> 타겟에 따라 다른 툴체인 설치

 

GNU

- gcc, binutill, gnu c library 등이 있으며 버전 의존성 존재

 

라즈베리파이 툴체인 설치 방법

- git에서 다운

 

 

 

 

하드웨어 데이터 시트 분석

펌웨어 구현시 데이터 시트

- 펌웨어는 하드웨어에 의존하는 프로그램

- 마이크로 프로세서 제조사나 평가 보드 제조사의 데이터 시트 기반으로  프로그램 작성

 

라즈베리파이3 예시

- bcm2837(arm cortex-a53 프로세서)의 gpio 

 

bcm2837arm 주변장치에 대한 데이터 시트 분석

- 회로도, 하드웨어 구성, 가이드 등 모든 내용 포함

 

 

 

 

arm 물리적 주소

- 물리적 주소 범위 : 0x3F00 0000 ~ 0x3FFFF FFFF

- 주변장치 버스 어드레스 범위 : 0x7E00 0000 ~

 

 

 

GPIO 레지스터 뷰

- 주변장치 베이스 가상 주소 0x7E00 0000

- GPIO 시작 가상 주소 0x7E20 0000

- GPIO Base offset 0x20 0000(0x7E20 0000 - 0x7E00 0000)

- GPIO 시작 실제 물리 주소 : 0x3F20 0000(0x3F00 0000 + offset)

 

 

개발환경 구축 실습

1. 부트로드 소스 컴파일을 위해 크로스컴파일러 설치

2. 부트로더에 새로운 명령어 추가

 

 

크로스 컴파일러

- 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행가능한 코드를 크로스 컴파일해주는 컴파일러

- 노트북 <- 크로스 컴파일 -> 라즈베리파이

- 라즈베리파이에서 실행가능하도록 크로스 컴파일

* 크로스 컴파일러 :  aarch64-linux-gnu 사용

 

1. 크로스 컴파일러 설치

2. 유부트 소스에서 라즈베리파이3 부트로더 이미지 생성

- 크로스컴파일러를 지정하는 환경변수 설정

필수 라이브러리 설치

- bison, flex



파이 보드에 맞게 설정 하기

-config 디렉토리 : rpi_3_defconfig폴더에서 지정

- make rpi_3_defconfig

 

부트로더 컴파일

-make

 

 

부트로더 확인

- ls로 컴파일 결과 확인 uboot.bin

 

 

3. 라즈비안 이미지 파일 받고 부트로더 이식하기

- win32diskimager

 

 

라즈비안 이미지 파일 분석

- 커널 이미지 : 부트로더는 커멀 이미지 숫자가 더큰걸 불러옴. kernel7.img

 

 

부트로더 넣기

- uboot.bin -> kernel8.img 로 이름 변경 후

 

 

부트로더 진입

- 부팅 시. 3초 이내 키보드 입력시 uboot 명령어 모드로 진입

- ? 로 명령어 확인

 

 

 

GPIO 명령어로 LED 제어

- 내장 LED는 GPIO29번과 연결

- help gpio로 확인

 

 

 

 

 

 

300x250
728x90

펌웨어 구조 설계하기

부트로더 기능 분류와 공통요소 추출 방법

- 유부트 기본으로 이해하면 쉽게 이해 가능

- 유 부트 디렉토리 구조는 리눅스 디렉토리 구조와유사

 

부트로더 디렉토리 구조

- 타겟에 맞게 수정해야함

- 최상위 유부트 : makefile, board.cfg 등 주요 파일로 모든 유부트 빌드 동작 실행

- arch : 아키텍처별로 서로다른 디렉토리를 구성, 각 프로세서 아키텍처에 따른 소스 구성하는 디렉토리

- board : 각 제조사별 보드 관련 소스를 구현하는 디렉토리

- common : 유부트에서 공통으로 사용하는 소스 구현한 디렉토리, 유부트 명령어, 환경변수등 소스 구현

- driver : gpio, i2c, pci, serial, sound, usb와 같이 외부장치의 드라이버 소스 제공

- fs : fat, yaffs2와 같이 u

 

 

개발 보드에 대한 환결설정 내용은?

라즈베리 파이의 경우

- 기본 환경 설정을 defconfig 파일로 제공 -> 원하는 설정 변경 가능

 

 

 

단위 sw 모듈 설계하기

오픈소스 부터로더에 기능 수정이나 추가 방법

- 원하는 기능에따라 수정 부분, 추가 부분이 상황에 따라 다름

 

 

특정 하드웨어 개발하는 경우

- 수정을 위한 하드웨어 동작 관련 디렉토리 위주로 보면

- 라즈베리파이는 브로드컴사의 bcm.

u-boot root directory

 

 

아키텍처 디렉토리와 소스

- 이에 대해 알아야함

- 아크 디렉토리의 암에 대해 살펴보자

arch directory

 

타겟보드 디렉토리

- 타겟에 따라 다르지만 공통적으로 가지는 걸보자

- 보드 디렉토리 > 제조사 디렉토리 > 보드명 디렉토리

target board directory

부트로더 명령어는 어디에?

- uboot 디렉토리 > cmd 디렉토리 > 부트로더 명령어

- 새 명령어 추가시 cmd 디렉토리에 추가

cmd 디렉토리

 

부트로더에서 하드웨어 제어 방법

1. 디바이스들의 물리적 주소로 직접 접근하여 제어

 - 물리적 주소를 알아야함 -> SoC에 대한 데이터 시트 참고

2. 부트로더에서 제공하는 함수들을 이용하여 제어

 - 어떤 함수가 있는지 알아야함

 

cmd 디렉토리서 hello.c 작성

- do_hello 함수 

- U_BOOT_CMD 정의하여 hello 가 입력시 do_hello 함수 호출하도록 정의

kconfig 파일 수정

- 메뉴 컨피그에서 사용여부 고를수 있도록 설정

 

 

makefile 수정

- 메뉴컨피그에서 사용 설정시 빌드 과정에서 포함하도록 hello.o 추가

 

부트로더에서 헬로 명령어 사용

 

 

1. 유부트 소스 코드를 파이에 맞게 설정

2. 부트로더에 새 명령어 추가

 

 

유부트 소스 코드 파이에 맞게 설정

1. 유부트 소스 받기

git clone git://git.denx.de/u-boot.git

 

2. uboot 소스에서 파이 관련 소스 분석

- 각 디렉토리는 고유한 목적 가짐. 각 디렉토리들을 타겟에 맞게 수정해야함

- makefile : 소프트웨어 빌드시. 컴파일 과정과 소스파일 관계 정의

- 타겟에 맞는 메이크파일을 찾아서 실행

- defconfig (default configuration) 찾기 : find ./ -name defconfig

 

- pi3의 defconfig

3. 유부트 소스에서 파이3 부트로더 관련 환경 설정

 

 

새 명령어 만들기

- cmd 디렉토리에 새 추가 할 명령어 작성

- hello 입력시 hello ncs 출력 함수

 

 

kconfig 파일 수정

-kconfig : 부트로더 컴파일시 설정할 항목들을 서술한 파일

 

makefile 수정

- menuconfig에서 빌드 가능하도록 설정하기

 

menuconfig로 명령어 추가

- make menuconfig 명령어로 kconfig에서 추가한 명령어 설정

- 커멘드 라인 인터페이스 > 헬로 펌웨어 커맨드 설정 후 저장

=> 부트로더에서 핼로 명령어 사용가능해짐

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

운영체제 기초 과정 분석 필요 지식

- 펌웨어와 부트로더 이해 필요

 

펌웨어

- 롬에 저장된 소프트웨어

 

임베디드 시스템 구성

1. 큰 임베디드 시스템

- 어플리케이션 소프트웨어

- 부트로더, 운영체제

- 하드웨어

-> 복잡한 기능, 규모가 큰 임베디드 시스템

2. 작은 임베디드 시스템

- 어플리케이션 소프트웨어

- 하드웨어

-> 단순한 기능, 규모가 작은 임베디드 시스템 구성

 

라즈베리파이3 구성

- 어플리케이션 소프트웨어

- 펌웨어(부트로더), 운영체제(리눅스)

- 하드웨어(라즈베리파이)

-> 일반 피씨와 유사한 다양한 어플리케이션 사용 가능

 

아두이노

- 펌웨어

- 하드웨어(아두이노)

-> atmega328 8비트 마이크로 컨트롤러 사용 -> 규모가 작은 임베디드 시스템

 

펌웨어 개발자란?

- 운영체제 없이 마이크로컨트롤러 제어 소프트웨어 개발자

 

부트로더의 역활과 종류

- 운영체제가 시스템에 로드되어 잘 동작하기 위한 사전 작업 준비

1. 하드웨어 초기화

2. 운영체제 동작 환경 구성

3. 운영체제를 메모리로 로드

 

부트로더 특징

- 시스템 하드웨어 의존성이 강함

- 프로세서 구조, 특징, 사용법 이해 필요

- 어셈블리어로 작성. 프로세서에 따른 명령어 사용법 이해 필요

- 크기가 작야아함

- 오픈소스 소프트웨어가 많아 활용하기 용이함

 

 

오픈소스 부트로더 종류

- 모든 하드웨어를 지원하는 부트로더는 없으나 많이 지원하는 오픈소스 부트로더들이 있음

- grub 그럽 : PC 및 서버에서 사용

- u-boot : arm 기반에서 주로 사용

 

운영체제 부트로더 흐름

1. 전원 인가

2. 하드웨어 초기화

3. 커널 부팅

4. 커널 로딩

 

 

exynos-8890 부팅 과정

- exynos-8890 : 최신 프로세서, 작은용량의 롬과 메모리 가짐. 128kb irom, 320 iram 포함

- rom에는 부트 로더가 있어 ram으로 로드함

1. irom에 있는 부트 코드가 실행. om 핀을 확인 하여 어떤 디바이스로 부팅할지 결정

2. bl1코드를 읽어 internal sram에 복사하여 실행 - 하드웨어 초기화 수행

3. b1의 나머지를 dram으로 복사하여 실행

4. 적재된 커널은 부팅 시작

 

 

 

 

라즈베리 파이 부팅 과정

- 라즈비안 2개의 파티션 가짐 :

 1. 부트 파티션

 - 60mb fat32 포멧 필요

 - gpu 초기화에 필요한 코드와 데이터 포함

 - os 커널을 메모리로 가져와 실행하는 역활

 2. 루트 파티션

 - 나머지 os와 모든 파일

 - ext4 리눅스 파일 시스템으로 구성

 

라즈비안 이미지 파일에 무엇이 있는가?

- dtb device tree block :  하드웨어 컴포넌트 데이터베이스 파일. 

- boot code  : 부트로더 파일 

 - cmdline, config : 환경 설정 텍스트 파일

 - kernel.imz, kearnel7.img : 커널

 

 

 

 

 

펌웨어 요구사항 도출하기

임베디드 시스템부팅시 필요한 주변장치

- uart : 병렬 데이터를 직렬 형태로 보내는 장치

- 이더넷 : 네트워크 간 컴퓨터들이 고유의 맥주소를 가지고 주고받을수 있음

- usb : 직렬,병렬 포트등 기존의 연결방식을 대체하기 위해 만들어짐

- gpio : 마이크로프로세서가 주변 장치와 통신을 위해 범용으로 사용하는 비출력 포트(PORTx, DDRx, PINx)

- HDMI : 영상과 음향을 통합한 단자 구격

 

부트로더가 지원해야하는 명령과 동작

- 하드웨어 초기화

- 메모리 복사

- 명령어 복사

 

부트로더 기능과 동작

- 하드웨어 초기화 : 메모리 설정, cpu 클럭 설정, gpio 설정, 시리얼 설정, 네트워크 설정 

- 메모리 복사 : 커널 이미지 램디스크 이미지, 부트로더 자신을 플래시 롬에서 sdram으로 복사

- 커널 부팅 : 커널 이미지를 메모리로 복사 후 압축을 풀고 실행 -> 부트로더는 끝나고, 커널이 제어권 가짐

- 명령어 지원 : 사용자가 부트로더 기능 사용 가능

- 디버깅 모드 : 부트로더 동작 상태를 보면서 에러 부분을 찾을 수 있음

 

 

시스템 부팅 정차에 따른 하드웨어 초기화 과정

1. dram에서 u-boot 실행

2. 보드 초기화 board_init

3. malloc 초기화

4. 플래시 메모리 장치 초기화

5. nand및 oneram 초기화

6. mmc 초기화

7. 환경변수 초기화

8. ip주소 초기화

9. 표준입출력장치 초기화

10. 기타아키텍처 및 보드 관련 초기화

11. 인터럽트 초기화 및 enable

12. 네트워크 디바이스 초기화

13. 메인 루프 실행 common/main.c

 

 

 

u-boot로 부트로더 구조 분석

- u-boot : 암 계열의 부트로더

 

부트로더 3단계

- bl0, bl1 :  칩 벤더에서 제작 및 릴리스하는 코드 영역, 수정 불가

- bl 2 : 일반적으로 사용하는 부트로더

 

u-boot 소스 코드 다운

- 윈도우나 리눅스에서 가능

- 리눅스에서 깃업으로 소스 받음

- git clone git:://git.denx.de/u-boot.git

u-boot 구조 분석

- arch : 각각의 아키텍처에 의존적인 라이브러리 가짐

- board: 보드 관련 소스 제공. 라즈베리파이도 여기있음

 

- driver : uart, gpio 등 외부 장치 관련 드라이버 제공

 

 

 

라즈베리파이3 소스 분석

- find로 bcm 검색

- find ./ -name *bcm*.*

 

- rpi 관련 검색

- find ./-name *rpi*

 

 

오픈소스 부트로더인 uboot 디렉토리 구조와 라즈베리파이 관련 소스 분석 

- 타겟 하드웨어에 맞는 부트로더 개발을 위해 하드웨어 이해와 부트로더 소스 이해 중요

- 구글링으로 정보 검색과 분석 필요

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

- 하드웨어 기능 분석

- 요구사항 도출

- 하드웨어 분석 결과 문서화

 

 

 

 

하드웨어 기능 분석

하드웨어 이해가 얼마나 필요할까

- 많이 알수록 좋음

- 하드웨어 개발자가 아니라 소프트웨어 개발자라면 프로그래밍을 위한 하드웨어 구성요소, 회로도, 데이터 시트 이해할수있는 정도

 

하드웨어 구성요소

- 목적에 따라 프로세스, 메모리, 입출력장치, 주변장치들이 결정

- 하나의 보드에서 연결되서 구성

 

라즈베리파이3의 기능 위주로 구성 요소 살펴본다면

- 크기 : 85 mm x 56 mm

- 1GB LPDDR2

- 40개 GPIO Pin 헤더

- 멀티미디어(카메라, 비디오, 사운드) 기능 지원

- sd카드 슬롯

- 전원 공급을 위한 5V 2.5 암페어 dc 마이크로 usb 커넥터로 전원 공급

라즈베리파이3 구성도

 

라즈베리파이의 프로세서

- 하드웨어에서 프로세서/마이크로 컨트롤러 이해가 매우 중요

- 브로드컴사의 BCM2837 SoC 탑재

 

SoC System on Chip

- 전자 시스템 주요 구성요소가 하나의 칩에 결합된 집적회로 IC

 

 

라즈베리파이의 ARM SoC 

- 중앙처리 장치 CPU

- 그래픽 처리장치 GPU

- 메모리

- 타이머

- GPIO

- USB

- I2C

- SPI

- UART

- 주변장치 입출력 회로가 모두 내장됨

 

 

Cortex

- ARM의 최신 프로세서들은 cortex 이름으로 명명됨

- Cortex-A Application : 스마트폰 등 운영체제가 필요한 큰 규모 장치에 사용

- Cortex-M Microcontroller: 소형, 저가, 저전력에 필요한 어플리케이션에 사용

- Cortex-R  Realtime: 자동차, 산업용 제어장치등 실시간 임베디드 서비스에 사용

-> 라즈베리파이는 Cortex A

 

 

메모리

- 라즈베리파이3 : 메모리 1GB LPDDR2 SDRAM

- 회로도에 안보이던데 -> 라즈베리파이3의 메모리 위치. Soc위에 적층형태로 부착(BGA Package)

 

 

전원

- 휴대폰과 같은 마이크로 usb

- 주변장치가 많을수록 전원이 많이 필요

 

주변 장치 전력 소모량

- gpio : 50mA

- 개별 gpio : 16mA

- hdmi 포트 : 50mA

- 카메라 모듈 : 250mA

- 키보드/마우스 : 100mA or 1000mA 이상

 

라즈베리파이3과 일반 PC와의 차이

- 외부 장치들을 연결하여 제어가능한 GPIO핀이 외부 노출

 

임베디드 시스템 규모에 따라 부팅

- 작은 규모 : 마이크로 컨트롤러 이용 -> 이 내부에 플래시 메모리 내장

- 큰 규모 : 외부 플래시 메모리 이용

- 라즈베리파이 : 마이크로 sd 슬롯 이용

 

 

회로도 이해

- 전자공학, 마이크로프로세서 컴퓨터 구조 이해 필요

 

 

시험 요구사항 도출하기

1. 기능요소 정의

2. 시험절차 수립

3. 기능 요소별 동작 기준 수립

 

 

 

하드웨어 기능 단위 및 장치 분류

- CPU와 GPU

-통신 및 네트워크 장치

- 영상 장치

- 음향 장치

- 제어 장치

- 저장 장치

- 사용자 입력 장치나 테스트 장치

- 전원 장치

 

시험 절차 수립

- 장치 구동 순서 분석

- 하드웨어 시험 환경 구성

- 루프백 시험

-> 기능 요소 동잡 기준 수립 필요

 

기능 요소

- 전원인가, 전원 단락, 전원 대기, 프로그램 실행이나 정보 송수신, 영상/음향 입출력

 

 

단계별 시험절차 수립 수행 순서

1. 시험 단계 정의

2. 시험 절차 정의

3. 단계별 테스트 케이스 작성 : 테스트 항목, 사전 조건, 시험 절차

4. 예상 결과 단계 : 전기적 기능, 프로그램 실행, 제어 기능, 정보 교환기능, 미디어 기능

 

 

 

 

하드웨어 분석 결과 문서화

- 기술문서 작성 원칙과 하드웨어 분석 기술 문서 내용 이해 필요

- 기술문서 정의, 특징, 기본원칙 이해 

 

기술문서 작성 원칙

- 대상 고려하여 작성

- 작성된 문서 동료와 함께 검토

- 쉽고 간결하며 깔끔하게 작성

- 사실에 입각, 체계적, 논리적 작성

- 단어나 문장, 그림, 수식 등에서 일관성 유지

- 내용 중복 주의

 

하드웨어 분석기술 작성에 필요한 지식

- 하드웨어 기본 동작 방법

- CPU 명세

- 제어회로 명세

- 저장장치 명세

- 통신인터페이스 명세

- GPIO 명세

 

 

 

하드웨어 분석결과 문서화를 위해 할일

- 하드웨어 구성요소 명세 기술

- 하드웨어 분석 보고서 작성

 

하드웨어 구성요소 명세서 작성 과정

- 하드웨어 레이아웃, 사진 바탕으로 각 부분 명칭 기재

- 하드웨어 기본 성능 및 기능 사항 요약 기술

- 하드웨어 동작을 위한 기본 조건과 환경 기술

- 하드웨어 기본 동작방법 기술

- 마이크로 컨트롤러 기능과 성능 사항 요약 기술

- 시동 프로그램에서 응용프로그램 읽는 경로 기술

- GPIO 핀 배치 및 기능 사항 요약 정리

- 프로그램 실행에 필요한 메모리 맵 등 작성

 

 

 

하드웨어 분석 보고서 

- 하드웨어 분석 결과를 바탕으로 작성

 

하드웨어 분석 결과서 양식 도출

- 분석 결과서 양식에 포함될 항목 식별

- 하드웨어 분석 보고서의 기술 순서 정의

 

하드웨어 분석 결과 보고서 작성 과정

- 모든 내용 포괄하여 분석 결과 보고서 작성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

임베디드 시스템

임베디드 시스템

- 단일 제품이 아닌 시스템에 내장된 부분 시스템

- 전자회로로 구성하면 업그레이드 하기 힘듬 -> 소프트웨어로 구현

-> 마이크로 프로세서에 특정 기능 수행하는 소프트웨어를 저장 => 임베디드 소프트웨어

- 임베디드 시스템 : 컴퓨터 하드웨어와 소프트웨어가 조합하여 특정 목적을 수행하는 시스템

 

 

임베디드 시스템 적용 사례

- 버스, 전철 출입문 단말기 -> 임베디드 시스템 내장

- 모든 사물에 임베디드 시스템이 내장되어 통신하는 Iot 시대

 

임베디드 시스템 특징 case of 스마트폰, 휴대폰

- 폰이 너무 크다면, 비싸면, 베터리가 빨리 준다면 불편

-> 임베디드 시스템 특징 : 더 작고, 가볍고, 오래가는 베터리, 안정적 동작과 개발 노력

 

임베디드 시스템

1. 경량화, 최적화

2. 실시간성

3. 저전력화

4. 멀티미디어 지원

5. 신뢰성

6. 네트워크 지원

 

 

임베디드 시스템 구성

- Hardware + software

- hw : 마이크로 프로세서, 마이크로 컨트롤러, 메모리, 센서, 구동기

- sw : 운영체제, 디바이스 드라이버, 어플리케이션 프로그램, 네트워크 응용

 

 

임베디드 시스템 개발 구조

- 임베디드 소프트웨어(3,4), 임베디드 하드웨어 개발(1,2)로 나누어 진행

1. 하드웨어 개발

2. 펌웨어 개발

3. OS 포팅(이식)/ 디바이스 드라이버 개발

4. 임베디드 어플리케이션 개발

 

 

 

 

임베디드 시스템 개발 과정

1. 설계

2. 시스템 용도 분석

              HW                                                          SW

3. 하드웨어 사양 결정                               소프트웨어 사양 결정

4. 프로세서, 메모리 및 주변장치 선정       OS 사용 여부 및 OS 선정

5. 회로도 설계                                         개발 환경 선정

6. PCB 설계                                            시스템 소프트웨어 설계

7. 하드웨어 조립                                      디바이스 드라이버 설계

8. 하드웨어 시험                                      어플리케이션 설계

9. 시스템 통합

10. 종료

=> 하드웨어 개발, 소프트웨어 개발 팀 긴밀한 협력 필요

 

 

 

 

하드웨어 자료 수집하기

오픈소스 자료 수집 수행 순서

1. 오픈소스 하드웨어 플랫폼 선정

2. 하드웨어 구성도 입수

3. 회로도 입수

4. 부품 리스트 및 데이터 시트 입수

5. 하드웨어 관련 표준 문서 수집

6. 하드웨어 샘플 입수

7. 입수 자료에 대한 형상 관리

 

플랫폼이란?

- 버스 승강장, 기차역에 타고 내리는것을 의미

- IT분야에서 플랫폼, 기능 제공측과 기능 사용측이 만나는 장소

 

 

임베디드 플랫폼

- 원하는 기능을 쉽게 구현해 전자 제어 장치를 개발할수 있도록 제공되는 하드웨어 보드와 소프트웨어 개발 환경

- 특정 기능을 제공하는 완제품이 아니라 누구나 원하는 기능을 쉽게 구현하도록하는 기반

 

대표적인 오픈소스 플랫폼

- 일반 시중 : 아두이노, 라즈베리파이

- 산업 현장에서 주로 사용 : ST 

 

마이크로 프로세서와 마이크로 컨트롤러란

1. 마이크로 프로세서 MPU Micro Processor Unit

- CPU ( 연산, 제어장치, 레지스터)를 단일 칩으로 만든 반도체

- 마이크로 프로세서만으로 사용불가 -> 주변 장치 필요

- PC 등 범용 컴퓨터에서 주로 사용

 

2. 마이크로 컨트롤러 MCU Micro Controller Unit

- CPU(마이크로 프로세서) + 메모리(ROM, RAM) + 주변장치 인터페이스 ( 통신, ADC/DAC, Timer 등)

- 싱글 칩 마이크로 컴퓨터

- 임베디드 시스템

- 특정 목적의 기기 제어용으로 주로 사용

=> 최근 임베디드 시스템은 마이크로 컨트롤러를 사용하는것이 보편 적임

* ARM 계열 마이크로 프로세서와 마이크로 컨트롤러를 많이 사용

 

 

ARM 계열이란

- ARM Advanced RISC Machine

- RISC 구조를 가지는 32비트, 64비트 프로세서 군을 부르는 용어

 

ARM 프로세서 특징

- 동작 속도가 빠름

- 내장된 주변장치가 많아 고성능

- 전력 소비가 작다

 

ARM

- 마이크로 프로세서를 만드는 회사 ? no

- 프로세서 코어를 설계해서 다른 제조사에 설계 내용을 지적재산권 IP 형태로 판매

-> 차에 비유하자면 엔진을 설계하는 회사가 있고, 그 설계도로 엔진을 만드는 회사가 따로 있음. ARM은 엔진을 설계하는 회사

 

ARM 계열 프로세서 발전 과정

- 아키텍처 발전과, 성능의 발전과전으로 볼수있음

- 아키텍처는 V4/V4T -> V5

- 최신 암계열은 Cortex라는 이름으로 출시

- 부 이름으로 A(Application), R(Realtime), M(Micro Controller) 의미

- 뒤의 숫자는 성능

ARM 계열 프로세서 발전 과정

 

시중의 마이크로 컨트롤러

- 여러 회사들이 ARM 계열 마이크로 프로세서를 주변 장치(Uart, 입출력 포트, 인터럽트, AD변환기, 타이머) 등을 하나의 칩(마이크로 컨트롤러)로 만들어 판매

- Cortex-M3 마이크로 프로세서 주변에 주변장치를 붙여 Cortex-M3마이크로 컨트롤러가 많이 사용하여 임베디드 소프트웨어 개발

 

ARM 계열 이외 계열

- Atmel 사의 AVR 시리즈 -> 대표적으로 Atmega 128

 

오픈소스 플랫폼 특징

- 아두이노 : 오픈소스 중 가장 대중적인 보드. ATmega328 마이크로 컨트롤러 사용. 매우 저렴. 다양한 자료 제공

- 라즈베리 파이 : 초소형, 초저가 임베디드 보드. 교육용 일환으로 개발. 아두이노와 함께 가장 대중적. 리눅스, 윈도우10 포팅가능

 

 

 

하드웨어 플랫폼 선정후 준비사항

- 하드웨어 구성도 입수해야함

- 입수 경로 : 인터넷 검색, 제작사 제공

 

회로도 입수 다음 과정

- 데이터 시트와 부품 리스트

- 부품 스펙. 용량, 크기를 정해야함

- 데이터 시트 : 부품, 하부시스템(전원 공급장치 등), 소프트웨어 성능, 특성등을 정리한 문서

-> 하드웨어 관련 표준문서 수집

-> 하드웨어 샘플 입수

-> 입수 자료에 대한 형상관리

 

 

 

 

실습

1. 사용자 요구사항

- 소수 관리인이 CCTV 관리가 힘듬

- 사람을 도와 사물을 인식하는 인공지능 CCTV 필요

 

2. 하드웨어 스펙 선정

- 플랫폼 예시 :아두이노, STM, 라즈베리파이

-> 라즈베리 파이 사용

 

3. 운영체제 필요성 파악

- 윈도우, 맥, 리눅스

- 파이에 적합한 라즈비안 사용

- 소프트웨어 : 구글 비전 API

 

4. 개발환경 설정

4.1 운영체제 설치

 - 깃헙에서 라즈비안 소스 다운

 - 소스코드 디렉토리서 make 명령어로 컴파일

 - sd 카드에 이미지 플래시. 에처 주로 사용

 4.2 구글 비전 API 키 발급받기

 - 구글 클라우드 플랫폼 검색, 접속

 - 프로젝트를 생성하고, 클라우드 비전 API서 서비스 계정 키 발급

 

5. 라즈베리파이에 모듈 연결

 - 모니터, 파이카메라 연결

 

6. 임베디드 어플리케이션 설계 및 구현

6.1 VNC를 통한 원격 접속

6.2 관리자 권한 사용 - sudo su

 

300x250
728x90

네트워크

- 시스템을 연결하는 망

- 크기에 따른 분류 : LAN 근거리 통신망,  WAN 광대역 통신망

- 구조에 따른 분류 : 성형, 버스형, 링형, 트리형

 

인터넷

- TCP/IP 프로토콜을 기반으로 전세계적으로 연결된 통신망

 

 

IPv4

- 인터넷에 연결된 자원을 구분하기 위한 고유의 주소

- 8비트 씩 4자리 32비트로 구성

 

IPv4 클래스

- A클래스 : 대형 통신망에 사용. 0~

- B클래스 : 중대형 통신망. 10 ~

- C클래스 : 소규모 통신망. 110 ~

- D클래스 : 멀티캐스트 1110 ~

- E클래스 : 사용 x. 1111

 

IPv6

- 16비트씩 8부분. 128비트 구성

- 주소체계 : 유니케스트(1:1), 멀티케스트(1:특정그룹 전체), 애니케스트(1:1 가까운 특정사용자)

 

 

프로토콜

- 통신하기 위한 규약

- 구문 : 데이터 형식,구조

- 의미 : 각 비트별 의미

- 시간 : 전송 속도, 순서

 

 

OSI 7계층 Open System Interconnection

- 서로다른 시스템끼리 통신하기 위한 프로토콜

- 물데네전세표응

 

1.물리계층

- 물리적 접촉과 전송 신호 정의

- 프로토콜 데이터 단위 PUD : 비트

- 프로토콜 : RS-232C, X.21 등

- 장비 : 리피터, 허브

 

2.데이터 링크 게층

- 논리적 연결을 확립. 흐름 제어, 오류 제어

- PUD : 프레임

- 프로토콜 : MAC 프레임, 와이파이 프레임, HDLC 등

- 장비 : 랜카드, 브리지, 스위치

 

3.네트워크 계층

- 경로 설정. 흐름 제어, 오류 제어

- PUD : 패킷

- 프로토콜 : IP

- 장비 : 라우터

 

4.전송 계층

- 네트워크 계층에서 연결이 형성되면 실제 데이터를 전송 

- PUD : 세그먼트(TCP), 데이터그램(UDP)

 

5.세션 계층

- 대화 채널로서 대화를 제어

 

6.표현 계층

- 코드 변화, 데이터 암호화, 데이터 압축, 표현 정의

- utf-8, ascii

 

7.응용 계층

- 사용자가 OSI 환경에 접근하도록 서비스 제공

 

 

TCP/IP

- 인터넷 통신을 위한 표준 프로토콜

- 네트워크 액세스 계층, 인터넷 계층, 전송 계층, 응용 계층

 

 

1. 네트워크 액세스 계층

- 실제 데이터 송수신 담당

- PUD : 프레임

- 프로토콜 : 이더넷, 맥, RS-232C

 

2. 인터넷 계층

- 데이터 경로 설정, 제어

- 프로토콜 : IP, ICMP, IGMP, ARP, RARP

 

3. 전송 계층

- 데이터 전송

- TCP(세그먼트), UDP(데이터그램)

 

4. 응용 계층

- 응용 프로그램 간 데이터 송수신

- TCP 기반 : TELNET, FTP, SMTP, HTTP

- UDP 기반 : DNS, TFTP

 

 

 

 

응용 계층 프로토콜

- TELNET : 원격제어 서비스

- FTP : 파일 공유 서비스

- STMP : 메일 전송 서비스

- HTTP : HTML 문서를 전송하여 웹서비스 제공

 

전송 계층 프로토콜

- TCP : 연결형 서비스 제공. 복잡. 스트림 전송 기능 담당. 가상 회선 방식. 저속

- UDP : 비연결형 서비스 제공. 간단. 실시간 전송. 데이터 그램 방식. 고속. 

 

인터넷 계층 프로토콜

- IP : 인터넷 자원들을 구분하기위한 고유 주소

- ICMP Internet Control Masage Protocol : IP와 함께 제어 메시지들을 관리하는 역활

- IGMP Internet Group Management Protocol : 멀티캐스트 시 그룹 유지 사용

- ARP Address Resolution Protocol : IP를 물리적 주소인 맥으로 변환

- RARP Reverse ARP : 맥 주소를 논리적 주소인 IP로 변환

 

네트워크 액세스 계층

- 이더넷 : CSMA/CD 방식 LAN

- HDLC : 비트 위주 데이터링크 제어 프로토콜

- RS-232C : DTE와 DCE간 인터페이스 제공

 

 

데이터 교환 방식

1. 회선 교환 방식

- 물리적 회선을 바꿔 데이터를 전송함

- 회선 교환 중 시간이 걸리나 연결되면 고속 통신

2. 패킷 교환 방식

- 데이터들을 일정 크기의 패킷으로 만들어 전송하는 방식

- 가상 회선 방식 : 가상의 연결을 성립후 패킷 운송

- 데이터 그램 방식 : 순서상관없이 보내는 방식

 

 

 

 

라우팅 프로토콜

- RIP Routing Information Protocol : 소규모. 거리 벡터 알고리즘으로 방향과 홉수 고려해서 전송

- IGRP Interior Gateway Routing Protocol :  중규모. 대역폭 상태를 고려한느 링크 상태 알고리즘 사용

- OSPF Open Shortest Path First protocol : 대규모 네트워크

- BGP : 내부 게이트웨이 라우팅 알고리즘 단점 개선한 라우팅 프로토콜

 

 

300x250

'컴퓨터과학 > SW, DB' 카테고리의 다른 글

빅데이터 - 2. 빅데이터 기술  (0) 2020.11.17
빅데이터 - 1. 빅데이터, 데이터 과학, 활용  (0) 2020.11.17
보안  (0) 2020.05.23
테스트  (0) 2020.05.23
데이터모델  (0) 2020.05.22
728x90

secure SDLC

- 소프트웨어 개발 생명 주기에 보안을 추가한 것

 

세션 통제

- 세션 관리에 대한 보안 점검 항목

1. 불충분한 세션 관리

 - 특정 규칙으로 세션 ID 발급 or 너무 긴 타임아웃 -> 하이제킹으로 비정상적 세션 접근가능

2. 잘못된 세션 정보 노출

 - 싱글톤 패턴에서 레이스 컨디션으로 동기화 오류 or 맴버 변수 노출 ->지역변수 활용

 

입력 데이터 검증 및 표현

 - 입력 데이터로 인한 문제 예방 보안 점검 항목

1. SQL 삽입 : 입력란에 SQL을 삽입하여 무단 DB 접근 -> 입력데이터에 예약어, 특수문자 안되도록 필터링

2. 시스템 명령어 삽입 : 웹인터페이스에서 시스템 명령어를 전달하지 않도록 방지

3. 경로조작 자원 삽입 : 데이터 입출력 경로 조작을 통한 공격 -> 필터링

4. 크로스사이트 스크립팅 : 페이지에 악의적 스크립트 삽입 -> HTML 태그 사용 제한

5. 위험한 형식 파일 업로드 : 악의적 파일 업로드 -> 확장자 제한, 실행 속성 제거

 

보안 기능

- 구현 단계에서 보안 점검 항목

1. 하드코드된 패스워드 : 소스 유출시 정보 유출 -> 변수 사용 변경

2. 부적절한 인가 : 접근 제어 없는 경로를 통해 접근 -> 접근 제어 검사

3. 잘못된 권한 설정 : 시스템 자원 접근 -> 관리자만 사용하도록 권한 설정

4. 중요 정보 평문 전송 : 평문 취득 정보 노출 -> 암호화후 전송

5. 취약한 보안 알고리즘 : 암호 해석 -> 강화된 알고리즘 사용

 

시간 및 경쟁

- 병렬 처리 환경에서 원할한 동작을 위한 보안 점검 항목

1. TOCTOU 경쟁 조건 : 검사 시점과 사용시점을 고려하지 않아 발생하는 보안약점 -> 동기화

2. 종료되지않는 반복문 : 잘못된 반복문 설계 -> 종료되도록 확인

 

에러처리

- 오류를 에러처리를 통해 문제예방을 위한 보안점검항목

1. 오류메시지를 통한 정보 노출 : 실제 환경, 사용자 정보 등 노출 -> 노출 메시지 최소화

2. 오류 상황 대응 부재 : 에러 처리 미비로 발생 -> 예외처리 구문작성

3. 부적절한 예외처리 : 에러를 한번에 처리하거나 세분화하지 않음 -> 세분화하여 예외처리

 

코드 오류

- 잘못된 코드로 인한 문제 예방 보안점검항목

1. 널포인터 역참조 : 함수가 널포인터 반환하여 사용해 발생 -> 사용전 널여부 확인

2. 해제된 자원 사용 : 자원 해제 된 메모리 참조. 잘못된 동작 발생 -> 메모리 포인터 초기화

3. 부적절한 자원 해제 : 자원이 반환 코드 누락하거나 되지 않아 자원 부족 발생 -> 자원 해제하도록 구현 

4. 초기화 되지않은 변수 사용 : 부적절한 값 사용 -> 선언시초기화

 

캡슐화

- 캡슐화하여 정보 노출을 예방하기 위한 보안점검 항목

1. 잘못된 세션에의한 정보 노출 : 다중 스레드 환경서 싱글톤 페턴의 레이스 컨디션으로 동기화 오류 노출. 변수 제한

2. 시스템 데이터 노출

3. 제거되지 않은 디버그 코드 : 디버그 메시지가 외부 유출 -> 디버그 코드 삭제

4. public 메소드에 private 배열 반환 : private 배열에 접근가능해짐. -> 값복사하거나 메소드로 값 변경 

5. private 배열에 public 데이터 할당 : private 배열을 접근 가능해짐 -> 직접 값 저장

 

API 오용

- API 잘못 사용하여 발생하는 문제 예방 보안점검항목

1. DNS Lookup에 의존한 보안 결정 : DNS lookup을 악용하여 접근 통제 -> dns 보다 아이피 주소로 접근

2. 취약한 API 사용 : strcat(), strcpy() 처럼 보안 취약한 함수 -> 안전한 API 사용

 

300x250

'컴퓨터과학 > SW, DB' 카테고리의 다른 글

빅데이터 - 1. 빅데이터, 데이터 과학, 활용  (0) 2020.11.17
네트워크  (0) 2020.05.23
테스트  (0) 2020.05.23
데이터모델  (0) 2020.05.22
서버  (0) 2020.05.22

+ Recent posts