기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요 ?

target board가 NOR flash와 sdram으로 구성되어 있고,
u-boot는 flash에 writing되어 있습니다.
이러한 구성상태에서, u-boot의 booting process를 보면 대충 다음과 같은 것 같습니다.

board의 power를 on 하면, flash에서 u-boot가 실행을 한다.
먼저, start.S부터 실행을 한다.
clock등의 CPU에 관련된 기본적인 설정을 하고,
memsetup()함수로 분기하여, SDRAM control를 설정한다.
이 후에, flash에서 SDRAM으로 code를 copy한 후에,
SDRAM으로 jump한후, SDRAM에서 나머지 code를 실행한다.
즉... start_armboot()로 분기하여, C code를 실행한다.
start_armboot()내의 "flash_init ();"에서 flash 부분의 설정을한다.

그런데, flash에서 u-boot가 실행을 한다는 의미는
CPU가 flash에 있는 code를 읽어와서 해석하여, 실행을 한다는 의미입니다.
이 때, 읽어 온다는 것은 flash를 제어를 한다는 것이고,
제어를 하기 위해서는, 이미 flash의 register등의 설정이 되어 있어야 합니다.
그런데, flash의 설정은 start_armboot()내의 flash_init()에서 합니다.
이 부분이 이해가 안됩니다.

즉, CPU가 flash를 읽어서 명령어 해석을 하기 위해서는 flash 설정을 먼저 해야합니다.
그런데, 이 설정을 하는 부분은 flash_init()함수입니다.
그런데, flash가 설정이 안되어 있는 상태에서 flash_init가 실행하기 이전인
어셈블리어로 coding되어 있었던 code들(~start_armboot이전 code)을 어떻게 해서 flash로부터 읽을 수가 있는지요 ?

profile

김재훈

2008.12.08 03:53:49
*.162.4.153

첫째. 장착된 FLASH 메모리가 NOR Flash 경우
-> NOR Flash는 메모리와 동일하게 주소 단위로 접근이 가능 합니다.
따라서 부팅할 때 동작이 가능한 것 입니다.
NOR Flash를 구동하기 위한 조건(버스폭/타이밍)등은 기본적으로
프로세서가 최초로 구동되었을 때 기본 레지스터 셋팅만으로 접근할 수
있도록 설계 되어 있습니다. 따라서 부팅할 때 접근이 가능한 것 입니다.
보통은 NOR Flash 부팅 장치의 경우 제조사에서 제시하는 레퍼런스가
있습니다.

둘째. 장착된 FLASH 메모리가 NAND Flash인 경우
-> NAND Flash의 경우 블록 디바이스 입니다. 이 경우 NOR Flash와 달리
주소 단위로 접근을 못하기 때문에, 일반 메모리 처럼 읽는 것이 불가능
합니다. 하지만, NAND Flash 부팅을 지원하는 프로세서 들은...
이 작업을 H/W로 처리할 수 있도록 지원해주고 있습니다.
즉, 장착된 NAND Flash의 정보를 회로 설계시 H/W 적으로 설계해 준
다면, 프로세서의 NAND Flash Controller에서 부팅시 자동으로 장착된
NAND Flash의 0번째 블록을 내부 SRAM으로 읽어서 부팅을 수행하게
됩니다.

즉, 부트로더의 뒷쪽에 있는 flash_init() 함수는 기본적인 H/W 초기화 작업이 끝난 후, Flash를 본격적으로 사용하기 위해서 사용하는 함수일뿐, CPU의 초기 부팅 절차와는 별 연관이 없습니다.

강용근

2008.12.10 08:43:17
*.178.110.54

답변 대단히 감사합니다.
그러나, 정확히는 이해를 못해서 다시 여쭙니다.

“NOR Flash를 구동하기 위한 조건(버스폭/타이밍)등은 기본적으로
프로세서가 최초로 구동되었을 때 기본 레지스터 셋팅만으로 접근할 수
있도록 설계 되어 있습니다.”라는 문장의 의미를 아래와 같이 이해하면 되는지요 ?

S/W적으로는 어떠한 처리(register 셋팅)를 하지 않아도,
H/W적으로 이상이 없다면(즉, board의 processor와 flash간에 interface만 정확하게만 설계해 놓았다면),
처음 전원을 ON할 때, processor가 내부의 H/W적인 방법에 의해서 flash 구동 조건(버스폭/타이밍)을 위한 register을 설정을 해줌으로써,
processor는 flash로부터 code를 읽어와서 해석하고 실행할 수 있다는 의미인지요 ?

답변 주시면 대단히 감사하겠습니다.
List of Articles
번호 제목 글쓴이 날짜 조회 수
368 일반 질답란입니다. 리눅스, wince, BSD, RTOS등등의.... 고도리 2007-10-16 2224
367 yaffs iozone 테스트 [1] 박지훈 2009-01-22 1175
366 aesop2440보드에 qt-embedded-4.4 올릴 때 문제 아시는 분 [4] 류경훈 2009-01-20 932
365 Angstrom compile후 진행사항 문의 [3] 박종석 2009-01-16 1064
364 6410 보드 양산시 메모리 인식 문제 [4] 성인제 2009-01-07 1191
363 mplayer의 실행 좌표 질문입니다. [1] 박선종 2009-01-05 797
362 Angstrom이 무엇인가요? [1] 박종석 2009-01-04 828
361 RVDS 2.2 설치 [6] 한영민 2008-12-31 6535
360 aesop커널에 crmafs올릴려면..(질문 조금 수정했습니다.) [2] 배신규 2008-12-31 938
359 고도리님께 질문 [3] 박선종 2008-12-30 822
358 U-boot에서 usb storage 인식하기. 최종환 2008-12-30 1509
357 nand flash 설정 문의 [1] 정대현 2008-12-24 917
356 [완료]uboot 1.0.0에 aesop kernel 2.6버전을 올려도 되나요? [2] 배신규 2008-12-19 693
355 u-boot에서 flash관련... [2] 김경식 2008-12-15 939
354 QT에서 tslib를 사용하지 않고 touch 사용? [1] 정원 2008-12-13 1273
353 [질문] 임베디드 개발자 분들에게 질문드려요(parallel 카드) [4] 고태현 2008-12-12 714
352 u-boot1.1.6 nand read 에러문의 [3] 정대현 2008-12-09 1033
351 [질문]POLLUX에서 2GB MLC(K9GAG08U0M) 에러 관련... [3] 장병남 2008-12-09 1584
350 nand read 에러문의 [3] 정대현 2008-12-09 1012
» flash제어에 관한 문의입니다. [2] 강용근 2008-12-08 815

사용자 로그인