리눅스 시스템
![](https://velog.velcdn.com/images/ooweatah/post/ea41eacd-6be8-4658-b368-94e35a1eab85/image.png)
부팅 시나리오
![](https://velog.velcdn.com/images/ooweatah/post/4fabe983-4e58-499a-994e-7c3b6cce0719/image.png)
작은시스템인 경우 persistent한 스토리지가 없는 경우가 많다.
ex) IoT디바이스 , 센서
- 처음에는 Boot Flash에 모두 저장이 되어있다.
- 파워 => 부트 플래시
NAND vs NOR Flash memory
![](https://velog.velcdn.com/images/ooweatah/post/50755802-ad29-445d-9165-2069c5c9c4d5/image.png)
- NOR은 반도체 셀이 병렬로 배열, 소스라인이 DRAM처럼 주소 하나마다 Random access
- NAND는 여러 비트에 하나만 존재한다. 여러비트를 한 번에 읽게된다.
- NOR : 밀도를 높이기 어렵다, 지우는속도가 어마어마하게 느리다. ROM으로 쓰는 이유
- NAND : 밀도를 높이기 쉽다.
부팅시나리오 - SoC
![](https://velog.velcdn.com/images/ooweatah/post/014d682a-4fca-4429-bad6-2bfa8a18a481/image.png)
- 부팅이되면 부트롬에있는 부트로더가 동작 => 여러 정보를 Mass 스토리지에서 읽어서 램에 적재 , 하드웨어를 초기화하고 커널에게 컨트롤을 넘겨줌. 커널이 초기화를 하게 함
부트로더 오퍼레이션
![](https://velog.velcdn.com/images/ooweatah/post/8918955f-27e3-4cd5-9d62-3d628f4b1490/image.png)
파워가 켜진 순간
![](https://velog.velcdn.com/images/ooweatah/post/075b4c6b-4b7d-4233-93aa-e162f1493fee/image.png)
- cpu 수행 , 처음에 정해져 있는 메모리 위치로 점프
- 0번지에 가면 부트로더가 있다.
- 0x0000_AFFF로 점프를 해서 부트로더 수행 => cpu의 ram 메모리 컨트롤러를 초기화함
- 스택과 힙을 램에 설정 , 디바이스 트리 , 커널을 ram에 복사
- 부트로더의 마지막 일 : 스타트 커널로 점프