Per un motivo o per un altro, ai possessori di un dispositivo Android potrebbe capitare di aver bisogno di modificare un file di sistema. Questi file, però, sono ovviamente protetti, in modo da evitare disastri agli utenti meno esperti o più incoscienti. Ad ogni modo, la necessità (o la già citata incoscienza) può spingere a superare queste semplici protezioni e garantire accesso completo (quindi anche in scrittura) nella cartella /system su Android.

Android system

Il requisito fondamentale è ovviamente un telefono ROOTato. A ciò si possono affiancare due strumenti che rendono le operazioni su Android estremamente confortevoli: BusyBox e adb. BusyBox è generalmente presente in tutte le custom rom e comunque è uno dei primi tool che viene installato sullo smartphone una volta ottenuti i permessi di root; fornisce una serie di programmi molto utili in alcune evenienze. Adb, invece, è uno strumento dello SDK Android che permette di comunicare tramite riga di comando con un dispositivo o emulatore Android connesso al pc.

In ogni caso i due tool appena elencati non sono strettamente necessari.

Procedura

  • Per cominciare è necessario abilitare la modalità “Debug USB” su Android
  • Collegare quindi il telefono al pc tramite USB e lanciate una shell con adb attraverso il comando adb shell (in alternativa utilizzate una applicazione come Terminal Emulator per avere una shell direttamente sul vostro dispositivo)
  • A questo punto è necessario individuare la partizione di sistema cercando la riga che contiene /system nell’output di questo comando cat /proc/mounts (potete aiutarvi con un cat /proc/mounts | grep system)
    Un esempio del possibile esito del comando è questo:
    rootfs / rootfs ro,relatime 0 0
    tmpfs /dev tmpfs rw,relatime,mode=755 0 0
    devpts /dev/pts devpts rw,relatime,mode=600 0 0
    proc /proc proc rw,relatime 0 0
    sysfs /sys sysfs rw,relatime 0 0
    tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
    /dev/block/mtdblock4 /system yaffs2 ro,relatime 0 0
    /dev/block/mtdblock6 /data yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/mtdblock7 /cust yaffs2 ro,relatime 0 0
    /dev/block/mtdblock5 /cache yaffs2 rw,nosuid,nodev,relatime 0 0
    /dev/block/vold/179:2 /data/sdext2 ext4 rw,relatime,barrier=1,data=ordered 0 0

    Dove noi saremo interessati alla riga:
    /dev/block/mtdblock4 /system yaffs2 ro,realtime 0 0
    In particolare su questa riga è possibile evidenziare le seguenti informazioni
    /dev/block/mtdblock4 è il device che viene montato
    /system è il punto in cui il device viene montato
    yaffs2 è il tipo di file system
    Molto probabilmente il device sul vostro dispositivo sarà diverso da quello in questo esempio, quindi utilizzate il vostro nel resto della guida
  • Acquisite i permessi di root digitando su, confermando eventuali richieste sul vostro dispositivo
  • Si procede quindi a montare in lettura e scrittura la partizione di sistema con il seguente comando:
    mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system
    apportando le giuste modifiche al blocco e file system in base a quanto ottenuto al passo precedente.

Realizzare uno script

Il mio consiglio è quello di ricavare questi parametri una sola volta e poi scrivere uno script molto semplice per automatizzare l’operazione. Il file potrebbe essere il seguente:

#!/system/bin/sh
# Esempio di mountrw

echo “Remount /system in rw…”
mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system

Salvate poi il file in /system/xbin/ chiamanadolo semplicemente “mountrw” (senza virgolette). Ricordatevi di ottenere i privilegi di superuser prima di richiamare lo script. Da questo momento potrete rimontare comodamente la partizione di sistema con due semplici comandi:

$ su
# mountrw

Analogamente è possibile rimontare la partizione di sistema in sola lettura al termine delle nostre operazioni, al fine di garantire una maggiore sicurezza ed evitare cancellazioni accidentali. Il comando questa volta sarà
mount -o rw,remount -t yaffs2 /dev/block/mtdblock4 /system

Quindi il nostro corrispondente script “mountro” di esempio sarebbe essere il seguente:

#!/system/bin/sh
# Esempio di mountro

echo “Remount /system in ro…”
mount -o ro,remount -t yaffs2 /dev/block/mtdblock4 /system