2012-02-23 4 views
0

Я новичок в программировании ядра и пытаюсь сделать пример «Hello World». Я добавил следующий код в init/main.c в start_kernel()Параметры загрузки в qemu

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

Теперь на мой вопрос. Как определить HELLO в параметрах загрузки с помощью qemu?

ответ

1

Вам нужно определить HELLO во время компиляции (либо с -DHELLO как флаг компилятора или #define HELLO где-то), в противном случае компилятор никогда даже и не видит printk вызов и никакого кода для нее не получает сигнал.

Вы не можете заставить C-компилятор повторно запускаться на начальной стадии загрузки на основе параметров загрузки, что вам нужно будет сделать, чтобы изменить HELLO.

Ядро ничем не отличается от любой другой программы C в этом отношении - директивы препроцессора обрабатываются очень рано в процессе компиляции.

Вы можете установить параметры с помощью this helper macro, которые являются регулярной переменной, которая может быть установлена ​​на загрузку и протестирована во время выполнения (не время компиляции) с простым старым оператором if.

+0

Мой вопрос в том, есть ли способ определить HELLO после того, как код скомпилирован с использованием параметра загрузки – nist

+1

@nist - Ядро не является особенным, препроцессор все еще происходит очень рано в компиляции, как и любой другой C программа. Вы можете писать нормальные операторы 'if' в ядре так же, как вы можете, в любой другой программе на C, но если вы хотите вместо' # ifdef' – Flexo

+0

Спасибо за информацию. Если я использую инструкции if, как я могу заставить свое ядро ​​вести себя с разными параметрами загрузки и как добавить свой собственный параметр загрузки? – nist

Смежные вопросы