Znalazłem już samouczki Baking Pi , ale używają one tylko języka asemblera . Poszłam na pierwsze lekcje, ale już zastanawiam się, jak zamiast tego użyć C. Mam na myśli powód, dla którego wymyślili języki wyższego poziomu. Próbowałem po prostu skompilować kod C do pliku object ( .o
), kompilując
.section .init
.globl _start
_start:
bl main
loop$:
b loop$
do innego pliku obiektowego i łączenie ich ze sobą, a więc uzyskiwanie kernel.img
. Następnie zastąpiłem już obecne jądro moim własnym, ale nie wykonuje ono kodu C. Kod C, który napisałem, powinien po prostu włączyć diodę OK, a następnie powrócić (potem nadejdzie loop$: b loop$
). Ale dioda OK OK miga kilka razy losowo, a następnie pozostaje wyłączona. Oto mój kod C:
int main(int argc, char ** argv) {
volatile unsigned *gpioAddr = (volatile unsigned *)0x20200000;
*(gpioAddr + 4) = 1 << 18;
*(gpioAddr + 40) = 1 << 16;
return 0;
}
Jak używać C do programowania systemów operacyjnych na Raspberry Pi?
Wątpię, czy to błąd w kodzie (chociaż jestem tylko hobbystą). Wiem, że konfiguracja C może być skomplikowana, ale nie jestem pierwszą, która to robi. AFAIK, wszystkie obecnie dominujące systemy operacyjne są napisane głównie w C, więc musi być artykuł wyjaśniający ten proces. Byłbym też bardzo zadowolony z listy kroków, więc mogę wyszukiwać te kroki w Google i być może zadać pytanie nieco mniej ogólne.
Uwaga: odpowiednik zestawu ARM powyższego kodu C działa dobrze. Włącza diodę LED (po krótkim mrugnięciu). Myślę (mam nadzieję), że to wskazuje, że moje Raspberry Pi jest w porządku.