Después de conectar un adaptador de red USB al teléfono, puedo configurarlo usando ifconfig:
ifconfig eth0 up 192.168.1.2
El problema es que eth0 no está disponible hasta que se conecta el dispositivo USB. ¿Cómo se puede almacenar la configuración de red o aplicarla tan pronto como se monte?
¿O hay alguna forma de establecer la configuración en el proceso de compilación del kernel?
Sé que esto normalmente se define en ifcfg-eth0
que se puede encontrar en /etc/sysconfig/network-scripts/
o /etc/network/interfaces
pero parece que Android no tiene esto. Como usamos netcfg en Android, busqué el manual de perfiles de netcfg pero /etc/network.d/${profile_name}
tampoco existe.
Creo que esto funcionará:
Además /init.rc
_
service ethernet /eth0.sh
y crear/eth0.sh
#!/system/bin/sh
netcfg eth0 up 192.168.0.2
Todavía tengo problemas para encadenar el ramdisk, pero eso debería funcionar.
Consulte http://elinux.org/Android_Networking
No pude cambiar el ramdisk, así que hice una aplicación simple que ejecuta el comando netcfg después del arranque y después de conectar el dispositivo USB.
Estos son los puntos clave para esto:
<manifest ...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.USB_PERMISSION" />
<application ... >
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
</receiver>
...
y la función sudo en el receptor:
public static void sudo(String...strings) {
try{
Process su = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
for (String s : strings) {
outputStream.writeBytes(s+"\n");
outputStream.flush();
}
outputStream.writeBytes("exit\n");
outputStream.flush();
try {
su.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
outputStream.close();
}catch(IOException e){
e.printStackTrace();
}
}