Підручники Baking Pi я вже знайшов , але вони використовують лише мову монтажу . Я дотримувався перших уроків, але мені вже цікаво, як використовувати C замість цього. Я маю на увазі, є причина, що вони винайшли мови вищого рівня. Я спробував просто скомпілювати код C у .o
файл object ( ), компілюючи
.section .init
.globl _start
_start:
bl main
loop$:
b loop$
в інший об'єктний файл і пов'язуючи їх між собою і таким чином отримуючи kernel.img
. Потім я замінив уже наявне ядро на власне, але воно не виконує код C. Код С, який я написав, повинен просто увімкнути світлодіодний індикатор OK, а потім повернутися (потім приходить loop$: b loop$
). Але індикатор OK блимає випадковим чином кілька разів, а потім просто вимикається. Ось мій код C:
int main(int argc, char ** argv) {
volatile unsigned *gpioAddr = (volatile unsigned *)0x20200000;
*(gpioAddr + 4) = 1 << 18;
*(gpioAddr + 40) = 1 << 16;
return 0;
}
Як використовувати C для розробки операційної системи на Raspberry Pi?
Сумніваюсь, це помилка в коді (хоча я просто любитель). Я знаю, що налаштування C може бути складним, але я не перший, хто це робить. AFAIK, усі домінуючі в даний час ОС написані в основному на С, тому має бути стаття, що пояснює процес. Я був би дуже задоволений переліком кроків, тому я можу погуглювати ці кроки і, можливо, задати питання трохи менш широким.
Примітка: еквівалент складання ARM вищевказаного коду С працює просто чудово. Вмикається світлодіод (після трохи блимає). Я думаю (сподіваюся), що вказує на моє Raspberry Pi, це добре.