[cdev] Пожалуйста, пишите тему!

Grigoriy A. Sitkarev sinclair80 на gmail.com
Сб Фев 20 20:17:34 MSK 2010


Добрый вечер всем!

Убедительная просьба, ВСЕГДА пишите тему в ваших сообщениях. Они
группируются в треды и в архивы по этому полю. Если вы там ничего не
пишете или оставляете "без темы" то в таком случае невозможно
проследить ход обсуждения. Теряется смысл существования списка.

Когда вам отвечают, то поле темы сохраняется и префиксируется строкой
"RE:" что означает ответ на тему, сокращение от "reply". Тему нужно
сохранять при ответе на сообщение, тогда всегда можно отследить, кто
кому и на что отвечал. Иначе будет каша, не разберёшь, кто кому чего и
на что отвечал.

В любом случае, сетевой этикет требует заполнения поля "Тема" в
письме. Поэтому писать об этом дополнительно не нужно, как само собой
разумеющееся.

1. По поводу драйвера Marvell для Linux x86. Есть такой драйвер skge,
судя по всему это как раз то что вам нужно. Модуль ядра лежит в
kernel/drivers/net/skge.ko.

Есть сайт с базой данных по большому количеству устройств,
поддерживаемых в Linux.

http://hardware4linux.info/component/17452/

Мне кажется что это как раз ваш сетевой контроллер.

Вас просили показать lspci -vv чтобы увидеть идентификаторы PCI
устройства. Тогда можно точно идентифицировать устройство,
производителя и т.д. В базе на harware4linux эти идентификаторы (PCI
ID и поля INFO) есть.

Когда загрузите модуль, можно в /etc/modules добавить строку с его
именем (смотрите также modules(5)), или сразу с командной строки
утилитой modprobe(8) его добавить в ядро, это будет тогда работать
только до перезагрузки, появится устройство eth0 или eth1. Далее
читаете внимательно interfaces(5), там есть примеры, и конфигурируете
своё устройство (метод получения ip-адреса, маску подсети, шлюз и
т.д.), редактируя /etc/network/interfaces. Не перегружая машины
проверяете через ifup(8)/ifdown(8) - правильно ли работает
конфигурация для устройства.

До меня заметили что есть модуль marvell.ko но это только PHY к Marvell.

2. По поводу утилиты find.

Для начала посмотрите что входит в требования OpenGroup для этой
утилиты. Если вы ещё не скачали спецификации с их сайта, смотрите
онлайн.

http://www.opengroup.org/onlinepubs/009695399/utilities/find.html

Потом проверьте на практике как это реализовано в вашей ОС,
предполагаю что вы уже установили себе ОС GNU/Linux или другую
UNIX-подобную систему.

Я думаю что пока вам нужно сделать операнд -name и чтобы работала
опция path, она указывает каталог, в котором производится рекурсивно
поиск. Если с опцией path всё ясно, там указывается каталог обычно, то
с аргументом операнда -name разбираться дополнительно, потому что там
передаётся шаблон имени файла, которые надо печатать на stdout или
выполнять с ними expr.

Формат этого шаблона стандартизован, можно почитать online. Он
повторяет формат шаблона сопоставления shell.

http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13

Например, ваша утилита должна найти все файлы начинающиеся на `test' в
каталоге /home:

$ find /home -name "test*"

В стандартной библиотеке есть функция fnmatch(3) которой можно
проверять соответствует ли имя файла шаблону.

Дальше можно вашу утилиту развить, но это минимум который вам нужно
сделать и понять что делать потом. Имейте в виду что надо решить
проблему возможного зацикливания поиска, т.к. файл каталога (жёсткая
ссылка) может ссылаться на каталог выше, который вы уже проходили.
Задачу легко решить через номер устройства и индексный дескриптор
файла, которые возвращает stat(2) в полях структуры struct stat -
st_dev и st_ino. Эти значения уникальны для данных файла а имена
файлов всего лишь записи в файлах каталога - ссылки на них. В UNIX имя
файла не является его атрибутом, я вам об этом говорил.

Было бы неплохо вам попытаться потом реализовать опцию -exec. Тогда
для выбранных файлов запускается команда с аргументами, которой можно
в любом месте передать имя текущего файла (если вызвано с "-exec
command ;") или список всех файлов сразу кучей (если вызвано с "-exec
command {} +").

Как вы будете там опции читать, не суть важно, хотите используйте
getopt(3), хотите getopt_long(3).

--
Г.А.


Подробная информация о списке рассылки cdev