Sodala ...
Ist deshalb so lange geworden, weil ich für deinen Fall, dass usbserial schon läuft und von "jemand" Anderem als ftdi_sio verwendet wird, die module entsprechend entferne.
Außerdem wird überprüft ob ftdi_sio schon geladen ist, damit bei einem Neustart des LBS oder Edomis, ohne einem Neustart der ganzen Maschine, nichts mehr gemacht wird, damit nichts durcheinander gerät.
Ich hab mir außerdem noch 2 neue Eingänge für Vendor und Product ID definiert. Muss man natürlich nicht, dann einfach entsprechend in den ersten beiden Zeilen hardcoden.
Klappt bei mir wunderbar. Hier der entsprechende Log-Auszug. Erst wird noch gelesen, dann der Neustart des Servers, daher mittendrin Loading ftdi_sio module...
restart.JPG
Eingefügt habe ich den Code in Zeile 105 des LBS, also nach dem check, ob port und baudrate gesetzt sind, aber vor dem Exec call.
Hoffe das hilft und freue mich auf Feedback!
LG,
Christian
PHP-Code:
$vendorID = $args[11]['value'];
$productID = $args[12]['value'];
// if ftdi_sio module was already loaded, do nothing
if (!shell_exec("lsmod | grep ftdi_sio")) {
// check if usbserial kernel module loaded
$response = shell_exec("lsmod | grep usbserial");
if ($response) {
writeToCustomLog ("LBSLBSID_${id}", "INFO:", "usbserial kernel module is loaded.");
// find out by whom usbserial is used
$usedBy = end(explode(" ", $response));
writeToCustomLog ("LBSLBSID_${id}", "INFO:", "Unloading kernel modules ...");
// unload modules
shell_exec("rmmod " . $usedBy);
shell_exec("rmmod usbserial");
}
// load ftdi_sio
writeToCustomLog ("LBSLBSID_${id}", "INFO:", "Loading ftdi_sio module ...");
shell_exec("modprobe ftdi_sio");
// create file and fill with vendor and product id
writeToCustomLog ("LBSLBSID_${id}", "INFO:", "Writing vendor and product id to new_id ...");
shell_exec("echo " . $vendorID . " " . $productID . " > /sys/bus/usb-serial/drivers/ftdi_sio/new_id");
}
else {
writeToCustomLog ("LBSLBSID_${id}", "INFO:", "ftdi_sio already loaded, continuing ...");
}
Ist deshalb so lange geworden, weil ich für deinen Fall, dass usbserial schon läuft und von "jemand" Anderem als ftdi_sio verwendet wird, die module entsprechend entferne.
Außerdem wird überprüft ob ftdi_sio schon geladen ist, damit bei einem Neustart des LBS oder Edomis, ohne einem Neustart der ganzen Maschine, nichts mehr gemacht wird, damit nichts durcheinander gerät.
Ich hab mir außerdem noch 2 neue Eingänge für Vendor und Product ID definiert. Muss man natürlich nicht, dann einfach entsprechend in den ersten beiden Zeilen hardcoden.
Klappt bei mir wunderbar. Hier der entsprechende Log-Auszug. Erst wird noch gelesen, dann der Neustart des Servers, daher mittendrin Loading ftdi_sio module...
restart.JPG
Eingefügt habe ich den Code in Zeile 105 des LBS, also nach dem check, ob port und baudrate gesetzt sind, aber vor dem Exec call.
Hoffe das hilft und freue mich auf Feedback!
LG,
Christian
Kommentar