Patrzę na kilka wskazówek dla zrozumienia, w jaki sposób jądro Linux implementuje konfigurację różnych zegarów sprzętowych. Zasadniczo odnosi się to do pracy z ustawianiem różnych zegarów, których będą używać funkcje sprzętowe, takie jak wyświetlacz LCD, UART itp. Na przykład, kiedy Linux uruchamia się, jak radzi sobie z ustawianiem zegarów dla UART lub USB. Może coś takiego jak menedżer zegara albo coś takiego.Implementacja sygnałów zegarowych sprzętowych w jądrze Linux
Zasadniczo próbuję zaimplementować coś podobnego dla innego systemu operacyjnego na nowym sprzęcie, nad którym pracuję. Każda pomoc będzie naprawdę doceniona.
[Edytuj]
Dzięki za odpowiedzi i linki. Oto co zaimplementowałem do tej pory. To powinno dać ci wyobrażenie, dokąd zmierzam.
Sprawdziłem instrukcję obsługi sprzętu dla konkretnego systemu, którego szukam, i napisałem kod do monitorowania/modyfikowania sygnałów/pinów urządzeń peryferyjnych, które mnie interesują, tj. Włączania ich/wyłączania z linii poleceń.Teraz zbiór tych zegarów/sygnałów razem kontroluje urządzenie peryferyjne. HRM powiedziałby, że jeśli chcesz włączyć UART lub coś takiego, włącz takie i takie sygnały/piny. I @BjoernD tak używam czegoś podobnego do funkcji mmap(), aby porozmawiać z urządzeniami peryferyjnymi.
Mięsem mojego pytania jest to, że chcę zrozumieć projekt i wykonanie zegara/urządzenia peryferyjnego, który używa narzędzia, które już napisałem. Ten menedżer zegara/urządzeń peryferyjnych dałby mi kontrolę nad włączaniem/wyłączaniem potrzebnych urządzeń peryferyjnych. Zasadniczo ten menedżer umożliwiłby mi wprowadzanie zmian w kodzie inicjującym, który jest właśnie uruchomiony. Również podczas pracy proces może wywołać tego menedżera, aby włączyć/wyłączyć urządzenia, aby zoptymalizować zużycie energii. To mogło nie mieć sensu, ale ja sam próbuję to objąć.
Teraz jestem pewien, że coś takiego zostałoby zaimplementowane w Linuksie lub w jakimkolwiek systemie operacyjnym pod kątem problemów z wydajnością (nikt nie chciałby marnować energii, włączając wszystkie urządzenia peryferyjne podczas rozruchu). Chcę zrozumieć jego architekturę oprogramowania. Odniesienia z dowolnego systemu operacyjnego sprawiłyby, że przynajmniej uzyskają przewagę. Nie piszę też własnego systemu operacyjnego, istnieje system operacyjny, ale szukam więcej na poziomie oprogramowania na poziomie boarda, inaczej BSP. Ale dzięki za link OS i tak, są naprawdę dobre. Doceniam to.
Dzięki!
Więc co ja po prostu staramy się robić to mieć jakiś systemu w miejscu, dzięki czemu mogę odpowiednio włączyć wymagane sygnały/zegary dla odpowiedniego h/w. –
Contd (klucz powrotny rzekomo wkleja komentarz) Tak na przykład podczas rozruchu może tylko UART może być włączony, ale reszta może być wyłączona, aby oszczędzać energię. Później, gdy LCD musi uruchomić, może wysłać żądanie do narzędzia/menedżera, aby włączyć w przypadku niektórych sygnałów (będą one znane ze specyfikacji h/w). Tak więc narzędzie podejmie odpowiednie działanie, ustawiając wymagane bity w rejestrze sterowania dla LCD "HIGH". –
Jestem pewna, że zostało to rozwiązane w zorganizowany sposób w jądrze Linuksa, to znaczy, że nie wiem, gdzie szukać. –