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:
  • 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
  • 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