LINUX.ORG.RU

Сообщения cruz7

 

DHCP relay и iptables.

Форум — Admin

Есть следующая схема:

host -------[eth0 device eth1]-------dhcp server (192.168.1.100)

eth0 192.168.2.1 eth1 192.168.1.1

на девайсе встроенный линукс. Мне нужно организовать dhcp relay на нем, т.е. host посылает dhcp diiscovery, оно переправляется на сервер юникастом и т.д. В комплекте busybox'a есть релей, собрал, поставил. В поле giaddr dhcp пакета релей прописывает адрес клиентского интерфейса, т.е. eth0 (таким образом сервер знает из какого пула выдавать адреса).

Проблема в том, что сервер отправляет ответы на адрес 192.168.2.1 (вроде как это в соответствии с rfc2131), но девайс не может роутить такие пакеты куда следует, не могу понять что я делаю не так.

cruz7
()

[embedded] таймер в юзерспейсе

Форум — Development

Необходимо читать нажатие кнопки и продолжительность удерживания нажато кнопки, и в зависимости от периода времени делать какие-то действия. Пока собираюсь реализовать это в юзерспейсе через поллинг (позже в ядро на прерываниях).

Собственно: каким API рекомендуется устанавливать/сбрасывать таймеры под линуксом?

 

cruz7
()

[embedded] читать регистр кажду секунду

Форум — Development

На девайсе к процессору подключен 24-портовый свитч, управление свитчом сделано через gpio посредством шины аналогичной MDC/MDIO (написан драйвер, который предоставляет функции чтения/записи ноги через ioctl).

Нужно отслеживать в snmp-агенте статус портов (up/down).

Мне видятся два варианта:

(1) читать из агента, например каждую секунду, портовые регистры свитча и получать оттуда текущий статус линка. Это IMHO будет очень накладно из-за постоянного преключения контекста

(2) Свитч поддерживает специально выделенную ногу для сообщения прерываний процу об определенных событиях (маска задается регистром свитча), в том числе и статус линка. Завести эту ногу на gpio процессора, написать драйвер чтения ноги и какой-нибудь интерфейс в юзер-спейс (например /proc или ioctl) - т.е. линк сменился, получили прерывание, в агенте получили статус через I/O, далее все-равно нужно читать регистр, чтобы узнать какой порт сменил статус.

Получается, что у второго варианта нет большого преимущества или может быть я что-то упускаю?

 

cruz7
()

программно настроить последовательный порт

Форум — Development

Пишу приложение обмена по RS-485 в для embedded системы на базе uclinux'a. По этому интерфейсу бегает проприетарный протокол, в котором предусмотрены свои старт/стоп биты при передаче. Соответственно мне нужно отключить установку этих битиков драйвером порта, так? Сделал вот так:

