Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
установка драйвера в системе при загрузке ядра
Franky
Добавлено 24.09.2014 23:10
0
Сообщение: 1
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
Прошу подсказать информацию, как именно происходит инициализация драйвера в системе Linux при загрузке ядра. Хочется узнать всю цепочку "от и до".

Проблема в том, что на моей системе "не втсаёт" драйвер Ethernet, а я даже не знаю куда копать.
Дело в том, что в системе есть файл драйвера *.c, и вроде дефайны конфигурационные заданы, чтобы драйвер загрузился. Но в системе нет сетевых устройств. Ещё неплохо бы узнать где располагаются файлы сетевых устройств (точно не в /dev)
Вобщем вопросов много, поэтому прошу не конркетного совета, а указать источник информации.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.09.2014 12:05 Сообщение: 2
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
подозреваю, что существует масса литературы (бумажной и электронной) по линуксу и по драйверам и по сетевой подсистеме.. беда в том, что информация быстро устаревает и писать монументальные труды никто не будет, имхо..
покопайтесь в разделе /Documentation своего ядра, там можно подчерпнуть толику инфы..

наличие сетевых интерфейсов я смотрю в /proc/net/dev

Код
cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 20000 140 0 0 0 0 0 0 20000 140 0 0 0 0 0 0
eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth0: 1129125465 9463573 0 2529501 0 0 0 0 1041903 5069 0 0 0 0 0 0

сюда же попадают и wifi (wlan) интерфейсы.. продвинутый драйвер еще формирует ветку в sysfs

в вашем случае попробуйте в исходниках своего драйвера найти функцию *_probe и вставить в начало и успешное завершение консольный printk..
далее драйвер собрать модулем и попробовать modprobe мой-драйвер

драйвер выпадает с ошибкой - неправильные настройки или не то железо
драйвер стартует - не хватает вызова регистрации сетевых устройств в файле борды

как-то так..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 25.09.2014 14:08 Сообщение: 3
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
спасибо. а если я стартану драйвер удачно, должны же ноды появится. какие ноды нужно создать для нормальной работы сети?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.09.2014 15:31 Сообщение: 4
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
спасибо. а если я стартану драйвер удачно, должны же ноды появится. какие ноды нужно создать для нормальной работы сети?

вероятно должны, я совершенно не знаю (не требовалось)..

кстати про информацию в инете - делаем классический гуглезапрос "linux ethernet driver node"
смотрим ближайшую страницу:
http://www.linux-tutorial.info/modules.php?name=MContent&pageid=262
вроде про линукс, вроде про сетевые устройства.. но там упоминается "/dev/ethN Ethernet devices", у меня например, в "dev" такого нет..

в sysfs есть вот такое развесистое дерево аттрибутов:
Код
es-1:/# find /sys/ |grep eth
/sys/devices/platform/omap/cpsw/net/eth0
/sys/devices/platform/omap/cpsw/net/eth0/uevent
/sys/devices/platform/omap/cpsw/net/eth0/subsystem
/sys/devices/platform/omap/cpsw/net/eth0/device
/sys/devices/platform/omap/cpsw/net/eth0/addr_assign_type
/sys/devices/platform/omap/cpsw/net/eth0/addr_len
/sys/devices/platform/omap/cpsw/net/eth0/dev_id
/sys/devices/platform/omap/cpsw/net/eth0/ifalias
/sys/devices/platform/omap/cpsw/net/eth0/iflink
/sys/devices/platform/omap/cpsw/net/eth0/ifindex

там еще дофига для eth0 и столько же для eth1..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Franky
Добавлено 25.09.2014 17:58 Сообщение: 5
Franky
5

Пункты: 5030
Регистрация: 29.06.2010
вопрос: как такое же создать вручную (развестистое дерево в sys), и как вообще это создаётся обычно...
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 25.09.2014 18:48 Сообщение: 6
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
вопрос: как такое же создать вручную (развестистое дерево в sys), и как вообще это создаётся обычно...


при подобных вопросах я обычно смотрю в соседние драйвера..

созданием занимается сам драйвер - регистрирует константы или переменные и потом обновляет их динамически..

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

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 02.10.2014 12:25 Редактировалось 02.10.2014 12:26 Сообщение: 7
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата
Прошу подсказать информацию, как именно происходит инициализация драйвера в системе Linux при загрузке ядра. Хочется узнать всю цепочку "от и до".

Проблема в том, что на моей системе "не втсаёт" драйвер Ethernet, а я даже не знаю куда копать.
Дело в том, что в системе есть файл драйвера *.c, и вроде дефайны конфигурационные заданы, чтобы драйвер загрузился. Но в системе нет сетевых устройств. Ещё неплохо бы узнать где располагаются файлы сетевых устройств (точно не в /dev)
Вобщем вопросов много, поэтому прошу не конркетного совета, а указать источник информации.


Файл .c - это исходник, грузиться он не будет. Грузятся собранные драйвера - это файлы с расширением ".ko". Если это и действительно исходник драйвера (признак - модификаторы __init и макросы module_init() и module_exit() в фале), тогда нужно его собирать, для сборки нужно ядро, которое в которое будет грузиться драйвер (каталог с собранными под целевой процессор исходниками, не образ) и собственно кросс-тулчейн.
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 02.10.2014 12:31 Сообщение: 8
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Но вообще - если устройство ethernet заводское серийное, то собирать драйвер вручную редко приходится, в ядре имеются встроенные драйвера огромного набора устройств. Нужно лишь его сконфигурировать (make ARCH=arm menuconfig), найти нужное устройство и включить его
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux