문제

어떻게 컴파일합니까? 유효한 프로그램으로 프로그램 꼬마 요정 형식 (또는 원시 형식)이 RAM에서 직접 실행할 수 있도록 형식 (또는 원시 형식) OS? a 부트 로더 RAM의 모든 위치에 코드를로드하고 해당 주소에서 실행을 시작할 수있는 존재합니다. 정확하게 말하면 컴파일러가 무엇인지 (GCC) 깃발? 지도 파일이 필요합니까?

샘플 Helloworld 응용 프로그램이 가장 환영받을 것입니다 :)

내 요점을 자세히 설명하기 위해
main () 메소드를 비어있는 무한대 루프가되도록하십시오. OS 특정 또는 표준 라이브러리 호출이 사용됩니다. 원하는 O/P는 교수형입니다. 평소와 함께 GCC 옵션 부트 로더가 유효하지 않다고 말하는 실행 파일을로드하지 못할 것입니다. 꼬마 요정 체재. 그러나 통과함으로써 -dn 링커에 대한 옵션은 유효합니다 꼬마 요정. 충돌이 아닌 더 많은 컴파일러/링커 옵션이 필요합니다 !! 컴파일러 옵션은 정확히 무엇입니까?

file.c:
int main()
{
    while(1);
}

편집
gcc -c -nostdinc -fno -builtin file.c
ld -dn -nostdlib file.o

부트 로더로드 A. 아웃 램과 실행에.

도움이 되었습니까?

해결책

첫째, 부트 로더가 작업을 마치면 할 수있는 일에 제한이 있습니다. 이러한 제한 사항은 다음과 같습니다. 당신은 그것을 활성화해야합니다. 2. IRQ 용 핸들러를 설정해야하므로 장치와 상호 작용할 수 없습니다.

다음은 베어 메탈에 대한 프로그래밍 기술을 배우는 데 사용했던 고전적인 링크입니다 (http://geezer.osdevbrasil.net/osd/index.htm). 또한 페이지에 다운로드 링크가 있습니다 (http://geezer.osdevbrasil.net/osd/code/osd.tgz). TAR 파일에는 복잡성이 증가하는 데모 커널이 포함되어 있습니다. 또한 Make File (Linux.mak)을 살펴보고 GCC에 필요한 플래그를 얻을 수 있습니다.

무작위 제조 파일을 열었고 다음 플래그가 사용되었다는 것을 알았습니다. gcc : -nostdinc -fno -builtin ld : -nostdlib
(링커에 대한 명시 적 호출이 이루어 지므로 LD도 깃발이 필요합니다).

플래그 목적은 GCC에 표준 라이브러리와 연결되지 않아야한다고 GCC에 알리는 것입니다.

다른 팁

Coreboot는 독립형 ELF를로드 할 수 있습니다. "DRAM 초기화"를 참조하십시오 :

http://en.wikipedia.org/wiki/coreboot

http://www.osdever.net/bkerndev/index.php

이 사이트는 귀하의 질문에 대한 답변을 단계별로 답변합니다 ...

OS를로드하지 않으면 장치 드라이버를 작성하여 장치와 함께 작동해야한다는 것을 알고 있습니까? 즉, 특정 비디오 카드 용 드라이버를 쓰지 않고 화면에 글을 쓰지 않고 특정 하드 드라이브 컨트롤러 카드에 대한 드라이버를 쓰지 않고 디스크를 읽지 않고 키보드에 액세스하지 못하는 것 등.

당신은 무언가를 조사하고 싶을 수도 있습니다 키오스크 모드 대신에. 기본 아이디어는 OS가 실행되고 앱에 필요한 모든 것을로드하고 앱을로드 한 다음 다른 앱으로 전환 할 수 없다는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top