[OS]/Embedded

[펌] [ARM 부트로더 제작기5]부트로더와 플래시 메모리(1)-1

하늘을닮은호수M 2005. 6. 22. 14:31
반응형
부트로더와 플래시 메모리(1)-1
저 자 : 유영창
출판일 : 2004년 2월호

당초 계획과 달리 이번 호와 다음 호에 걸쳐 플래시 메모리에 대해 다루고자 한다. 최근 임베디드 시스템에서 부팅 프로그램 저장과 데이터 저장용으로 플래시 메모리를 사용하는 것이 추세인 데다 플래시 메모리의 처리와 활용에 애를 먹고 있는 주변 개발자들을 많이 봐왔기 때문이다. 이번 연재가 기왕에 임베디드 부트로더에 관한 전반적인 내용을 보여주려고 시작한 마당에 잠깐 옆길로 샜더라도 널리 양해해 주기 바란다. 이번 호는 부트로더에서 NOR 플래시 메모리를 어떻게 다루는가를 중점적으로 다루고, 다음 호에서 NAND 플래시 메모리를 다루기로 한다.

연+재+순+서
1회 2003.10 | 임베디드 프로그래머와 부트로더
2회 2003.11 | 보드를 살려보자
3회 2003.12 | 부트로더의 기본 구현(1)
4회 2004.1 | 부트로더의 기본 구현(2)
5회 2004.2 | 부트로더와 플래시 메모리(1)
6회 | 부트로더와 플래시 메모리(2)
7회 | 부트로더의 네트워크 구현
8회 | 커널로의 진입

연+재+가+이+드
운영체제 | 리눅스
개발도구 | GNU gcc 크로스 컴파일러
기본지식 | 리눅스 운영
응용분야 | 임베디드 리눅스 기업 애플리케이션간 상호운용
=============================================================

최근에 32비트 프로세서를 사용하는 임베디드 시스템에서 부팅 프로그램 저장과 데이터 저장용으로 플래시 메모리를 사용하는 것이 하나의 추세이다. 아무래도 기존 ROM보다 가격은 비싸지만 플래시 메모리를 사용하는 것은 32비트 프로세서의 펌웨어들이 기존의 8비트 프로세서의 펌웨어보다 프로그램 크기가 매우 커지고 커널이나 기타 펌웨어의 수행에 필요한 데이터 량이 많아지기 때문이다. 즉 가격 대비 용량이 매우 우수하기 때문에 펌웨어에서 플래시 메모리를 다루는 것은 거의 필수적이다. 이번 호는 부트로더에서 NOR 플래시 메모리를 어떻게 다루는가를 중점적으로 다룰 것이다. 지면 관계상 NAND 플래시 메모리는 다음 연재로 넘겨야 할 것 같다.

부트로더와 이미지
임베디드 시스템에서 리눅스 운영체제를 동작시키기 위해서는 리눅스 커널과 램디스크 이미지, 그리고 목적하는 기능을 수행하기 위한 응용 프로그램들과 응용 프로그램들이 차지하는 용량은 기존의 펌웨어들과는 상대가 되지 않는다. 커널 이미지나 램디스크 이미지가 압축되어 있다고 하더라도 최소한 4MB 이상의 크기를 가진다. 더구나 응용 프로그램이 동작 중에 발생하는 데이터의 저장을 위해서 요구되는 크기도 사용자의 요구에 의해서 계속 늘어나는 추세이다. 한 예로 필자가 최근에 수행했던 프로젝트의 산업용 세탁 제어용 프로그램에 사용되었던 크기를 계산해 보면 다음과 같은 사양이 된다.
부트로더 128KB
커널 1MB
램디스크 이미지 4MB
응용 프로그램 1MB
응용 프로그램의 GUI 이미지 4MB
기록 저장되는 데이터 크기 8MB
이를 정리하면 하나의 임베디드 시스템의 동작을 위해서 대략 19MB 정도가 필요하다. 이 정도의 크기는 기존 8비트 프로세서에서는 사용하기 힘든 크기이다. 32비트 프로세서의 임베디드 시스템은 생각보다 많은 데이터를 사용한다. 이렇게 많은 데이터를 저장하기 위해서는 기존의 EEPROM과 같은 메모리 소자로는 단가가 맞지 않으며, 플래시 메모리와 같은 대용량의 저장 크기를 갖는 메모리 소자를 사용하여야 한다. 그래서 부트로더에서 플래시 메모리를 다루는 기능을 포함하는 것은 필수이다.
앞에서 나열된 내용 중에서 부트로더가 관리하는 이미지의 종류는 부트로더 이미지, 커널 이미지, 램디스크 이미지로 나눌 수 있다. 개발 과정에서 이 세 가지 이미지는 부트로더의 다운로드 기능과 플래시 쓰기 기능을 이용하여 수시로 다운로드하게 된다.

