BeagleBoard XM: случайный MAC адрес

Когда мы коннектимся к плате bbxm по ssh, каждый раз замечаем что ssh сервер спрашивает подтверждение на внесение ip адреса в постоянный список известных хостов. Это наводит на мысль, что после включения плата bbxm получает разный ip адрес по dhcp. И не стоит искать причину в том, что dhcp сервер не дает постоянную аренду ip адреса: такое поведение платы вызвано тем, что она не имеет постоянного mac адреса и каждый раз при загрузке ядра сетевой драйвер выбирает его случайным образом. Соответственно, каждый раз bbxm получает новый ip адрес.

Если такое поведение BeagleBoard XM вызывает дискомфорт, то можно сделать MAC адрес фиксированным. Сразу замечу, что бесполезно править сетевые настройки /etc/network/interfaces: это ничего не изменит. Задача решается патчем сетевого драйвера smsc95xx.c, который находится в дереве ядра по адресу drivers/net/usb (именно usb, потому что Ethernet в bbxm работает именно так!).

Будет разумно, если требуемое значение MAC адреса мы поместим в строку конфигурации, которую u-boot передает ядру. Чтобы не трогать настройки переменных окружения в самом u-boot, который на bbxm и не собирается сохранять их на SD карту, заведем в загрузочном разделе файл переменных окружения uEnv.txt, в котором и пропишем значение MAC адреса:

Значение mem=114M к нашему примеру отношения не имеет и просто показывает, как перечислить несколько параметров в командной строке. Загрузчик u-boot по умолчанию просматривает файл uEnv.txt, поэтому все что в этом файле будет передано как параметры ядру.

Патчи, которые я находил в инете, приходилось править. Вот рабочий патч для ядра 3.0.50:

Патч добавляет функцию __setup(), которая принимает наш параметр командрой строки ethaddr из переменной окружения, которая задана в uEnv.txt. Дальше логика проста: исходный драйвер или находит MAC адрес в постоянной памяти, или задает его случайным образом. Мы добавляем дополнительное условие: если задан параметр ethaddr, то MAC адрес устанавливается значением этого параметра.

Строки printk() добавлены для отладки, в заключительной версии драйвера их можно удалить.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">