도와주세요!!
글 수 15,339
2003.10.09 10:46:20 (*.186.47.173)
6779
: ld-script파일을 사용하지 않으면 어떻게 동작되는것인지 궁금합니다.
LD-script파일은 평범한 어플을 컴파일 할때는 사용되지 않습니다. 필요한
경우 사용되지요..
내부적으로 컴파일러가 지정한 text, bss, stack 영역으로
고정이 되죠..(맞나?)
하지만 부트로더는 컴파일러가 임의로 처리할수 있는 메모리의 크기를
가지고 있지 않고 또 메모리는 특정 영역으로 한정되야 하기 때문에
이런 영역을 직접 지정하는 것입니다.
: script파일을 보면 star.s코드의 text section은 0x00000000
: 이고 main.c 의 test section은 0xC0F00400입니다.
: 그럼 플레시에 저장된 부트코드를 램으로 옮길때 반드시 0xC0F00400로 복사해
: 야 하는건가요?
star.s 는 리셋시에 실행되는 코드이므로 시작이 0x00000000 이 되야 하겠죠
그리고 main.c 는 SDRAM 영역에서 실행되야 하기 때문에 SDRAM 영역의
특정 주소를 지정한 것입니다. 뒤에 붙은 0x400 은 어셈블러로 코딩된 영역이
0x000 ~ 0x400 주소안에 다 들어가는 영역입니다. 이 어셈영역이 커지만 이값을
조정해야 합니다.
부트코드를 어셈까지 통째로 0xC0F00000 으로 복사하면 main.c 는 +0x400 이
되겠죠
: 그리고 커널도 마찬가지로 text section이 지정되고 반드시 그 주소의 램으로
: 복사를 해야하는건가요?
커널은 좀 구조가 다릅니다. 이부분은 제가 설명하기에는 좀..
: 그리고 위 질문에서처럼 script 파일을 사용하지 않으면 램에 복사할때 어는
: 어드레스에 커널을 복사해야 하는건지도 궁금합니다.
커널 이미지를 복사하는 주소는 스크립트파일과는 무관합니다.
이미지가 풀리는 크기를 가만하여 베이스주소를 정하면 됩니다.
이번 공개세미나에서 이 질문에 관한 내용을 강의할 예정입니다.