2010-08-21 16 views
6

La busybox è disponibile nel modulo di libreria condivisa? Vorrei utilizzare le app individuali a livello di codice anziché utilizzare system(). Ho sentito parlare di libbusybox e libbb ma non ho trovato alcuna documentazione.La busybox è disponibile nel modulo di libreria condivisa?

+1

Non utilizzare il sistema(). execve() e gli amici hanno meno probabilità di fare la cosa sbagliata. –

risposta

0

Se si dispone di un piccolo sistema incorporato in cui è importante, è possibile collegare la propria app nel file binario busybox, quindi è possibile chiamare le sue funzioni senza alcun linker dinamico.

In caso contrario, utilizzare system() o alcuni fork/exec combo.

È improbabile che tu voglia chiamare le utility così spesso che le prestazioni contano.

6

Esiste una libreria busybox in un modulo condiviso denominato libbusybox(.so), è sufficiente attivarlo durante la creazione di menuconfig. Una volta compilato, sarà disponibile nella cartella 0_lib. In questa libreria hai una bella piccola funzione chiamata int lbb_main(char **argv).

Quello che dovete fare nel codice è qualcosa di simile:

extern int lbb_main(char **argv); 

int main() 
{ 
    char* strarray[] = {"ifconfig",0}; 
    lbb_main(strarray); 

    return 1; 
} 

Si potrebbe importare libb.h, ma che non ha funzionato per me, perché ho avuto molti errori.

Dopo che devi compilare usando qualcosa come gcc -o code code.c -Lpath_to_0_lib_fodler -lbusybox e il gioco è fatto!

Per intercettare l'output, è necessario ridefinire printf e chiamate simili, ma è chiaramente utilizzabile utilizzando le macro di soemthing come #define printf(...) code' in libb.h '.

Si potrebbe persino generare la shell di busybox che non utilizza fork o sistema, ma che non funziona ancora bene.

+0

Se '# include" libb.h "' causa "molti errori", c'è un problema serio da qualche parte. Sarebbe bello sapere di più a riguardo. Non dovresti assolutamente dover ridichiarare le funzioni della libreria da solo; ecco a cosa servono le intestazioni. –

Problemi correlati