임베디드 시스템 동작에 관련하여!!!!!!!(답변 부탁드려요 ㅠㅠ)
안녕하세요~!
제가 임베디드 공부를 하다가 궁금하게 있어서요!!
일단 제가 공부한 것에 대해서 정리를 좀 해보면
만약에
1. 제가 어떠한 타겟상에서 동작할 수 있는 소스코드를 PC에서 작성했어요
2. 이 작성한 소스코드를 PC에서 크로스 컴파일러를 가지고 컴파일, 빌드까지 했어요
3. 그러면 제 생각엔
전처리 -> 파싱 -> 컴파일 -> 링크 와 같은 과정을 거쳐서 타겟에서 실행 될 수 있는 실행파일이 만들어 질 것이라고 생각합니다
4. 그리고 이 실행파일을 타겟 상에 실행하기 위해 타겟에 다운로드를 시킵니다
(다운로드 방법은 이더넷, usb, serial 같은 것으로 다운로드 할 수 있는 것이죠?)
5. 그리고 타겟에서 그 실행파일을 실행 시키려고 합니다!
여기서 어떻게 동작하는 지 알고싶어요!!!
타겟에 다운로드를 하면 실행파일이 어딘가에 저장이 되고 그것을 읽어서 실행을 할 것 같은데
제가 그냥 이것저것 읽은거 조합해보면
NOR플래시 메모리나 NAND플래시 메모리에 저장되는데
NOR플래시 메모리나 NAND플래시 메모리의 Code영역이라는 곳에 저 실행파일 내용들이 들어가고,
Data영역이라는 곳에 초기화된 변수가 들어가고
SDRAM에 Data(bss)영역에 초기화되 않은 전역변수들이,
SDRAM에 Heap영역에 동적 할당 역역이,
SDRAN에 Stack영역에 지역변수들이 저장된다?!
이것이 맞나요? 근데 이렇게 각 영역별로 저장을 하려면 어느정도 필요하고 어떤 것을 저장해야 할 지 알아야 되잖아요?! 그럼 CPU가 타겟에 NOR플래시 메모리나 NAND플래시 메모리에 코드영역에 이 실행파일이 저장되어 있으면 걍 읽어가지고 알맞은 영역들에 할당?을 해주는 건가요?
그리고 각 영역별로 사이즈는 언제 어떻게 정해지나요?
저렇게 뭐 값들이 저장되면 다시 CPU가 읽어서 명령어를 메모리에서 가져와서 명령을 해석하고 해석된 명령을 실행하는 건가요?
그리고 SDRAM은 휘발성이잖아요. 그럼 여기에 들어간 변수들... 데이터들이 사라지나요??? 실행할 때 여기에 영역잡아서 실행해주는 건가요?
여러가지로 글이 길어졌는데 잘아시는분 명쾌한 답변 부탁드려요
찾아보려했는데 제가 궁금한 부분에 대해서는 못찾겠네요 ㅠㅠ
혹시 이 질문이 좀 이해가 안가면 댓글달면 바로 답변해드리겠습니다!!!
...
다운로드 하신 방법 - 시리얼, 이더넷 - 외에도 터미널 출력이 되지 않나요?
그 터미널... 콘솔에서 다운로드한 디렉토리로 이동한 후에 실행하시면....
life is only one time
그럼 다운로드한 디렉토리는 ROM인가요? ROM에서
그럼 다운로드한 디렉토리는 ROM인가요?
ROM에서 Flash memory 종류에 NAND와 NOR가 있잖아요~
여기서 NAND하고 NOR, 어디에 저장되나요?(해당 하드웨어가 둘중 하나만 지원하나요? 그럼 그 지원하는 메모리에다가 저장을 하는 것인가요?)
예를들어 NAND에 저장되면 NAND에서 SDRAM으로 복사된다고 했는데
SDRAM은 또 XIP라는 것이 된다고 했는데... 이게 메모리상에서 직접 프로그램을 실행할 수 있는 것이라고 하네요
직접 프로그램을 실행 가능하다는 것은 무슨말일까요...?ㅠ... SDRAM에서 직접실행한다는 건... SDRAM에 프로그램이 복사되고 그것을 자동으로 실행한다는 뜻인가요?
그럼 실행을 해줄 필요가 없나......?
혼란....
메모리 저장 방식과 프로그램 실행 방식이 이해가 안가요...ㅠㅠ 너무어렵네요
도와주세영...ㅠㅠ
..
보통은,
낸드 플래쉬에 저장되어 있던 바이너리를 램으로 옮기고
시작 주소에서 순차적으로 명령어를 씨피유에게 전달하죠.
개발 단계에서는
랜이나 시리얼을 통해
보드에 바이너리를 로드하면서
램으로 바로 전달하죠.
이런 얘기는 falinux쪽에 좋은 문서가 많이 있습니다...
life is only one time
도움이 될진 모르겠으나..
일단 전송하면 nand나 rom에 저장이 되죠
그리고 부트타임때, 저장된 펌웨어 이미지가 램으로 이동합니다
여기서 부터는 램에서 실행이 되죠
글에서.. nand나 rom에 어떻게 저장하고, 램에 올릴건지가 궁금하신건지.. (부트로더 소관)
아니면 그 이후 램에 올려진 상태에서의 프로세스가 궁금한건지 잘 모르겠어요 ㅎㅎ