Usb упражнение
Contents
Теория USB
Задачи за изпълнение: Задачите се изпълняват на виртулна машина предварително подготвена от ръководителя на приложението.
0. Включване на usb устройство към виртуалната машина.
1. Да се проверят наличните usb устройства:
- Иползвайте инструмента lsusb
2. Да се разгледат параметрите на различни USB устройства като се определят
- текущ адрес на устройството
- брой на конфигурациите
- заявена мощност
- брой на интерфейсите
- типа на устройство (class)
- конфигурирани канали
- тип предаване на данни
lsusb -s Bus#:Device# -v|less
3. С wireshark да се проследи предаване на данни на usb устройството.
- активира се usbmon
modprobe usbmon
- стартира се wireshark
wireshark
4. Да се наблюдават събитията при включване на usb устройство с udevadm
udevadm monitor
5. Да се разгледат параметрите на устройството
udevadm info --attribute-walk --path=...
6. Да се конфигурира събитие при включване на usb устройство.
Изпълнение на скрипт при инициализация на usb устройство
Kъм правилото на устройството се добавя скрипта за изпълнение RUN+="/root/program". Правилото за изпълнение на скрипта program при включване на мишка, би изглеждало така:
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
nano /root/program
със следното съдържание:
#!/bin/bash halt
и се променят правата му, за да бъде изпълним
chmod +x /root/program
Изпълнение на скрипт при инициализация на usb устройство
Kъм правилото на устройството се добавя скрипта за изпълнение RUN+="/root/program". Правилото за изпълнение на скрипта program при включване на мишка, би изглеждало така:
SUBSYSTEMS=="input", ATTRS{name}=="Logitech USB Optical Mouse", NAME="testMouse", RUN+="/root/program"
Трябва да се създаде и скрипта за изпълнение в съответна директория. Създава се текстов файл
nano /root/program
със следното съдържание:
#!/bin/bash halt
и се променят правата му, за да бъде изпълним
chmod +x /root/program
- WM_DEVICECHANGE - известява за хардуерни промени
const int WM_DEVICECHANGE = 0x0219; const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //device was removed const int DBT_DEVNODES_CHANGED = 0x0007; //device changed const int DBT_DEVTYP_VOLUME = 0x00000002; // logical volume
using System.Security.Permissions; [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m) { if (m.Msg == WM_DEVICECHANGE // && m.WParam.ToInt32() != DBT_DEVNODES_CHANGED && m.WParam.ToInt32() == DBT_DEVICEARRIVAL) { MessageBox.Show("xxx"); } base.WndProc(ref m); }
for (int i = 0; i < 5; i++) { System.Threading.Thread.Sleep(1000); System.Media.SystemSounds.Beep.Play(); }
var psi = new System.Diagnostics.ProcessStartInfo("shutdown", "/s /f /t 0"); psi.CreateNoWindow = true; psi.UseShellExecute = false; System.Diagnostics.Process.Start(psi);
public Form1() { InitializeComponent(); this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; }