2012-02-11 12 views
10

Posso scrivere un file system dello spazio utente personalizzato che può essere eseguito su dispositivi factory non-root tramite le utilità standard disponibili?Driver del filesystem Android userspace su dispositivi non rooted?

Sono a conoscenza dell'esistenza di fuse-android, tuttavia, per quanto ho capito, richiede un dispositivo rooted. Se questo non è il caso, per favore correggimi.

L'obiettivo che sto cercando di raggiungere è creare un 'falso' FS che sia effettivamente montato su un file.

risposta

12

Ho avuto lo stesso bisogno un po 'di tempo fa e sono arrivato al punto in cui dovevo ammettere che non è affatto possibile (soprattutto). Non dovrebbe essere un problema costruire libfuse per Android, anche il wrapper Java non è un problema.

Il vero problema è che la maggior parte dei sistemi che ho visto non sono compilati con buildup di supporto dei fusibili né forniscono moduli che possono essere caricati (che richiederebbero root, ma comunque).

Si può facilmente scoprire se il fusibile è abilitato leggendo/proc/filesystems. Dovrebbe elencare il fusibile, altrimenti avrai bisogno di root. Ma è molto probabile che la maggior parte dei dispositivi Android sia costruita senza supporto per i fusibili.

Le mie altre idee erano di usare un altro filesystem per "falsificare" qualcosa come la miccia. Questo può essere possibile con nfs o qualche altro file system di rete in cui è possibile implementare il server da solo. Questo ti permetterà di scrivere una miccia falsa, ma non penso che ne valga la pena.

Edit: E anche se molti dispositivi dovrebbero supporto fusibile buildin ci sono molte probabilità che non avrebbero permesso di montare come un utente, si avrebbe bisogno di accesso root come la vostra applicazione non avrebbe i privilegi per montare file system fusibili .

+1

Grazie, è esattamente * la risposta di cui avevo bisogno. Bounty ben speso :) –

+0

Nessun problema, felice di poter aiutare =) – Luminger

+0

ho riscontrato lo stesso problema.Ma comunque, penso di poterlo fare se ho superato i seguenti problemi.1: rendere il kernel di Android in grado di caricare il modulo del kernel (l'ho fatto) 2: cross-compilare il progetto del fusibile (l'ho fatto) 3: modprobe il fuse.ko nel kernel di Android (perché non ho idea di dove il ko passa al fusibile 2.9.0 , mi fermo qui). Quindi, chiunque può aiutarmi ?, ecco il dettaglio del problema: http: //stackoverflow.com/questions/10477309/what-substitute-the-fuse-ko-as-the-kernel- modlue-in-fuse-2-9 –

1

Dipende dalla vostra implementazione. Quello che mi suona è che vuoi avere un file fisico che rappresenti un file system utente completo. Forse simile a un .iso montato. Se questo è il caso, non riesco a pensare ad alcun motivo per aver bisogno di root: basta semplicemente creare/installare il file da qualche parte come/sdcard/e "montare" il file system su di esso.

Detto questo, se si desidera che detto file system sia accessibile da altre applicazioni che non si controllano, è necessario il root, altrimenti l'applicazione verrà eseguita in una sandbox Android.

+0

Ok, quindi se voglio che anche altre app accedano e per visualizzarlo nell'albero del file system generale, non c'è modo, giusto? –

+0

In nessun modo che conosca senza radice, no. – NuSkooler

+0

@NuSkooler Ho bisogno di avere un file montato come un filesystem solo per la mia applicazione, non per altri. Come è possibile? Sembri sapere qualcosa su questo risultato parziale che sarebbe abbastanza per me. Per favore, qualsiasi suggerimento o consiglio da parte tua è molto apprezzato. Grazie in anticipo – P5music

2

Luminger ha quasi l'idea giusta. Ecco cosa ho trovato sul mio Galaxy S3 (su Verizon):

Il fusibile appropriato fa esiste in/proc/filesystems. Quindi è necessario che lo qualcosa lo lo utilizzi, molto probabilmente sistema. Tuttavia, quando cerco di eseguire "fusermount", ottengo "Impossibile eseguire - Autorizzazione negata".

Quindi sembra che tutte le cose di FUSE ci siano, ma non ho idea se potrei effettivamente usarlo direttamente (dropbox? Sshfs?) Senza fare il root del dispositivo.

+0

Ho anche confermato la presenza per la versione del fornitore nella scheda Galaxy S. – user2284570

Problemi correlati