Asus Tinker Board S, un fel de Raspberry Pi 4 cu mai putin suport tehnic (a se citi "deloc") din partea producatorului. Are un RK808, cip de power management si RTC. Evident, RTC-ul n-are baterie conectata, sau macar o mufa, sau macar niste pad-uri. Nu. E strict pentru power management. Tine minte ora pana il scot din priza.
In weekend, sambata dimineata, imi propun sa-i adaung un PCF8563. Cat de greu poate fi?
Raspuns:
Ma apuc voiniceste de un kernel ultimul racnet (6.10.0-rc6) cu driver PCF8563. Intr-o ora e gata. Install. Reboot. Merge. Super! (Kernelul, nu RTC-ul! Ce? Credeati ca-i asa simplu?!?)
Pasul 2, instalat un devicetree actualizat. Il iau pe ala care vine cu kernelul. Install. Reboot. Merge. Super!
Pasul 3, instalat un overlay pentru acel RTC. Evident, Asus n-a scris un astfel de overlay. Caut sursele pentru ala de la Raspberry Pi. Nu le gasesc.
Aparent Raspberry le tine secrete.
Le gasesc in schimb pe alea de Asus pentru DS1307. Modific pe-acolo ID-urile, salvez. Caut compilator. Cica exista ceva numit "dtc". Instalez, compilez, instalez, modific extlinux.conf sa incarce overlay-ul, reboot, siiiii... nimic.
Trec pe consola seriala. Reboot. Syslinux nu sufla o vorba despre vreun overlay. Nasol - cand am facut uboot-ul ultima data n-am inclus suport pentru overlay-uri. Sa-mi fie rusine.
Bootez normal, iau uboot la puricat in cautarea optiunii-fantoma. Te-ai astepta sa fie in "Device Tree Control". Nu, nu-i acolo. Este in "Library routines".
Tot cautand optiunea fantoma, am mai dat peste diverse chestii de ajustat/tweak-uit. Build fail. Pierdut 10 ore (neconsecutive) investigand ce anume din ce am schimbat nu-i place. Intr-un final am uboot cu DT overlays. Instalez, reboot, eroare si nu booteaza. "base fdt does not have a /__symbols__ node"
Google si constat ca overlay-ul trebuia compilat cu "dtc -@". Daca va duceti la
manual sa cautati -@, n-o sa-l gasiti. E secret.
Deci compilez cu -@, instalez, reboot siiiii ... exact aceeasi eroare. Mai compilez de vreo 3 ori ca sa fiu foarte foarte sigur.
Constat ca nu doar overlay-ul trebuie compilat cu -@, ci si .dtb-ul de baza - adica "base fdt" din eroare - sa-mi fie rusine a doua oara! Evident, cand kernelul compileaza .dtb-uri nu le compileaza cu -@, ca doar de ce ar face-o? Oamenii nu folosesc overlay-uri pe toate drumurile.
Patch-ul care ar fi permis kernelului sa faca asa ceva* n-a ajuns inca/vreodata sa fie inclus. *Cu niste env vars suplimentare, desigur, doar nu va asteptati sa vedeti optiunea in Kconfig, nu?!?
Dau sa compilez .dts-ul din kernel cu dtc -@ siiii ... "syntax error". Pentru ca .dts-ul din kernel contine #include <ceva.dtsi> iar dtc nu suporta asemena aberatii de-ale kernelului.
Includes se specifica cu /include/.
Asa cum explica cineva binevoitor pe net, dts-urile cu #include trebuie pre-digerate de cpp inainte sa le dai la compilat cu dtc. Daca cumva mi-ar fi venit ideea absolut absurda sa citesc manualul despre cum se compileaza DTS-urile,
ghinion, abia daca aminteste ca exista un compilator numit "dtc".
Asadar, pre-procesez .dts-ul si .dtsi-urile incluse, compilez cu -@, instalez si
IN SFARSIT am un RTC functional.