RISOLTO Programmazione ARM / smartphone / bootloader

pedothebest

Nuovo Utente
89
2
Ciao ragazzi ho un problema :

praticamente dopo aver studiato come funziona l'architettura ARM sui telefoni ho deciso di fare un semplice programma e poi passare a qualcosetta di un po' piu' complicato. il fatto è che con l'emulatore QEMU il mio programma fatto in c++/assembly funziona (l'assembler e il linker fanno parte dell'ambiente linux)... il problema è che il mio programma è bare metal(funziona senza sistema operativo perchè lavora direttamente con i registri della cpu) e non so come farlo caricare al telefono visto che è android
se qualcuno ha una piccola esperienza in questo ambito o che cmq mi possa aiutare ad uscire da questa posizione è ben accetto. :luxhello::luxhello::luxhello: grazie mille !!
 
Ultima modifica:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Per curiosità, quanto affermi di aver scritto (il termine corretto è «bootsector» perché appunto contiene, nel primo settore del MBR, il codice di boot) funziona? Architettura? Come chiami il C++ da asm?
 
  • Mi piace
Reazioni: pedothebest

pedothebest

Nuovo Utente
89
2
Per curiosità, quanto affermi di aver scritto (il termine corretto è «bootsector» perché appunto contiene, nel primo settore del MBR, il codice di boot) funziona? Architettura? Come chiami il C++ da asm?
Architettura: armv7 cortex-a5
funziona ? Non te lo so dire per ora in quanto non ho modo di testare il codice il compilatore gcc è compatibile con questa architettura ma l'emulatore qemu no ( ho provato con le architetture simili)
come richiamo il c++ da asm = semplice tramite un linker script ovviamente utilizzando le specifiche gcc.
Come faccio a debbuggare il codice se non ho una macchina virtuale e non riesco ad implementarlo su quella fisica dovrei modificare la ROM interna del telefono(firmware ) ma anche qui non ho nessuna esperienza so solo che non sarà facile modificarlo visto che è una memoria a sola lettura :bevuta: ma se si possono installare gli aggiornamenti al firmware(FOTA) qualche modo ci deve pur essere
 
Ultima modifica:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Dai un'occhiata qua. Però mi è comunque dubbio cosa tu abbia fatto, dato che chiamare il C++ da ASM presuppone un bel po' di codice, almeno per quanto ne so su x86. Come emulatore penso Bosch possa funzionare...
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10

pabloski

Utente Èlite
2,868
916
Mentre per caricarlo nel telefono qualche idea ? :(

Il problema e' che i SoC ARM hanno ognuno un proprio meccanismo di bootstrap. In genere iniziano a fare il boot dall'indirizzo zero dell'unita' di boot ( chi sia dipende sempre dal SoC ). Il grosso inghippo e' come flashare il tuo binario sulla flash rom del telefono. In genere i produttori forniscono dei software appositi, purtroppo non tutti standardizzati.

La strada piu' semplice ( si fa per dire ) sarebbe quella di fare il reversing della rom ufficiale del produttore del telefono. In molti casi troverai in cima una lista di ATAGs ( fai riferimento alla documentazione di Linux per capire cosa sono e a che servono ), seguita dal codice di U-Boot ( il famosissimo boot loader ). Da li' e' quasi tutti in discesa, nel senso che almeno c'e' un minimo di standardizzazione.
 
  • Mi piace
Reazioni: pedothebest

pedothebest

Nuovo Utente
89
2
Il problema e' che i SoC ARM hanno ognuno un proprio meccanismo di bootstrap. In genere iniziano a fare il boot dall'indirizzo zero dell'unita' di boot ( chi sia dipende sempre dal SoC ). Il grosso inghippo e' come flashare il tuo binario sulla flash rom del telefono. In genere i produttori forniscono dei software appositi, purtroppo non tutti standardizzati.

La strada piu' semplice ( si fa per dire ) sarebbe quella di fare il reversing della rom ufficiale del produttore del telefono. In molti casi troverai in cima una lista di ATAGs ( fai riferimento alla documentazione di Linux per capire cosa sono e a che servono ), seguita dal codice di U-Boot ( il famosissimo boot loader ). Da li' e' quasi tutti in discesa, nel senso che almeno c'e' un minimo di standardizzazione.
ohh finalmente uno grande
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili