Home Tecnica Programmazione busybox & Android: la command line facile

In evidenza

SMAU a Bologna con Research to Business

SMAU a Bologna con Research to Business

Il 6 e 7 giugno il Roadshow Smau Business torna a far tappa al Padiglione 33 della Fiera di Bologna e...
Gli articolisti del Portale

Gli articolisti del Portale

Abbiamo deciso di dare più visibilità a tutti coloro che hanno pubblicato articoli per noi, questo perché...
SMAU festeggia il suo quinto anno nel NordEst a Padova

SMAU festeggia il suo quinto anno nel NordEst a Padova

Il 18 e 19 aprile al padiglione 5 di Padova Fiere si terrà la prossima tappa di SMAU Business Roadshow. All'evento...
SMAU risale l’Italia e arriva a Roma

SMAU risale l’Italia e arriva a Roma

Il 21 e 22 marzo nella Nuova Fiera di Roma si terrà la prossima tappa di SMAU Business Roadshow. L'evento...

Bandi di Concorso

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Avviso per incarico ad ingegnere informatico alla Provincia di Bergamo

Nell'ambito del progetto denominato "SOS badanti: la rete provinciale di sportelli per assistenti e collaboratori familiari” nell'ambito del programma "SAP - Servizi alla Persona" è stato pubblicato la Provincia di Bergamo ha pubblicato l'avviso per il reclutamento di una unità per incarico di...

21 Mag 2012 - Letture:1

Esperto di servizi e tecnologie cloud al Digit PA

Procedura comparativa per il conferimento di un incarico di collaborazione coordinata e continuativa per un profilo senior di “Esperto di servizi e tecnologie cloud”, nell’ambito del progetto europeo “Open Dai” presso l' Ente nazionale per la digitalizzazione della Pubblica Amministrazione...

18 Apr 2012 - Letture:34

Selezione per addetto servizi informatici all'Autorità Portuale di Brindisi

