PDA

View Full Version : Implementare un driver di periferica in Android


c.m.g
16-09-2011, 12:04
Salve ragazzi, forse sto per fare una domanda un po' inusuale per questa sezione ma come è possibile integrare un driver di periferica in Android Honeycomb versione 3.2?

Ho installato una rom cucinata basata su tale OS ma il modem (Ericsson F3307G interno 3G) non viene riconosciuto dal sistema.

Qualcuno potrebbe farmi una mini guida oppure linkarmi delle risorse da leggere (anche in inglese) per capire come implementare tale driver in Android?

Il Tablet che uso si chiama Point of view Mobii Tegra 10.2 pollici.

Grazie anticipatamente a chi mi risponderà.

c.m.g
17-09-2011, 09:17
up

pabloski
17-09-2011, 10:02
Sono normali driver per linux, quindi valgono le stesse regole.

Ti conviene iniziare con la classica guida http://lwn.net/Kernel/LDD3/

e anche questo tutorial non è male http://www.freesoftwaremagazine.com/articles/drivers_linux

c.m.g
17-09-2011, 12:42
Sono normali driver per linux, quindi valgono le stesse regole.

Ti conviene iniziare con la classica guida http://lwn.net/Kernel/LDD3/

e anche questo tutorial non è male http://www.freesoftwaremagazine.com/articles/drivers_linux

pablosky ti ringrazio veramente tanto per la tua risposta, ti sono debitore.

pabloski
17-09-2011, 13:20
pablosky ti ringrazio veramente tanto per la tua risposta, ti sono debitore.

non esagerare :D

mica sono Saint Steven of Jobs

http://www.esarcasm.com/wp-content/saint-steven-of-jobs.jpg

c.m.g
17-09-2011, 13:37
non esagerare :D

mica sono Saint Steven of Jobs

http://www.esarcasm.com/wp-content/saint-steven-of-jobs.jpg

Il discorso è che sembra che oggi c'è sempre meno gente disposta ad aiutarti ed io sono sempre uno che riconosce la gentilezza altrui. ;)

c.m.g
19-09-2011, 12:35
faccio il punto della situazione:
ho trovato un driver (http://sourceforge.net/apps/mediawiki/mbm/index.php?title=MBM) già scritto che va bene per android 2.2 e 2.3 ma non so se va bene per il 3.2. Poi se ho capito bene bisogna implementarlo nel kernel e ricompilarlo. come procedo?

pabloski
19-09-2011, 12:52
faccio il punto della situazione:
ho trovato un driver (http://sourceforge.net/apps/mediawiki/mbm/index.php?title=MBM) già scritto che va bene per android 2.2 e 2.3 ma non so se va bene per il 3.2. Poi se ho capito bene bisogna implementarlo nel kernel e ricompilarlo. come procedo?

i driver si compilano come si fa su linux ( dovrebbe essere specificato in quella guida )

moltissimi driver vengono compilati come moduli, quindi non serve ricompilare il kernel per intero ( ma ovviamente si può fare anche così )

per la versione di android dovresti fare qualche prova, ma il kernel è rimasto il 2.6 fin dall'inizio quindi non penso che non vada

quello che ti serve è ovviamente gcc, make, ecc...

poi gli header del kernel e possibilmente i sorgenti ( quelli presi dai repository di android però )

i sorgenti del driver dovrebbero avere un makefile adatto, in caso contrario puoi creare un makefile di questo tipo

obj-m = mio-driver.ko
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

in sostanza richiama il makefile del kernel dicendogli di creare i moduli

ovviamente puoi benissimo dare il comando make modules direttamente, andando nella directory root dei sorgenti del kernel

fatto questo avrai il modulo mio-driver.ko che verrà caricato tramite il comando insmod mio-driver.ko

chiaramente potresti inserire il modulo direttamente nel kernel ( ricompilando tutto ) ma a che pro?

dimenticavo una cosa, la nomenclatura delle directory in android è diversa, mentre in linux i moduli stanno in /lib/modules, in android vanno in /system/lib/modules

occhio che quello che ho scritto vale nel caso tu voglia compilare il modulo direttamente sulla piattaforma di destinazione....in caso di cross-compilazione devi cambiare alcune cose come spiegato qui http://finsframework.org/mediawiki/index.php/Android#Building_LKMs_for_a_specific_build_of_Android

ho letto pure di gente che usa il ndk di google per compilare i moduli come spiegato qui http://stackoverflow.com/questions/4865469/can-the-android-ndk-compile-kernel-module-source

non ho mai provato ma sembra essere del tutto simile al mio metodo solo c'hai la toolchain già bella e impacchettata

ho notato che loro prelevano la configurazione del kernel dal device con installato android e usano quella per compilare i moduli e/o il kernel http://wiki.cyanogenmod.com/wiki/Building_Kernel_from_source

nel mio caso ho ricompilato android da zero per girare su un netbook x86, quindi la configurazione l'ho costruita da me

c.m.g
19-09-2011, 14:00
grazie veramente di cuore ;) spero che quei driver funzionino il numero di versione del kernel è 2.6.36.3 e la rom è vegacomb.