abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 23:22 | Komunita

    openSUSE Leap 16.1 vstoupil do RC fáze. Nově lze instalovat jako standardní systém (Standard) nebo jako neměnný systém s atomickými aktualizacemi (Immutable). Samostatná neměnná distribuce openSUSE Leap Micro končí.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Nová verze

    Byl vydán Mozilla Firefox 157.0. S nejvýraznější vizuální proměnou za poslední roky. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 157 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 10:33 | IT novinky

    Rodina produktů Raspberry Pi se rozšířila o Raspberry Pi Smart Display Module. Deska pro Raspberry Pi Compute Module 5 se zasouvá přímo do displejů dle specifikace Intel SDM. Cena desky je 30 dolarů.

    Ladislav Hagara | Komentářů: 0
    28.9. 23:44 | Nová verze

    Byla vydána nová verze 2.56.0 distribuovaného systému správy verzí Git. Přispělo 104 vývojářů, z toho 39 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    28.9. 21:22 | Bezpečnostní upozornění

    Hackerská skupina ShinyHunters oznámila průnik do informačních systémů FBI, prostřednictvím zero-day zranitelnosti v platformě Oracle PeopleSoft, kterou úřad využívá mimo jiné pro náborový portál FBIJobs.gov. Útočníci tvrdí, že získali až 3 TB dat o současných i bývalých zaměstnancích a uchazečích o práci. Jako důkaz zveřejnili vzorek přibližně 5 000 záznamů obsahující jména, adresy, telefonní čísla, data narození, čísla

    … více »
    AfD 💙 | Komentářů: 1
    28.9. 21:11 | Zajímavý článek

    Doba kompilace linuxového jádra se díky rychlejšímu hardwaru a optimalizacím kbuildu snižuje k deseti sekundám. Nejnovější patche Lorenza Stoakse (vznikají i s pomocí SI) zkrátily na testovacím stroji dobu sestavení z dlouhých 22 vteřin na pouhých 15, a to bez použití RAMdisku. Testovací systém tvořily dva procesory AMD EPYC 9575F (oba dohromady poskytují celkem 128 jader a 256 vláken), čtyřiadvacet 64GB DDR5-6400 paměťových modulů a

    … více »
    AfD 💙 | Komentářů: 13
    28.9. 01:33 | Komunita

    Před rokem a půl vývojáři postmarketOS informovali, že pro projekt hledají nové jméno. Včera bylo oznámeno: postmarketOS se nově jmenuje Nura.

    Ladislav Hagara | Komentářů: 8
    27.9. 13:44 | Zajímavý projekt

    Hra Factorio dorazila na Printables. Hned teď si můžete stáhnout 65 různých modelů a nechat celou mimozemskou planetu oživnout na svém stole.

    Ladislav Hagara | Komentářů: 13
    26.9. 19:22 | Nová verze

    GNU Project Debugger aneb GDB byl vydán ve verzi 18.1. Podrobný přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 0
    25.9. 23:33 | Humor

    Prezident USA Donald Trump během svého projevu na valném shromáždění OSN 22. září 2026 prohlásil, že umělá inteligence 'bude dále oficiálně nazývána superinteligencí', zkráceně SI. Svůj návrh zdůvodnil takto: 'Použití slova artificial činí inteligenci falešnou. Ona falešná není, ve skutečnosti je úžasná'. Zároveň ve svém proslovu prohlásil, že Spojené státy kategoricky odmítají jakékoliv pokusy o vytvoření 'globalistického

    … více »
    AfD 💙 | Komentářů: 27
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2752 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Co vám prozradí ARM ETM trace

    14.2.2021 01:42 | Přečteno: 2889× | programování | Výběrový blog | poslední úprava: 14.2.2021 02:20

    ARM ETM trace je velmi silný nástroj, který je součástí mnoha moderních ARM procesorů, paradoxně je nejtěžší získat správnou desku, která ma ETM+debug port správně vyveden z pinů procesoru. Ale když už to máte, tak lze dělat velmi dobrá meření.

    Příklad 1 - záznam všech vykonaných instrukcí

    JTrace adaptér v Ozone umí zaznamenat do 10 milionů posledních vykonaných instrukcí, takže víte, kudy přesne kód jel. JTrace je bohužel jediný multiplatformní JTAG/SWD adaptér, který funguje i pod Linuxem a Mac OS (Keil Ulink a Lauterbach jen pod Windows a ty nástroje vůbec neumí pracovat s nějakými Makefile nebo ELF souborama).

    Především s interrupty je to neocenitelný debugovací nástroj, protože na interruptech nelze dělat breakpointy bez toho, že se to komplet rozbije.

    Proti další ukázce z ITM trace (z orbtop je méně presná, statistický sampling) to neumí měřit spánek procesoru (ITM trace to umí), ale to až tak moc nevadí:


    Příklad 2 - execution profile

    Zde je např. celkem jasně vidět, kde se pálí čas procesoru, i když se tak trochu předpokládá, že každá instrukce trvá stejně dlouho. A neumí to počítat do celkového času sleep (WFI a podobné instrukce).


    Vývojové desky STM32 nemají správně vyveden ETM port

    Pokud se budete snažit rozběhnout ETM na vývojových deskách STM Discovery, budete velmi sklamáni. Nemají správně vyveden ETM port (zlé časování, zlé kapacity, ... - ETM běží na 200+ MHz na 4 linkách + hodiny). Prý se to samým inženýrům z ST povedlo max na 8 MHz clock speed procesoru. Tudíž to rozhodně chce správnou desku.


    Správné resetování CPU s periferiemi z Ozone

    Ozone má jednou nepříjemou vlastnost proti JLink Commanderu, že neumí správně resetovat CPU, se to jenom tak tváří skákáním po adresách reset vectorů. Zatím jsem s tím zvítězil tímhle hackem (reset přes SYSRESETREQ + VECTRESET bity), které zresetují i periferie, jinak se to seká na inicializaci TRNG například:
    void TargetReset (void) {                                           
    unsigned int AIRCR;
    unsigned int SCB_AIRCR_VECTKEY;
    unsigned int SCB_AIRCR_VECTRESET;
    
    AIRCR = 0xE000ED0C;
    SCB_AIRCR_VECTKEY = 0x5fa0000;
    SCB_AIRCR_VECTRESET = 0x1;
    
    *AIRCR = SCB_AIRCR_VECTRESET | SCB_AIRCR_VECTRESET;
    //                                                                    
    //  unsigned int SP;                                                  
    //  unsigned int PC;                                                  
    //  unsigned int VectorTableAddr;                                     
    //                                                                    
    //  VectorTableAddr = Program.GetBaseAddr();                          
    //                                                                    
    //  if (VectorTableAddr != 0xFFFFFFFF) {                              
    //    SP = Target.ReadU32(VectorTableAddr);                           
    //    Target.SetReg("SP", SP);                                      
    //  } else {                                                          
    //    Util.Log("Project file error: failed to get program base");   
    //  }                                                                 
    //                                                                    
    //  PC = Elf.GetEntryPointPC();                                       
    //                                                                    
    //  if (PC != 0xFFFFFFFF) {                                           
    //    Target.SetReg("PC", PC);                                      
    //  } else if (VectorTableAddr != 0xFFFFFFFF) {                       
    //    PC = Target.ReadU32(VectorTableAddr + 4);                       
    //    Target.SetReg("PC", PC);                                      
    }
    
    void AfterTargetReset (void) {
      unsigned int SP;                                                
      unsigned int PC;                                                
      unsigned int VectorTableAddr;                                   
                                                                      
      VectorTableAddr = 0x8000000; //boardloader vector offset
                                                                      
      if (VectorTableAddr != 0xFFFFFFFF) {                            
        SP = Target.ReadU32(VectorTableAddr);                         
        Target.SetReg("SP", SP);                                    
      } else {                                                        
        Util.Log("Project file error: failed to get program base"); 
      }                                                               
                                                                      
        PC = Target.ReadU32(VectorTableAddr + 4);                     
        Target.SetReg("PC", PC);                                    
    }
    

    Špatná indentace i ten komentář tam musí zůstat, jinak se z toho rozbije parser z nějakého důvodu. Don't ask. No idea why.

    Poznámka na závěr k ARM dokumentaci

    Nespoléhejte se na to, co je napsáno v obecné ARM dokumentaci nebo dokumentaci ke konkrétnímu procesoru. Např. System Control Block by měl být writable, ale není writable zevnitř procesoru, jenom přes JTAG adaptér. (Důvod této nekonečné srandy je že hledám úplne jiný hack na úplně jinou blbost, kde je user přílíš líný vytáhnout kabel).

           

    Hodnocení: 100 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.