Avviso di selezione pubblica per titoli e prova orale per l’assunzione di n. 1 “addetto ai servizi informatici”, a tempo pieno ed determinato triennale, previo periodo di prova, da inquadrare nell’Area Amministrativa. (Inquadramento al III Livello del C.C.N.L. dei Lavoratori...

12 Feb 2012 - Letture:435

Concorso pubblico per informatico alla Corte dei Conti

E' indetto un concorso pubblico, per   esami,   per   il reclutamento di tre unità di informatici da inquadrare nella III area, fascia retributiva F1, da destinare agli Uffici della Corte dei Conti con sede in Roma. Requisiti: laurea triennale in scienze e...

05 Feb 2012 - Letture:306

Istruttore informatico L.68/1999 al Comune di Potenza

Concorso pubblico, per esami, per la copertura di n. 2 posti di Istruttore Informatico, categoria C, posizione economica C1, a tempo pieno e indeterminato, con riserva assoluta alle categorie dilavoratori di cui all'art. 1 della legge n. 68/1999 (norme per...

21 Gen 2012 - Letture:244

Senior Business Consultant presso Lombardia Informatica

Selezione per figura Senior Business Consultant presso Lombardia Informatica. Il collaboratore dovrà fornire consulenza strategica e di business sulle tematiche verticali della Socio-Sanità. Requisiti di ammissione: Laurea in Ingegneria, Economia e Commercio o Scienze dell’Informazione; Percorsi di formazione professionale in ambito sanitario e socio-sanitario, su...

11 Gen 2012 - Letture:284

Bando progetto TAG (Toscana Area Giovani) per giovani talenti digitali

UPI Toscana ha indetto un avviso pubblico per la selezione di 20 giovani (2 per ciascuna delle 10 province della Toscana), da impiegare come formatori all'interno del Progetto TAG (Toscana Area Giovani). Il bando è finalizzato a valorizzare al meglio i...

03 Gen 2012 - Letture:271

I più attivi

Dati e punteggi dell'ultimo anno

Giovanna Casamassima Giovanna Casamassima
47 articoli
16,501 punti totali
Rodolfo Giometti Rodolfo Giometti
49 articoli
5,153 punti totali
Vittorio D'Aversa Vittorio D'Aversa
33 articoli
3,445 punti totali
Fulvio Lucchetti Fulvio Lucchetti
9 articoli
0,279 punti totali
Luigi Carbone Luigi Carbone
10 articoli
0,262 punti totali

Ci hanno visitato

Oggi:1284
Ieri:2110
Totali (14/04/09):1170459

I nostri numeri

Articoli pubblicati: 552
Iscritti al portale: 768
Iscritti all'Elenco: 184
Iscritti ML Discussioni: 351
Iscritti ML Articoli: 30
Iscritti ML Lavoro: 166
 

Multistrap: come ti creo un rootfs Debian dal nulla

Una volta c'era debootstrap, un tool fantastico che permetteva di creare un root...

Lion desktop: finalmente una distribuzione mirata alle aziende!

Chi è abituato a lavorare con Linux, ed in particolare ha provato a lavorare con...

Sabayon Linux 5.4 (32 e 64 bit)

E' stata rilasciata online la nuova versione 5.4 di Sabayon Linux, una tra ...

Cloud Money

Discorrendo con un collega di cloud computing, si è finito, come al solito, a pa...

ASUS U36SD il notebook in soli 19mm

La concorrenza al più blasonato della “mela” si fa agguerrita specie nell'ultimo...

Sviluppare codice per Arduino dalla command line

Arduino Uno è un micro controllore basato su CPU ATmega328; si alimenta via alim...

Installare strace su Android

Quando si programma è importante avere buoni tool di debug e uno dei più importa...

Come creare un NFS server ridondante

Quelli che mi conoscono sanno che il mio ambito lavorativo è nei sistemi embedde...

Boot from SAN

Intendiamoci, non è l’ultima briciola tecnologica caduta da un banchetto alla NA...

Android: se non hai il telefono usa l'emulatore!

In questi giorni sto valutando di comprare un cellulare basato su Linux. Inizial...

I-Memo: le password personali sempre con te

Prodotto dalla MensTecnica, una giovane azienda della Basilicata fondata nel 200...

PyGTK su N900

Come programmatore avere un cellulare che in pratica è un computer (oramai il 10...

Socat: quando i dati passano via rete

Lavorando coi sistemi embedded molte volte mi capita di dovermi arrangiare su di...

Snom 870: il telefono con Linux

Definirlo solo telefono è sicuramente riduttivo, infatti lo Snom 870 è sicuramen...

I dati e le loro anomalie nascoste

La motivazione per questo articolo nasce dalla crescente problematica di gestion...

Come saltare il proxy «blocca-tutto» aziendale

Mi capita spesso, ma non sempre, di andare da dei miei clienti e non potermi con...

Openembedded: la distribuzione «ristretta» per Linux

Quando le risorse di un sistema sono limitate non è possibile usare una distribu...

Installazioni di Linux su sistemi non convenzionali

Un'ottica convenzionale vede l'informatica come un insieme di applicazioni e sis...

Universal USB Installer 1.8.04 e Ubuntu Linux 10.10

Rilasciata il 10.10(.2010) la nuova versione di Ubuntu Linux (la data corrispond...

Aggiungere programmi all'N900 con Maemo SDK

Abbiamo già visto come sia facile installare nuove applicazioni sul Nokia N900, ...

Autenticarsi con la pen drive

La pen drive è ormai diventata come il cellulare, impossibile non averla, ma sie...

GNU readline: un tool indispensabile per la linea di comando

Chiunque di voi abbia avuto a che fare con la linea di comando avrà senz'altro a...

TurnKey Linux: accendi e vai!

Quanto tempo occorre per installare e configurare una macchina LAMP (Linux, Apac...

ettercap: il man-in-the-middle facile

Troppo spesso mi rendo conto che molti considerano la rete aziendale o quella ...

Perché cross compilare quando si può compilare nativamente?

Lavorando con architetture diverse mi trovo spesso a dover utilzzare uno stesso ...

Il telefono… la tua voce!

Era lo slogan pubblicitario della Telecom di un po’ di anni fa. Certo, al concet...

AccessPoint: la scelta ottimale del canale di trasmissione

Realizzare una rete Wireless outdoor (ma anche indoor) pone il problema della sc...

Forno a microonde: analisi emissioni EME

Nell'immaginario collettivo c'è una forte paura per i danni che posso generare s...

(in)sicurezza informatica

L'incremento nell'uso del computer ha portato con se una diversa concezione di s...

Multi puntatore su Ubuntu 10.4: ecco come

Tempo fa ebbi modo di dare un'occhiata al progetto MPX per un cliente. La cosa n...

L'SMS autoprodotto!

Tempo fa sulla mailing list di CFI ho provato a lanciare l'idea di effettuare un...

F-Droid, e il FOSS su Android è servito!

Come Software Libre Evangelist mi son spesso trovato ad incoraggiare l'uso del s...

Backup mail server: quando il mail server non è raggiungibile

Se avete il mail server in proprio potrebbe succedere che questo non sia raggiun...

Nvidia 295.33, ecco i nuovi driver per linux versione 3.3

L'annuncio è di qualche giorno fa, Nvidia rilascia i nuovi driver 295.33 con sup...

busybox & Android: la command line facile

Nei precedenti articoli abbiamo visto due tecniche per aggiungere nuovi programm...

Architettura di una trading room

La trading room o sala mercati è il luogo dove vengono effettuate le operazioni ...

Google +1: il «nemico» del «mi piace» di Facebook

Il tanto atteso nemico del "mi piace" targato Facebook è arrivato, il colosso de...

Clonare una macchina vera in 30 minuti con VirtualBox

Essendo uno sviluppatore mi son reso conto che la virtualizzazione di una macchi...

OpenWRT: la distribuzione piccola e versatile

In queste ultime settimane ho avuto modo di vedere da vicino OpenWRT, una distri...

Cloud Computing: cos'è veramente?

Da qualche tempo si sente sempre più parlare di Cloud Computing. Sembra che ques...

Generare un file pieno di 0xff

Per generare in file da 16Kbyte pieno di zeri su di un sistema UNIX/GNU-Linux si...

Grep e Strings due giganti di Linux

Il tempo libero serve anche a sperimentare e quando si ha la passione per la com...

IPhone recupero file: un gioco di squadra!

Un giorno l'amico Armando Buzzanca mi chiama perchè deve recuperare una no...

Controllare MAME con Wiimote su N900!

Ecco un'altra dimostrazione delle potenzialità di questo telefono (se vogliamo c...

Generare un file da 10GB in 2 millisecondi!

Chi ha a che fare con le macchine virtuali o deve generare delle immagini di fil...

Programmare in C sull'N900

In questo articolo vedremo come sia semplice programmare in C sull'N900. In part...

Odroid: la piattaforma di gioco libera

Si chiama Odroid ed e basata su Android, è la prima piattaforma di gioco interam...

Tenere i servizi sotto controllo con Monit

In questi giorni mi è capitato di dover risolvere un problema per un mio cliente...

Mageia 1 alpha1 è tra noi

Finalmente è stata rilasciata la tanto attesa versione alpha1 principalmente riv...

Come gestire una presentazione con il Wiimote

Capitandomi spesso si tenere conferenze e workshop mi trovo sempre il problema d...

Intervista esclusiva a Mageia Linux

La Presidente dell'Associazione MAGEIA.ORG, Anne Nicolas, in questa intervi...

Sicurezza informatica: safety, dependability, security

La sempre maggiore diffusione delle tecnologie ha profondamente rivoluzionato la...

Cifratura wireless: TKIP vs AES

Una delle domande più frequenti di chi intende implementare una rete Wireless è...

Installare Linux su una USB key: ecco come!

L’installazione  e l'avvio di una distribuzione Linux Live da un supporto U...

Integrazione Webmaster Tool. Google Analytics, le ultime novità

Google non finisce mai di stupirci, ma soprattutto è inarrestabile sull'implemen...

Linaro, la no-profit che produce distribuzioni Linux/ARM

Il progetto Linaro presentato nel 2010 da colossi del calibro di Freescale Semic...

Android-x86: quando il drone sbarca sui PC

Chi pensa che Andoird abbia vita bere farà bene a ricredersi perché, oltre alle ...

Linutop4 PC

Il produttore francese Linutop, con sede a Parigi, ha annunciato il nuovo modell...

Implementare una LIM con Linux

Come promesso rieccomi qui per illustrare come realizzare una LIM (che ricordo s...

Come ti controllo i tassi di interesse con Linux

In questi giorni sto cercando di fare una surruga per il mutuo di casa mia. Tra ...

busybox & Android: la command line facile Stampa E-mail
(1 voto, media 5.00 di 5)
Area Tecnica - Programmazione
Scritto da Rodolfo Giometti   
Sabato 14 Agosto 2010 08:06
Articolo letto 4234 volte

Nei precedenti articoli abbiamo visto due tecniche per aggiungere nuovi programmi C su di un sistema Android (l'emulatore nello specifico); abbiamo visto come compilare un programma nativamente con la toolchain di Android e come compilare un programma con una toolchain esterna.

In questo articolo cercherò di installare una serie di programmi di utilità per semplificarmi la vita quando utilizzo la command line, in particolare vorrei installare una shell un po' più completa di quella di default, un editor di file (io uso vi) ed altri programmi di utilità come awk, find, ecc..

Una soluzione semplicistica potrebbe essere quella di prendersi i sorgenti di ogni tool che desideriamo avere e ricompilarseli uno per uno... ma questo, oltre ad essere un lavoraccio, potrebbe creare dei problemi nel caso decidessimo di ricompilare tutti i programmi in maniera statica: sicuramente la via più veloce ma quella che occuperebbe di sicuro troppo spazio nel filesystem.

La soluzione più efficiente e semplice, in questo caso, è quella di utilizzare busybox che include al suo interno tutti i programmi di utilità che un amante della command line può utilizzare.

Cosa è

Busybox infatti è un insieme di programmi, tutti contenuti in uno stesse eseguibile, che mimano il comportamento dei rispettivi tool che si trovano in una normale distribuzione GNU/Linux.

Se avete mai avuto modo di usare la command line conoscerete senz'altro i programmi ls, ps, grep, find, awk, ecc., bene busybox non è altro che un programma unico che, a seconda del nome con cui viene invocato, si comporta come il tool equivalente. Per fare un esempio, se voi chiamate il file che contiene il programma busybox con il nome ls, allora quando lo lanciate otterrete lo stesso output del comand ls standard (o comunque un outout che ci si avvicina parecchio), stessa cosa se gli date il nome ps o grep, ecc..

Il modo per ottenere questo funzionamento è banale per chi conosce il C (e non lo affronto qui), ma quello che ognuno di voi magari si sta chiedendo è: «ma in questo modo come faccio ad avere tutti i programmi in una sola volta? Ogni volta gli devo cambiare nome?».

Ovviamente la risposta è no, e il come questo venga risolto è ancora banale per chi conosce i sistema UNIX: si usano i link simbolici. Un link simbolico non è altro che un file che punta ad un altro, ogni qual volta che un programma tenta di accedere ad uno di questi file, in realtà è come se accedesse al file puntato. Quindi, per risolvere il nostro problema con busybox, basta che il file eseguibile chiamato busybox, e che contiene al suo interno tutto il codice dei tool che vogliamo usare, venga di volta in volta puntato da un link simbolico avente il nome del comando da emulare.

Quindi se faccio:

$ ln -s busybox ls
$ ./ls

otterrò in uscita l'output del comando ls pur eseguendo il comando busybox.

Compilare i sorgenti

Bene, chiarito cosa è e cosa fa busybox vediamo come compilarlo per il nostro sistema Android. Io ho scaricato la versione 1.17.1 e l'ho esplosa:

$ tar xfj busybox-1.17.1.tar.bz2
$ cd busybox-1.17.1

Poi, con il comando make menuconfig (lo stesso che si usa per Linux), configuro il pacchetto. Dovreste ottenere un menu dal quale è possibile scegliere quali applicazioni si desiderano compilare dentro busybox ed alcune opzioni di funzionamento e/o compilazione. Fate le vostre scelte e quindi salvate la configurazione.

Prima di iniziare a compilare si vede subito, guardando il sistema di compilazione di busybox, che non sarà molto agevole utilizzare la compilazione nativa di Android, quindi utilizzeremo una compilazione statica. Da notare che, in questo caso, ciò non è affatto un problema perché, pur essendo programmi diversi, questi stanno tutti dentro un unico file, quindi l'overhead dovuto alla compilazione statica è sempre quello di un programma solo.

Per compilare staticamente dobbiamo andare nel menu Busybox Settings -> Build Options e ripostare le impostazioni seguenti:

[*] Build BusyBox as a static binary (no shared libs) 
[ ] Force NOMMU build (NEW)
[*] Build with Large File Support (for accessing files > 2 GB) (NEW)
(arm-linux-gnueabi-) Cross Compiler prefix
()  Additional CFLAGS (NEW)

Quindi diamo il solito make. Una volta finito dovremmo ottenere:

$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, stripped

Ok, ora basta copiare il file nel nostro sistema e provarlo:

$ adb push busybox /data/local/bin/
2158 KB/s (1911836 bytes in 0.864s)
$ adb shell
# cd /data/local/bin/
# chmod 777 busybox
# ./busybox
BusyBox v1.17.1 (2010-08-11 20:22:20 CEST) multi-call binary.
Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
or: function [arguments]...

BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable.  Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as.

Currently defined functions:
[, [[, acpid, addgroup, adduser, adjtimex, arp, arping, ash, awk,
basename, beep, blkid, bootchartd, brctl, bunzip2, bzcat, bzip2, cal,
cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw,
cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod,
devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname,
dos2unix, du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,
envdir, envuidgid, ether-wake, expand, expr, fakeidentd, false, fbset,
fbsplash, fdflush, fdformat, fdisk, fgconsole, fgrep, find, findfs,
flock, fold, free, freeramdisk, fsck, fsck.minix, fsync, ftpd, ftpget,
ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm,
head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig,
ifdown, ifenslave, ifplugd, ifup, inetd, init, insmod, install, ionice,
ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel,
kbd_mode, kill, killall, killall5, klogd, last, length, less, linux32,
linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname,
logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb,
lzcat, lzma, lzop, lzopcat, makedevs, makemime, man, md5sum, mdev,
mesg, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mkfs.ext2, mkfs.minix,
mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more,
mount, mountpoint, mt, mv, nameif, nc, netstat, nice, nmeter, nohup,
nslookup, ntpd, od, openvt, passwd, patch, pgrep, pidof, ping, ping6,
pipe_progress, pivot_root, pkill, popmaildir, poweroff, printenv,
printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink,
readprofile, realpath, reboot, reformime, renice, reset, resize, rev,
rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run-parts, runlevel,
runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch,
setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh,
sha1sum, sha256sum, sha512sum, showkey, slattach, sleep, smemcap,
softlimit, sort, split, start-stop-daemon, stat, strings, stty, su,
sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl,
syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp,
tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true,
tty, ttysize, tunctl, udhcpc, udhcpd, udpsvd, umount, uname, unexpand,
uniq, unix2dos, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode,
uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget,
which, who, whoami, xargs, xz, xzcat, yes, zcat, zcip

#

Perfetto! Funziona.

Abilitare i comandi

A questo punto dobbiamo creare i link simbolici dei comandi che vogliamo usare. Busybox, in realtà, funzionerebbe anche senza; è possibile infatti simulare il comando ls con:

# ./busybox ls -l /
total 130
drwxrwx---    1 1000     2001          2048 Jul 15 13:19 cache
dr-x------    2 0        0                0 Aug 11 18:37 config
lrwxrwxrwx    1 0        0               17 Aug 11 18:37 d -> /sys/kernel/debug
drwxrwx--x    1 1000     1000          2048 Jul 15 13:20 data
-rw-r--r--    1 415      50             118 Aug  6 09:43 default.prop
drwxr-xr-x   10 0        0             2000 Aug 11 18:37 dev
lrwxrwxrwx    1 0        0               11 Aug 11 18:37 etc -> /system/etc
-rwxr-x---    1 415      50          103112 Aug  6 09:43 init
-rwxr-x---    1 415      50            1677 Aug  6 09:43 init.goldfish.rc
-rwxr-x---    1 415      50           12231 Aug  6 09:45 init.rc
dr-xr-xr-x   52 0        0                0 Jan  1  1970 proc
drwx------    2 0        0                0 Jan 28  2010 root
drwxr-x---    2 415      50               0 Aug  6 09:43 sbin
d---------    2 1000     1000             0 Aug 11 18:37 sdcard
drwxrwxrwt    2 0        0               40 Aug 11 18:37 sqlite_stmt_journals
drwxr-xr-x   13 0        0                0 Jan  1  1970 sys
drwxr-xr-x    1 0        0             2048 May  6 16:16 system

ma è chiaro che avere il comando ls invece che mettere sempre il prefisso busybox è più pratico! Per ottenere questo, come già detto, basta dare il comando:

# ln -s busybox ls

Ma per crearli tutti in una volta usiamo il comando:

# /data/local/bin/busybox --install -s /data/local/bin/

Resta ancora il fatto però che dobbiamo sempre scrivere il path completo per eseguire un comando e questo perché la variabile PATH non è correttamente impostata:

# echo $PATH
/sbin:/system/sbin:/system/bin:/system/xbin

Per risolvere questo problema basta allora usare il comando:

# export PATH=/data/local/bin:$PATH

Ora scrivendo semplicemente comando voluto verrà eseguito quello di busybox invece di quello fornito nativamente da Android. Ad esempio, se diamo il comando sh otteniamo la shell di busybox che, rispetto a quella nativa di Android, ha molte più funzionalità, in primis l'auto completamento dei comandi.

Modificare init

Direi che, a questo punto, il risultato è buono: abbiamo una pletora di nuove utility da utilizzare dalla command line; ma possiamo fare ancora di più! Possiamo, ad esempio, far sì che il nostro sistema imposti automaticamente al boot la variabile PATH in modo da non doverla reimpostare tutte le volte.

Per fare tutto ciò occorre però modificare il file init.rc di Android.

Il file init.rc viene letto dal sistema al boot ed è il responsabile di tutte le impostazioni e dello start up dei programmi di utilità. La sua sintassi è semplice e lascio quindi il lettore curioso il compito di interpretarlo; io mi limiterò solo ad illustrare le modifiche da fare in modo di ottenere quello che ci siamo prefissi.

Una nota: le modifiche che andrò a fare da ora in poi sono riferite solo all'emulatore poiché quest'ultimo è il mio unico sistema di test, nel caso aveste un vero e proprio telefonino con su Android dovrete studiare da soli il sistema per come fare le modifiche necessarie.

Osserviamo subito che il file init.rc si trova nella root directory e che quest'ultima è montata via rootfs:

# mount      
rootfs / rootfs ro 0 0
...

Quindi utilizzare il nostro nuovo fiammante vi sul file non ci risolve il problema perché al nuovo avvio della macchina le impostazioni verrebbero perse: dobbiamo allora modificare la partizione di flash che mantiene il ramdisk iniziale.

Come già esplicitato prima io uso l'emulatore ed esso memorizza il ramdisk del rootfs in una directory diversa a seconda del target usato nell'emulatore. Quando ho creato l'emulatore ho scelto il target 7, infatti:

$ cat ~/.android/avd/my_phone.ini
target=android-7
path=/home/giometti/.android/avd/my_phone.avd

quindi, avendo installato l'SDK in /opt/android-sdk-linux_86 il ramdisk si trova nella directory:

$ cd /opt/android-sdk-linux_86/platforms/android-7/images
$ ls

NOTICE.txt  kernel-qemu*  ramdisk.img  system.img  userdata.img 

Il formato del file ramdisk.img è un semplice archivio cpio compresso, quindi per modificarlo prima va esploso:

$ gunzip -S.img ramdisk.img
$ mkdir ramdisk.d && cd ramdisk.d
$ cpio -i -F ../ramdisk
494 blocks

Ora nella directory ramdisk.d abbiamo tutti i file del ramdisk:

$ ls         
data/          dev/   init.goldfish.rc*    proc/  sys/
default.prop  init*  init.rc*        sbin/  system/

modifichiamo il file init.rc aggiungendo la directory /data/local/bin nella definizione della variabile PATH come segue

# setup the global environment
    export PATH /data/local/bin:/sbin:/system/sbin:/system/bin:/system/xbin

Ora basta ricostruire il file immagine del ramdisk con il nuovo contenuto. Prima creiamo il file della lista dei file del ramdisk (serve per cpio):

$ cpio -t -F ../ramdisk > ../ramdisk.list

e quindi ricreiamo il ramdisk:

$ cat ../ramdisk.list | cpio -o -H newc -O ../ramdisk
494 blocks
$ cd ..
$ gzip -S.img ramdisk

In fine facciamo reboot. Una volta ripartiti se ci ricolleghiamo al sistema ed esaminiamo il contenuto della variabile PATH:

# echo $PATH
/data/local/bin:/sbin:/system/sbin:/system/bin:/system/xbin

abbiamo ottenuto quello che volevamo: ora possiamo lanciare i nuovi comandi di busybox direttamente scrivendone il nome!

 
 

In primo piano

Simons Voss: un mondo senza chiavi

Simons Voss: un mondo senza chiavi

Il sistema di gestione e di controllo degli accessi 3060 si presenta come un’alternativa con enormi vantaggi...
Pubblicità mirata dei prodotti

Pubblicità mirata dei prodotti

Hai un prodotto o un servizio da pubblicizzare? Fallo su consulenti-ict.it! Pubblicizzare un prodotto...
Recensioni sul Portale

Recensioni sul Portale

Hai un prodotto hardware/software o un libro riguardante uno dei temi dell'ICT? Vuoi farlo conoscere...

Offerte di lavoro

Visualizza Topic »

Eventi

Non ci sono eventi in programma
Maggio 2012
D L M M G V S
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
Giugno 2012
D L M M G V S
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Sondaggi

busyCaricamento Sondaggio...