Hallo zusammen,
aus meiner Apple Zeit habe ich noch ein Superdrive (USB CD/DVD-Brenner) rumliegen. Dieses habe ich nun unter FreeBSD in Betrieb genommen, was aber nicht ganz reibungslos verlaufen ist. Von meinem Linux-Rechner weiß ich, dass das Superdrive erst mal mit einer magischen Bytefolge entsperrt werden muss, bevor es an einem nicht Apple-Rechner verwendet werden kann. Gelöst is das Ganze dort mit einer .rules Datei, die folgende Zeile enthält:
Diese Regel habe ich nun nach FreeBSD in /usr/local/etc/devd/applesd.conf portiert:
Das aufgerufene Script applesd.sh schreibt anschließend die magic bytes ins Superdrive:
Beim Script musste ich etwas improvisieren, da ich auf zwei Probleme gestoßen bin:
Da ich sowieso nie mehr als ein CD/DVD-Laufwerk an meinen Rechner anschließe, habe ich das Device 'cd0' einfach direkt ins Script geschrieben. Zum Lösen des Timing Problems dient eine simple 'sleep' Anweisung. Ohne diese klappt es nicht, offenbar dauert es etwas bis das Laufwerk an den Bus angehängt und anschließend das Device angelegt wird.
Was mich nun brennend interessieren würde: wie könnte man so etwas professioneller lösen? Habt ihr so etwas oder was ähnliches schon mal gemacht?
Hier noch die Ausgabe von devd zum 'attach event':
und die Device-Liste von camcontrol:
aus meiner Apple Zeit habe ich noch ein Superdrive (USB CD/DVD-Brenner) rumliegen. Dieses habe ich nun unter FreeBSD in Betrieb genommen, was aber nicht ganz reibungslos verlaufen ist. Von meinem Linux-Rechner weiß ich, dass das Superdrive erst mal mit einer magischen Bytefolge entsperrt werden muss, bevor es an einem nicht Apple-Rechner verwendet werden kann. Gelöst is das Ganze dort mit einer .rules Datei, die folgende Zeile enthält:
Code:
ACTION=="add", ATTRS{idProduct}=="1500", ATTRS{idVendor}=="05ac", DRIVERS=="usb", RUN+="/usr/bin/sg_raw /dev/$kernel EA 00 00 00 00 00 01"
Diese Regel habe ich nun nach FreeBSD in /usr/local/etc/devd/applesd.conf portiert:
Code:
notify 100 {
match "system" "USB";
match "subsystem" "DEVICE";
match "type" "ATTACH";
match "vendor" "0x05ac";
match "product" "0x1500";
action "exec /usr/local/bin/applesd.sh";
};
Das aufgerufene Script applesd.sh schreibt anschließend die magic bytes ins Superdrive:
Code:
#!/bin/sh
sleep 1
camcontrol cmd cd0 -c "EA 00 00 00 00 00 01"
Beim Script musste ich etwas improvisieren, da ich auf zwei Probleme gestoßen bin:
- die devd-Nachricht enthält keine direkt verwertbaren Informationen zur device-id, die ich als Adresse für camcontrol verwenden könnte
- wenn ich das camcontrol Kommando direkt als 'action' angebe, führt dieses nicht zum Erfolg, da es offenbar zu früh kommt
Da ich sowieso nie mehr als ein CD/DVD-Laufwerk an meinen Rechner anschließe, habe ich das Device 'cd0' einfach direkt ins Script geschrieben. Zum Lösen des Timing Problems dient eine simple 'sleep' Anweisung. Ohne diese klappt es nicht, offenbar dauert es etwas bis das Laufwerk an den Bus angehängt und anschließend das Device angelegt wird.
Was mich nun brennend interessieren würde: wie könnte man so etwas professioneller lösen? Habt ihr so etwas oder was ähnliches schon mal gemacht?
Hier noch die Ausgabe von devd zum 'attach event':
Code:
!system=USB subsystem=DEVICE type=ATTACH ugen=ugen0.3 cdev=ugen0.3 vendor=0x05ac product=0x1500 devclass=0x00 devsubclass=0x00 sernum="KZ8EC2L2638 " release=0x0203 mode=host port=1 parent=ugen0.1
und die Device-Liste von camcontrol:
Code:
# camcontrol devlist
<Apple SuperDrive 2.03> at scbus0 target 0 lun 0 (cd0,pass0)