범용이 아닌 목적한 기능을 구현한 시스템으로 기능에따라 하드웨어, 소프트웨어가 달라짐. 하드웨어의 구성(CPU, 주변기기등), 소프트웨어 OS유무, 개발 툴 등이 달라짐. 제품단가, 회사사정에 따라 구성이 달라진다.
프로그램 실행과정
시스템의 reset(전원)키 누름 > ARM 프로세스 reset 예외 발생 > 예외 핸들러 코드로 점프 > 부프 코드(하드웨어 초기화) > 스타트업 코드 실행
부트 코드(하드웨어 초기화) - 어셈블리
1. 부팅을 방해하는 요소 diable, 인터럽트, watchdog timer
2. 클럭 생성. 시스템에서 필요한 속도별로 생성. 버스(명령어나 데이터가 지나가는 길)
3. 메모리 무결성 체크
4. 초기화가 필요한 하드웨어 처리
[os가 없는 경우]
스타트업 코드(c코드가 실행될 기반) - 어셈블리
>> a.exe (.text .data .bss .symtbl) - 파일의 크기는 주로 text와 data 파일에 비중이 높다.
code에서 상수 영역을 .text에 저장한다.
초기화 한 전역 변수/static 변수는 .data에 저장한다.
초기화 안 한 전역 변수/static 변수는 .bss에 저장한다.
함수이름/extern된 전역변수 이름을 .symtbl에 저장한다.
1. text/data => 램에 복사
2. bss 영역을 0으로 할당하고 초기화 한다.
3. heap 할당
4. stack 할당. sp(stack pointer) 설정
5. main() 호출 => 펌 웨어(firm ware)실행
[os가 있는 경우]
부트로더(os를 ram에 올려주는 역할을 한다.)
rom에 os와 app을 하나의 이미지로 올려둔다 >> 이미지를 ram에 복사 >> os의 시작함수를 호출한다. >> 시스템 시작
인터럽트
hw 인터럽트 - 주변기기가 프로세서에 요청을 보내는 신호
sw 인터럽트 - 리눅스는 인터럽트 80번을 공유해서 커널에서 보낸 신호. 상위 app에서 자원사용을 요청하면 신호를 발생 > 인터럽트 발생 > 인터럽트 핸들러로 점프
'workSpace > LINUX' 카테고리의 다른 글
우분투로 데이터 셋 다운 받는 법 (0) | 2021.02.26 |
---|---|
[리눅스] 간단한 명령어 및 폴더, 파일 설명 2 (0) | 2021.02.23 |
[리눅스] 간단한 명령어 및 폴더, 파일 설명 (0) | 2021.02.23 |
Cyhwin 설치 방법 (0) | 2021.02.23 |
[리눅스] 리눅스 커널 로직 및 간단한 설명 (0) | 2021.02.23 |