Powoli zbliżam się do momentu kiedy stary Pentium 60 z FreeDOSem zostanie wysłany na emeryturę, a zastąpi go nowy Asus eeeBox B202 z gentoo linux. Martwiłem się kwestią przetransportowania danych ze staruszka, ale okazuje się, że autorzy FreeDOS stanęli na wysokości zadania i mimo iż system wygląda klasycznie (zabytkowo) to z obsługą nagrywarki CD nie ma większego problemu.
Ku pamięci więc tylko:
Przy okazji, jeśli gdzieś jeszcze taki zabytek stoi, a może sam jeszcze kiedyś postawię to, żeby nie klepać od nowa, codzienne backupy danych w całkiem zgrabnie uporządkowanej formie da się również w DOSie.
backup.bat
echo off
rem BWW Backup Script v3
set exclude=*.exe
cd %temp%
echo | date /d | sed -e "s/.* //" | sed -e "s/\./-/g"> data.txt
set /E date=sed data.txt -e "s/^.....//"
set /E year=sed data.txt -e "s/-..-..$//"
REM jesli nie ma katalogu na backupy to go zrobmy
IF EXIST D:\BACKUP\%year%\keep goto cont
mkdir D:\BACKUP\%year%
touch D:\BACKUP\%year%\keep
mkdir E:\BACKUP\%year%
touch E:\BACKUP\%year%\keep
set exclude=
REM plik nie istnieje, czyli ok
:cont
set filename=%date%.zip
:loop
IF NOT EXIST D:\BACKUP\%year%\%filename% GOTO rest
set exclude=
set /E n=calc387 %n%+1
echo %date%-%n%.zip > data.txt
set /E filename=sed data.txt -e 's/ *//g'
GOTO loop
:rest
rm data.txt
cdd c:\kantor\bww
zip -r -0 D:\BACKUP\%year%\%filename% *.* -x %exclude%
copy D:\BACKUP\%year%\%filename% e:\backup\%year%\*.*
cd \
Skrypt uruchamiany z autoexec.bat zapisuje archiwum na partycji D:\ (i E:\ a co tam :D) w drzewie katalogów:
D:\
BACKUP\
yyyy\
2008\
2009\
mm-dd.zip
01-02.zip
01-03.zip
I kto mówił, że w DOSie się nie da? :-)
Problem: stoi sobie komputer i ma wpięte dwa adaptery USB<>RS232C, do których dalej podpięte są dwa różne urządzenia. Urządzeń rozpoznać się nie da bo do nich się tylko rozmawia z zawrotną prędkością 300 bps. Ale rozmawia się do nich o czymś innym. Trzeba mieć pewność, że rozmawia się do właściwego, bo inaczej nie funguje.
Wodzu zgodnie z zasadami proponował podłączyć, zostawić i założyć, że zawsze porty po odpaleniu kompa pojawią się w tych samych miejscach. To dobre rozwiązanie bo nie trzeba nic robić, a jest duża szansa, że po prostu zadziała. Ale da się lepiej.
Za utworzenie pliku urządzenia odpowiada niejaki UDEV, który robi wiele rzeczy często zahaczających o czary, przez co wariaty się go boją, okazuje się, że chyba nie potrzebnie.
Wtyczki oczywiście zostają wpięte raz na stałe, więc o ile najbardziej chińskie z chińskich adapterów USB<>RS232 Bus 001 Device 034: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port same w sobie są również nie do rozpoznania, o tyle gniazdko
gdzie są wetknięte już owszem. W moim przypadku ona wylądowały w dwóch pierwszych złączach podpiętego do eeeBoxa huba USB.
Cała magia sprowadza się do:
udevadm info -ap /sys/class/tty/ttyUSB0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="pl2303"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.1/1-2.1:1.0':
KERNELS=="1-2.1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="pl2303"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="03"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{modalias}=="usb:v067Bp2303d0300dc00dsc00dp00icFFisc00ip00"
ATTRS{supports_autosuspend}=="1"
(...)
gdzie w pierwszej sekcji interesuje nas: KERNEL=="ttyUSB0", w drugiej nic, a w trzeciej KERNELS=="1-2.1:1.0"
Powstaje więc regułka (gwiazdka zastępuje numer portu!!!):
/etc/udev/rules.d/00-ttyUSB.rules
KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"
tak samo z drugim adapterem i ... no i po prostu działa:
yogi ~ # cat /etc/udev/rules.d/00-ttyUSB.rules
KERNEL=="ttyUSB*", KERNELS=="1-2.1:1.0", NAME="ttyTABLICA"
KERNEL=="ttyUSB*", KERNELS=="1-2.2:1.0", NAME="ttyWYSWIETLACZ"
yogi ~ # ls -l /dev/tty* | grep 23:
crw-rw---- 1 root uucp 188, 0 07-15 23:49 /dev/ttyTABLICA
crw-rw---- 1 root uucp 188, 1 07-15 23:50 /dev/ttyWYSWIETLACZ
Okazuje się, że nie taki UDEV straszny jak sobie wariat wyobrażał, a przy okazji bonus bo nie trzeba nawet pamiętać co było wpięte jako ttyUSB0 bo widać po nazwie urządzenia.