Прошу подсказать информацию, как именно происходит инициализация драйвера в системе Linux при загрузке ядра. Хочется узнать всю цепочку "от и до".
Проблема в том, что на моей системе "не втсаёт" драйвер Ethernet, а я даже не знаю куда копать.
Дело в том, что в системе есть файл драйвера *.c, и вроде дефайны конфигурационные заданы, чтобы драйвер загрузился. Но в системе нет сетевых устройств. Ещё неплохо бы узнать где располагаются файлы сетевых устройств (точно не в /dev)
Вобщем вопросов много, поэтому прошу не конркетного совета, а указать источник информации.
подозреваю, что существует масса литературы (бумажной и электронной) по линуксу и по драйверам и по сетевой подсистеме.. беда в том, что информация быстро устаревает и писать монументальные труды никто не будет, имхо..
покопайтесь в разделе /Documentation своего ядра, там можно подчерпнуть толику инфы..
наличие сетевых интерфейсов я смотрю в /proc/net/dev
сюда же попадают и wifi (wlan) интерфейсы.. продвинутый драйвер еще формирует ветку в sysfs
в вашем случае попробуйте в исходниках своего драйвера найти функцию *_probe и вставить в начало и успешное завершение консольный printk..
далее драйвер собрать модулем и попробовать modprobe мой-драйвер
драйвер выпадает с ошибкой - неправильные настройки или не то железо
драйвер стартует - не хватает вызова регистрации сетевых устройств в файле борды
вероятно должны, я совершенно не знаю (не требовалось)..
кстати про информацию в инете - делаем классический гуглезапрос "linux ethernet driver node"
смотрим ближайшую страницу: http://www.linux-tutorial.info/modules.php?name=MContent&pageid=262
вроде про линукс, вроде про сетевые устройства.. но там упоминается "/dev/ethN Ethernet devices", у меня например, в "dev" такого нет..
в sysfs есть вот такое развесистое дерево аттрибутов:
при подобных вопросах я обычно смотрю в соседние драйвера..
созданием занимается сам драйвер - регистрирует константы или переменные и потом обновляет их динамически..
мне как-то потребовалось в чужом драйвере аккумулятора вывести статусный бит, не описанный в стандарте - за полчаса разобрался и добавил нужные строчки..
Файл .c - это исходник, грузиться он не будет. Грузятся собранные драйвера - это файлы с расширением ".ko". Если это и действительно исходник драйвера (признак - модификаторы __init и макросы module_init() и module_exit() в фале), тогда нужно его собирать, для сборки нужно ядро, которое в которое будет грузиться драйвер (каталог с собранными под целевой процессор исходниками, не образ) и собственно кросс-тулчейн.
Но вообще - если устройство ethernet заводское серийное, то собирать драйвер вручную редко приходится, в ядре имеются встроенные драйвера огромного набора устройств. Нужно лишь его сконфигурировать (make ARCH=arm menuconfig), найти нужное устройство и включить его