Тег «linux»

Синхронизация времени в спутниковых ресиверах

В спутниковых ресиверах предусматривается синхронизация времени только со спутника и очень часто в «ручном» режиме. Аппаратные часы могут напрочь отсутствовать. Для ресиверов на базе Linux с сетевыми картами этот вопрос можно решить сравнительно легко. Обычно всегда присутствует утилитка rdate. Одно но! Должен присутствовать сервер с протоколом time.
Команду rdate -s <ip> нужно вставить в стартовый скрипт (это зависит от версии ресивера).
Проверено, что команда присутствует в ipbox и dreambox.

Теги: , , ,

Мультипортовка MX16COMRS232 и ядро 2.6.x

Возникла необходимость подключить модемы к серверу доступа. Под рукой оказалась плата MX16COMRS232 весьма почтенной давности.

Благо в инете фирма Гранато оставила описание процесса настройки под линукс, но с ядром 2.0.х и 2.2.х.

Локальная копия этого описания здесь. Но под ядром 2.6.х плата не виделась никак.

Поняв, что проблема в том, чтобы передать адреса и прерывания в ядро. К сожалению не совсем понятно как это было сделать для 16-ти адресов.

Поэтому был взят модуль 8250_boca и пропатчен.

Настройки ядра в конфиге:

#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_NR_UARTS=20
CONFIG_SERIAL_8250_RUNTIME_UARTS=20
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_8250_DETECT_IRQ=y
CONFIG_SERIAL_8250_BOCA=m

Патч на модуль drivers/serial/8250_boca.c:

--- 8250_boca.c.orig    2007-03-03 07:14:54.000000000 +0200
+++ 8250_boca.c 2009-01-27 15:23:22.000000000 +0200
@@ -22,22 +22,22 @@
        }
 
 static struct plat_serial8250_port boca_data[] = {
-       PORT(0x100, 12),
-       PORT(0x108, 12),
-       PORT(0x110, 12),
-       PORT(0x118, 12),
-       PORT(0x120, 12),
-       PORT(0x128, 12),
-       PORT(0x130, 12),
-       PORT(0x138, 12),
-       PORT(0x140, 12),
-       PORT(0x148, 12),
-       PORT(0x150, 12),
-       PORT(0x158, 12),
-       PORT(0x160, 12),
-       PORT(0x168, 12),
-       PORT(0x170, 12),
-       PORT(0x178, 12),
+       PORT(0x180, 10),
+       PORT(0x188, 10),
+       PORT(0x190, 10),
+       PORT(0x198, 10),
+       PORT(0x1a0, 10),
+       PORT(0x1a8, 10),
+       PORT(0x1b0, 10),
+       PORT(0x1b8, 10),
+       PORT(0x280, 11),
+       PORT(0x288, 11),
+       PORT(0x290, 11),
+       PORT(0x298, 11),
+       PORT(0x2a0, 11),
+       PORT(0x2a8, 11),
+       PORT(0x2b0, 11),
+       PORT(0x2b8, 11),
        { },
 };

После чего видим в /proc/tty/driver/serial:

serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:40 rx:70 RTS|CTS|DTR|DSR
1: uart:16550A port:000002F8 irq:3 tx:40 rx:70 RTS|CTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:ST16654 port:00000180 irq:10 tx:0 rx:6 CTS|DSR
5: uart:ST16654 port:00000188 irq:10 tx:1747 rx:14896 RTS|CTS|DTR|DSR
6: uart:ST16654 port:00000190 irq:10 tx:24 rx:42 RTS|CTS|DTR|DSR
7: uart:ST16654 port:00000198 irq:10 tx:1910 rx:12622 RTS|CTS|DTR|DSR
8: uart:ST16654 port:000001A0 irq:10 tx:24 rx:42 RTS|CTS|DTR|DSR
9: uart:ST16654 port:000001A8 irq:10 tx:0 rx:0
10: uart:ST16654 port:000001B0 irq:10 tx:0 rx:0
11: uart:ST16654 port:000001B8 irq:10 tx:238 rx:79 RTS|CTS|DTR|DSR
12: uart:ST16654 port:00000280 irq:11 tx:0 rx:0
13: uart:ST16654 port:00000288 irq:11 tx:0 rx:0
14: uart:ST16654 port:00000290 irq:11 tx:0 rx:0
15: uart:ST16654 port:00000298 irq:11 tx:0 rx:0
16: uart:ST16654 port:000002A0 irq:11 tx:0 rx:0
17: uart:ST16654 port:000002A8 irq:11 tx:0 rx:0
18: uart:ST16654 port:000002B0 irq:11 tx:0 rx:0
19: uart:ST16654 port:000002B8 irq:11 tx:0 rx:0

Порты 4-16 принадлежат мультипортовке и самое интересное — модемы работают :)

Теги: , , ,