플래시 메모리
부트로더에서 플래시 메모리를 다루기 위해 프로그래머는 플래시 메모리에 대하여 알아야 한다. 플래시 메모리에 데이터를 써 넣는 것은 일반적인 메모리와 조금 다르다. 어떻게 다른지 이제부터 자세하게 알아보자.
메모리 소자의 종류는 크게 ROM과 RAM으로 나눈다. ROM은 전용 쓰기 장치를 이용하여(보통 ‘롬라이터’라고 한다) 프로그램이나 데이터를 써넣으면 전원이 없는 상태에서도 내용이 지워지지 않는다. 즉 수정이 불가능하다. 이에 반해 RAM은 데이터나 프로그램을 자유롭게 써넣고 수정할 수 있지만 전원이 없는 상태에서는 기록된 내용이 소거된다.
아무리 펌웨어라고 하더라도 내용의 기록 보관이 필요한 경우가 있었다. 그래서 이를 처리하기 위해 전원 장치를 가지고 있는 백업 RAM을 이용하거나 EEPROM과 같은 수정 가능한 메모리를 사용하였다. 펌웨어 자체의 프로그램은 ROM을 그대로 사용하고 프로그램 수행을 위한 메모리는 RAM을 사용했지만 저장을 위한 기록은 EEPROM이나 백업 RAM을 사용한 것이다. 백업 RAM은 임베디드 장비에 공급되는 전원이 없더라도 백업 배터리라고 하는 주변 회로를 이용하여 RAM에 전원이 계속 공급되도록 만들어서 내용이 지속될 수 있도록 특별히 고안된 메모리 소자이다(크기가 무척 크고 보통 시계를 내장하고 있다). EEPROM은 전기적으로 내부 내용을 지울 수 있는 메모리 소자이다. 이 두 소자의 가장 불편한 특징은 저장할 수 있는 크기가 무척 작다는 것이다. 256바이트에서 4KB 정도의 저장 크기를 갖는다. 물론 이보다 큰 것도 있지만 그만큼 단가가 높아지게 된다. 이런 기존의 메모리와 차별성을 가지고 등장한 것이 플래시 메모리라고 하는 소자이다.
플래시 메모리는 크게 NOR형과 NAND형의 두 종류로 나뉜다. 이외에 조금 특이한 타입의 플래시도 있지만 일반적이지 않으므로 여기서는 다루지 않겠다. 두 개의 플래시 중 일반인과 가장 친숙한 플래시는 NAND형 플래시인데, 이 플래시는 MP3 플레이어나 이동형 디스크에서 많이 사용되고 있다. 이 플래시는 우리가 자랑스럽게 여길 부분인데, 삼성과 도시바에서 주로 생산하지만 전 세계의 대부분 물량을 삼성에서 공급하고 있다. NAND형 플래시와 달리 NOR형 플래시는 펌웨어와 같은 프로그램 저장용으로 많이 사용된다. 인텔과 AMD가 대표적인 생산업체이고, 처리 방식도 인텔과 AMD에서 나온 제품이 서로 다르다.
반응형