int fd;
    struct termios  oldTermios, newTermios;

    if ((fd = open(dev, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) {
        return -1;
    }

    if (tcgetattr(fd, &oldTermios) < 0) {
        return -1;
    }

    memset(&newTermios, 0, sizeof(struct termios));

    newTermios.c_cflag  = CS8 | CLOCAL | CREAD | UART_DEFAULT_BAUD;
    newTermios.c_iflag  = IGNPAR;
    newTermios.c_oflag  = 0;
    newTermios.c_lflag  = 0;
    newTermios.c_cc[VTIME]  = 0;
    newTermios.c_cc[VMIN]   = 0;

    if (tcsetattr(fd, TCSANOW, &newTermios) < 0) {
        return -1;
    }

    if (tcflush(fd, TCIOFLUSH) < 0) {
        return -1;
    }

Но осциллографом вижу, что все равно добавляются стандартные стартовые биты, а не те что определены протоколом.

Похоже что-то я упустил, что я делаю не так?

cruz7
()

[CVS] закомиттить *.o

Форум — Development

гм.. как в CVS сделать следующее: по умолчанию при коммите игнорятся все *.o Но мне нужно закоммитить только определенные объектники из каталога prebuilt/ своего проекта. Кладу в prebuilt файл .cvsignore где прописываю:

!my_obj.o

а ведь все равно не коммитит этот файл. Что я делаю не так?

 

cruz7
()

послать http запрос из приложения серверу

Форум — Development

Для одной embedded разработки, необходимо сделать обновление прошивки из стороннего приложения. Сейчас это сделано через веб посредством встроенного httpd сервера с модификациями от производителя чипа. Вот такая шапка посылается на сервер:

POST /upgrade.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Referer: http://192.168.2.1/firmware.asp
Accept-Language: en
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)
Host: 192.168.2.1
Content-Length: 341
Connection: Keep-Alive
Cache-Control: no-cache
Authorization: Basic OmFkbWlu

-----------------------------7da271f502f4
Content-Disposition: form-data; name="page"

firmware.asp
-----------------------------7da271f502f4
Content-Disposition: form-data; name="file"; filename="C:\test.txt"
Content-Type: text/plain

test file

-----------------------------7da271f502f4--

(На имя и содержимое файла не обращайте внимания, это просто для проверки). В httpd зарегистрирован обработчик upgrade.cgi, где во входном потоке ищется строка «Content-Disposition» и потом извлекается «name=file»

Как я понимаю, все строки вплоть до "-----------------------------7da271f502f4" всегда неизменны, а что такое "-----------------------------7da271f502f4" и как это генерировать?

cruz7
()

веб-сервер на embedded системе

Форум — Development

Есть чип от броадкома, и к нему целый SDK, включая httpd сервер с броадкомовской либой общения с железом. Все страницы написаны на html с asp-вставками (я не специалист по веб-программированию, поэтому заранее извиняюсь за неверную терминологию). Как я понял из рассматривания исходников, любой ASP-код, заключенный в <%...%> интерпретируется веб-сервером и вызывается соотв. ф-ция.

Но что остается непонятно: например на html-страничке есть кнопка, кликнув на которую, вступают в силу изменения и совершаются определенные действия с чипом: непонятно только какой код и как вызывается на сервере.

Вот как описана кнопка:

<input type=«submit» name=«action» value=«Apply»>

и все. Если бы было обращение к cgi, было бы понятнее куда смотреть, но ничего такого не происходит.

Подскажите в какую сторону смотреть? Спасибо.

cruz7
()

CVS

Форум — Development

Приветствую,

нужно закоммитить с определенным тегом. Делаю в каталоге с исходниками:

cvs tag MY_OWN_TAG

т.е. теперь все файлы в рабочей директории помечены данным тегом. Теперь хочу закомитить в репозиторий так, чтобы в последующем можно было бы извлечь

cvs co -rMY_OWN_TAG my_sources

Просто cvs commit судя по всему не работает (cvs co -r... вытаскивает не то что нужно). Что я делаю не так?

PS. не закидывайте помидорами, знаю есть системы лучше, но в данном случае нужно именно CVS.

cruz7
()

сборка двух модулей из одной директории

Форум — Development

Приветствую.

Есть ли возможность собрать два разных модуля, исходники которых находятся в одной директории, средствами линуксового make'a ? Поясню, у меня есть есть makefile такого содержания:

MY_SRCDIR := ../../../../../my_sources/

obj-$(CONFIG_MYMODULE) := module1.o

ifneq ($(wildcard $(src)/$(MY_SRCDIR)/),)
EXTRA_CFLAGS += -I$(src)/$(MY_SRCDIR)
module1-objs := $(MY_SRCDIR)/module1.o
else
module1-objs := $(MY_SRCDIR)/module1.o
endif

ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
else
# Normal makefile
KERNELDIR := ../../../../../linux/linux-2.6
all:
$(MAKE) -C $(KERNELDIR) M=`pwd`

clean:
$(MAKE) -C $(KERNELDIR) M=`pwd` clean
endif

clean-files += $(MY_SRCDIR)/*.o $(MY_SRCDIR)/.*.o.cmd
#

Если добавить еще один obj-$(CONFIG_MYMODULE) := module2.o то компилируется только module2.ko, т.е. make подхватывает последнее определение модуля

Читал 'Documentation/kbuild/makefiles.txt' но к сожалению просветления не принесло. Как объяснить в makefile'e чтобы собирались два разных модуля, возможно ли то что я хочу?

Спасибо.

cruz7
()

a+b и переполнение

Форум — Development

Изучаю С. Встретил такой вопрос, и никак не могу понять код, предлагаемый в качестве решения.

Есть три int'a (a, b, limit). Сумма 'a' и 'b' не должна быть больше limit, в противном случае 'a' должен быть таким, что a+b=limit. Предлагается такой вариант решения:

if (b < 0)
{
  if (limit <= INT_MAX + b)
     if (limit - b < a)
       a = limit - b;
} else {
    if (limit < INT_MIN + b)
      goto end;
    if (limit - b < a)
      a = limit - b;
}

Т.е. судя по всему пытаются определить чтобы не было переполнения a+b? Как я понимаю, нельзя делать просто так: if (a+b > limit) ... по причине возможного переполнения?

И в чем польза от «if (limit <= INT_MAX + b)» (я в курсе что такое INT_MAX/MIN, но в чем их смысл здесь в данном случае)?

cruz7
()

LiveCD чтобы протестить железо на ноуте

Форум — Desktop

Есть ноут Dell Inspiron 1525. Посоветуйте какой-либо нормальный LiveCD, который бы позволил убедиться, что все железо на ноуте работает исправно (особенно интересует wi-fi и card-reader).

Спасибо.

cruz7
()

LiveCD чтобы протестить железо на ноуте

Форум — Linux-hardware

Есть ноут Dell Inspiron 1525. Посоветуйте какой-либо нормальный LiveCD, который бы позволил убедиться, что все железо на ноуте работает исправно (особенно интересует wi-fi и card-reader).

Спасибо.

cruz7
()

user space <-> kernel space

Форум — Development

Какие есть еще способы организации интерфейса между пользовательским и ядерным уровнем? Знаю про сисколлы, /proc, сокеты. Есть что-то еще?

cruz7
()

emacs в голой консоли

Форум — Development

Приветствую,

ОС FreeBSD-6.4stable, GNU Emacs-22.3 из портов.

В Х-Window все комбинации клавиш, нужные мне, работают нормально, а в текстовой ASCII консоли (т.е. без запущенных иксов) не работает Ctrl+H (а на ней висит вызов справки), вместо справки работает как backspace.

Как я понимаю, в консоли Ctrl-H на самом деле посылает код backspace.Что и как нужно подправить, чтобы ничего не поломать, чтобы в консоли работал и backspace, и Del, а в Емакс-е работал бы Ctrl-H ?

Спасибо!

cruz7
()

[C] typedef

Форум — Development

typedef char x[2]; x p;

Изучаю С и наткнулся вот на такой typedef и меня заклинило. Не могу понять, как такое может быть. Как можно делать массив синонимом типа?

Снимите plz с ручника.

 

cruz7
()

патчик для Demos Commander

Форум — Desktop

Приветствую,

помнится, раньше попадался патч для Demos Commander, реализующий возможность в режиме просмотра файла по F3 перекодировать из CP1251 или CP866 в KOI8-R и наоборот (вроде бы эта функция вешалась на кнопку F9).

Не подскажете, где можно раздобыть этот патчик?

PS. Deco-3.9 поставлен из портов, FreeBSD 6.4-STABLE

cruz7
()

два монитора от одной видео-карты

Форум — Desktop

Приветствую,

есть Debian Lenny с установленным xorg(все ставилось ~6мес. назад, ни разу не обновлялось), ATI Radeon HD3450, с двумя видео-выходами и два монитора. Хотелось бы получить работу в иксах обоих мониторов, причем не простое клонирование картинки на оба монитора, а возможность запускать разные приложения на разных мониторах, а также таскать окошки с монитора на монитор.

Чтение разных статей и форумов привело к следующему конфигу:

Section "ServerLayout"
	Identifier     "Xorg Layout"
	Screen         "Left Screen"
	Screen         "Right Screen" RightOf "Left Screen"
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerFlags"
	Option         "Xinerama" "off"
EndSection

Section "Files"
	RgbPath      "/etc/X11/rgb"
	ModulePath   "/usr/lib/xorg/modules"
	FontPath     "/usr/share/fonts/X11/misc"
	FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/Type1"
	FontPath     "/usr/share/fonts/X11/100dpi"
	FontPath     "/usr/share/fonts/X11/75dpi"
EndSection

Section "Module"
	Load  "glx"
	Load  "extmod"
	Load  "record"
	Load  "dri"
	Load  "dbe"
	Load  "GLcore"
	Load  "xtrap"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/input/mice"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
	Identifier   "Dell E172FP"
	VendorName   "Dell"
	Option	    "DPMS" "on"
EndSection

Section "Monitor"
	Identifier   "Dell E1909W"
	VendorName   "Dell"
	Option       "DPMS" "on"
EndSection

Section "Device"
	Identifier  "Radeon HD 3450 (right head)"
	Screen      0
	Driver      "radeon"
	VendorName  "ATI Technologies Inc"
	BoardName   "RV620"
	BusID       "PCI:1:0:0"
EndSection

Section "Device"
	Identifier  "Radeon HD 3450 (left head)"
	Screen      1
	Driver      "radeon"
	VendorName  "ATI Technologies Inc"
	BoardName   "RV620"
	BusID       "PCI:1:0:0"
EndSection

Section "Screen"
	Identifier "Right Screen"
	Device     "Radeon HD 3450 (right head)"
	Monitor    "Dell E172FP"
	DefaultDepth	24
	SubSection "Display"
	   Modes   "1280x1024"
	EndSubSection
EndSection

Section "Screen"
	Identifier "Left Screen"
	Device     "Radeon HD 3450 (left head)"
	Monitor    "Dell E1909W"
	DefaultDepth	24
	SubSection "Display"
	   Modes   "1280x1024"
	EndSubSection
EndSection

Но все равно не работает, изображение на одном из мониторов (Dell E1909W) не появляется. Вот фрагмент лога:

(==) Using config file: "/etc/X11/xorg.conf"
(++) ServerLayout "Xorg Layout"
(**) |-->Screen "Left Screen" (0)
(**) |   |-->Monitor "Dell E1909W"
(**) |   |-->Device "Radeon HD 3450 (left head)"
(**) |-->Screen "Right Screen" (1)
(**) |   |-->Monitor "Dell E172FP"
(**) |   |-->Device "Radeon HD 3450 (right head)"
(**) |-->Input Device "Mouse0"
(**) |-->Input Device "Keyboard0"
(**) Option "Xinerama" "off"
(==) Automatically adding devices
(==) Automatically enabling devices
...
(II) Setting vga for screen 0.
(II) Setting vga for screen 1.
...
(II) AIGLX: Screen 0 is not DRI capable
...
Enable CRTC memreq 1 success
Enable CRTC 1 success
Unblank CRTC 1 success
Output 69 enable success
[config/hal] couldn't initialise context: (null) ((null))
Output 69 disable success
Blank CRTC 1 success
Disable CRTC 1 success
Disable CRTC memreq 1 success
(II) RADEON(0): avivo_restore !
Enable CRTC memreq 1 success
Enable CRTC 1 success
Unblank CRTC 1 success

Как с этим бороться? Вообще реально ли получить то, что я хочу? Заранее благодарю за дельные советы.

cruz7
()

упаковка структур в ядре линукса

Форум — Development

Почему в linux/if_ether.h присутствует атрибут __attribute__((packed)), а в linux/ip.h нет?

PS. назначение атрибута понятно, не понятно, почему он применяется не кр всем структурам.

cruz7
()

[литература] алгоритмы и структуры данных

Форум — Development

Обычно рекомендуют к прочтению следующие труды:

The Art of Computer Programming by Donald E. Knuth
Introduction to Algorithms by Thomas H. Cormen и др.

Сам я студент, попробовал читать Кнута - идет очень тяжело. Взялся за "Algorithms in C, 3rd edition, Robert Sedgewick" - читается достаточно легко, материал по всем основным темам присутствует.

Собственно, стоит ли по завершении Седжвика браться за Кнута или материала из "Алгоритмов на С" вполне хватит ?

 

cruz7
()

связанные списки

Форум — Development

Просьба сразу не пинать, ибо студент.

Разбираюсь с простым связанным списком, рассматриваю самый простой пример:

struct listnode {
   int data;
   struct listnode *next;
};

struct listnode *n1, *n2, *n3;

n1 = list_addnode();
n2 = list_addnode();
n3 = list_addnode();
...
/* work with the list */
...

list_freenode(n1);
list_freenode(n2);
list_freenode(n3);

Предположим, мне необходимо хранить несколько тысяч узлов. Очевидно, что заводить тысячи указателей n1..n1000 глупо. Что рекомендуется делать в таких случаях, т.е. память отведенную под узлы нужно аккуратно освобождать.

Заранее благодарю!

cruz7
()

RSS подписка на новые темы