to post messages and comments.

← All posts tagged Linux

Бывает требуется получить доступ к файлам из ядра. Для этого
можно воспользоваться sys_open/sys_read, но такой способ не сработает в ядре
входящем в rhel 5.3 из за не экспортируемого sys_open. Обойти проблему помогут
вызовы filp_open и vfs_read, пример использования
gist.github.com

настроил принтер и сканер, правда теперь нужно включать виртуалку с виндой для сканирования/печати, ну да ладно, делаю я это довольно редко.

Для реализации этой затеи потребовалась прога usbip (http://sourceforge.net/projects/usbip/develop).
Для компиляции модулей под 2.6.29 (и выше), потребуется небольшой патч, брать тут pastebin.com
Для компиляции драйвера под винду потребуется DDK и какой нибудь компилятор (cc, mingw) или же можете взять отсюда mad.weba.ru:8181 (Windows XP SP2) уже скомпиленный драйвер, утилиту для его загрузки и прогу для работы с девайсами.

Способ использования описан в README файлах.

PS: Canon mp110, удалось найти только одну нативную прогу для линукса (турбопринт), но она умеет только печатать и к тому же платная.

Написал небольшой патч, который добавляет возможность вкл/выкл светодиода не
перезагружая драйвер.

Управление светодиодом осуществляется через сигнал USR1, например, так:

kill -USR1 $(pidof madwimax)


Index: src/wimax.c
===================================================================
--- src/wimax.c (revision 171)
+++ src/wimax.c (working copy)
@@ -838,6 +838,20 @@
wmlog_msg(2, "Child exited with status %d", status);
}

+void diode_switch(int sig)
+{
+ char req_data[0x400];
+ int len;
+
+ if (diode_on)
+ diode_on = 0;
+ else
+ diode_on = 1;
+
+ len = fill_diode_control_cmd(req_data, diode_on);
+ set_data(req_data, len);
+}
+
int main(int argc, char **argv)
{
struct sigaction sigact;
@@ -853,6 +867,8 @@
sigaction(SIGQUIT, &sigact, NULL);
sigact.sa_handler = sighandler_wait_child;
sigaction(SIGCHLD, &sigact, NULL);
+ sigact.sa_handler = diode_switch;
+ sigaction(SIGUSR1, &sigact, NULL);

if (logfile != NULL) {
set_wmlogger(argv[0], WMLOGGER_FILE, logfile);