2012-02-23 2 views
0

저는 커널 프로그래밍과 "Hello World"예제를 시도하는 것이 새로운 것입니다. 내가 start_kernel에/main.c의를 초기화하기 위해서 다음과 같은 코드를 추가() 내 질문에 이제qemu의 부팅 매개 변수

#ifdef HELLO 
    printk("Hello World"); 
#endif 

. qemu를 사용하여 부팅 매개 변수에서 HELLO를 어떻게 정의합니까?

답변

1

당신은 그렇지 않으면 컴파일러는 결코 심지어 printk 전화를 볼 수 없습니다 그것에 대한 코드를 방출하지 도착, (중 어딘가에 컴파일러 플래그와 -DHELLO 또는 #define HELLO로), 컴파일시에 HELLO을 정의 할 필요가있다.

부팅 매개 변수에 따라 C 컴파일러를 초기 단계의 부팅 시간에 다시 실행할 수 없으므로 HELLO을 변경해야합니다.

이 점에서 커널은 다른 C 프로그램과 다르지 않습니다. 전처리 기 지시문은 실제로 컴파일 초기에 처리됩니다.

할 수 있습니다 일반 오래된 if 문 (시간을 컴파일되지 않음) 부팅을 설정하고 실행시에 테스트 할 수있는 일반 변수입니다 this helper macro와 설정 매개 변수를 설정합니다.

+0

내 질문은 코드가 부팅 매개 변수를 사용하여 컴파일 된 후에 HELLO를 정의하는 방법이 있다면 – nist

+1

@nist - 커널이 특별하지 않고 전처리 기는 다른 C와 마찬가지로 컴파일 초기에 여전히 발생합니다. 프로그램. '# ifdef' 대신에 다른 C 프로그램과 마찬가지로 커널에 정상적인'if' 문을 쓸 수 있습니다. – Flexo

+0

정보를 제공해 주셔서 감사합니다. if 문을 사용하면 다른 부트 매개 변수로 커널을 어떻게 다르게 만들 수 있으며 어떻게 고유 한 부트 매개 변수를 추가 할 수 있습니까? – nist