Linux kernel in axxia - MarekBykowski/readme GitHub Wiki
Axxia ma dwa kernele preempt i rt-preempt. Driver ma chyba glownie dzialac dla preempt. Proponuje zapoznac sie z:
- synchornizacja:
- Atomic, co to load/store exclusive
- Rcu (read copy update), bardzo dobrze sie sprawdza gdy mamy mase czytaczy i niewielu pisaczy https://en.wikipedia.org/wiki/Read-copyupdate#Sample_RCU_interface
- chronienie sekcji krytycznej i synchornizacja medzy watkami:
- spin lock/raw spin lock, co sie dzieje ze spin lock gdy kernel rt-preeempt
- mutex
- semaphore do, np.
- ochrony sekcji krytycznej
- synchornizacji miedzy watkami typu event generator and event receiver
- allokacja limitowanych resource’ów: np. mamy piec bufforow, wiec wpuszczamy max. 5 watkowo
- ref count
- memory barriers: dmb, dsb, isb. Kiedy np. Robic „dmb sy” a kiedy „dmb osh”
- per_cpu: idealne do zbierania statystyk, counterow, tworzysz raz i pojawia sie jedna instancja per core wiec nie ma race’ów
- irq: hard irq (top half) i soft irq (bottom half):
- Ja bym sie glownie zastanowil nad obsluga irq, hard to zawsze to samo ale na jaki sie zdecydowac bottom half: work queue czy threaded irq handlerami:
- work queue jest wygodne bo mozna korzystac albo z publicznych thredow do obslugi albo potworzyc wlasne
- ostatnio widze ze jest tendencja dla obslugi defferal z uzyciem threaded irq serviceow - maskowanie interruptow RIFa w GIC czy w RIFie?
- Request_irq czy devm_request_irq (jezeli platform drvier to lepsze devm_request_irq). Przy odrejestrowywaniu urzadzenia nie trzeba odrejstrowywac interrupta
- Ustawnia GICa. Uwaga i to plus: w xlf jest gicv3 jeden sharowany przez wszystkie core’y. Pytanie czy interrupt z RIFa maja przychodzic na cpu0 czy inny, jakas polityka
- Ja bym sie glownie zastanowil nad obsluga irq, hard to zawsze to samo ale na jaki sie zdecydowac bottom half: work queue czy threaded irq handlerami:
- sk_buff
- jezeli bedzie trzeba dorobic API jak np. w RIFie to trzeba wziac pod uwage,, ze pewnie bedzie copy_to/from_user. One moga spac wiec nie moga byc lockowane spin lockami. Nie mozna tez wylaczac preempt przed ich uzywciem (preempt_disable/enable lub get_cpu/put_cpu)
- low level code jest w arch/arm64
- tez warto poczytac...
- nie ma w armv8 axxia-mach katalogu, wszystko jest rozproszone
- debugowanie:
- poniewaz mamy telnet do plytek jedyne gdb ktory chodzi to gdb over eth, jest LKM modul mi dzialal
- dstrem-5, dam configuration database, bylem wstanie wszystkie core’y zhaltowac
- scripts/decodecode do dissasemblowania kernel oopsa. Przkleijasz dumpa i
scripts/decodecode < przeklejony_dump.txt
- zajebisty jest kcore, pojawia Ci sie w /proc i jedziesz gdb /proc/kcore i debugujesz kernela na ktorym dzialasz. Russel King wywalil z arma bo ma bledy i nie ma komu supportowac, ale da sie jeszcze korzystac
- Kernel oops
diff --git a/fs/proc/Kconfig b/fs/proc/Kconfig
index 2183fcf..e551c36 100644
--- a/fs/proc/Kconfig
+++ b/fs/proc/Kconfig@@ -29,7 +29,7 @@ config PROC_FS
programs depend on this, so everyone should say Y here.
config PROC_KCORE
- bool "/proc/kcore support" if !ARM
+ bool "/proc/kcore support"
Ja bym to widzial tak: zobaczyc jak nemac jest zrobiony przez Axxie w xlf i tam zaczal....
Literatura: [1] ARM Cortex-A Series - programmers guide for ARMv8-A.pdf. biblia jak co dziala w Armie versji 8 [2] http://kernelbook.sourceforge.net/kernel-locking.pdf