Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| boards:nms-uq7-bklt:v1_ru:eth_addr [2024/01/15 16:41] – [MAC-адреса в модулях Q7 Baikal] Артем Слепов | boards:nms-uq7-bklt:v1_ru:eth_addr [2024/01/26 09:57] (текущий) – [Переопределение MAC-адреса из Linux] Артем Слепов | ||
|---|---|---|---|
| Строка 2: | Строка 2: | ||
| MAC-адреса в модулях устанавливаются двумя способами: | MAC-адреса в модулях устанавливаются двумя способами: | ||
| - | | + | - Вычитываются из I2C EEPROM 24AA025E48T-I/ |
| - | или | + | - Через переменные окружения U-boot (ethaddr и eth1addr) |
| - | | + | |
| - | В розничных модулях по умолчанию | + | Способ работы с MAC-адресами определяется на этапе сборки U-boot. |
| + | |||
| + | В розничных модулях по умолчанию прошит 1-й способ. | ||
| - | ==== Переменные окружения ==== | ||
| ==== I2C EEPROM с EUI-48 ==== | ==== I2C EEPROM с EUI-48 ==== | ||
| Строка 14: | Строка 14: | ||
| На модуле установлены 2 [[https:// | На модуле установлены 2 [[https:// | ||
| + | Они работают на I2С-шине с контроллером 0x1f047000. На шине так же висит RTC, STM32 WD. Шина только на модуле, | ||
| + | |||
| + | U-boot вычитывает EUI из EEPROM и устанавливает их в переменные U-boot ethaddr и eth1addr. Переопределять эти переменные нельзя. | ||
| + | |||
| + | EEPROM прописаны в DTS, поэтому драйвер atmel,24c02 добавляет их в sysfs. | ||
| + | < | ||
| + | [root@baikal_t1_uq7 ~]# hexdump -C / | ||
| + | 00000000 | ||
| + | * | ||
| + | 000000f0 | ||
| + | 00000100 | ||
| + | [root@baikal_t1_uq7 ~]# hexdump -C / | ||
| + | 00000000 | ||
| + | * | ||
| + | 000000f0 | ||
| + | 00000100 | ||
| + | [root@baikal_t1_uq7 ~]# i2cdetect -y -r 1 | ||
| + | | ||
| + | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- -- | ||
| + | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 50: -- -- UU UU -- -- -- -- -- -- -- -- -- -- -- -- | ||
| + | 60: -- -- -- -- -- -- -- -- UU -- 6a -- -- -- -- -- | ||
| + | 70: -- -- -- -- -- -- -- -- | ||
| + | [root@baikal_t1_uq7 ~]# | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Переменные окружения ==== | ||
| + | |||
| + | В варианте, | ||
| + | В u-boot по умолчанию вкомпилированы адреса 4c: | ||
| + | |||
| + | Переменные окружения хранятся в NOR SPI Flash, в которую прошит U-boot: | ||
| + | < | ||
| + | [root@baikal_t1_uq7 ~]# cat / | ||
| + | dev: size | ||
| + | mtd0: 000c0000 00010000 " | ||
| + | mtd1: 00010000 00010000 " | ||
| + | mtd2: 00010000 00010000 " | ||
| + | mtd3: 00010000 00010000 " | ||
| + | mtd4: 00e90000 00010000 " | ||
| + | mtd5: 00080000 00010000 " | ||
| + | </ | ||
| + | |||
| + | Переменные MAC-адреса, | ||
| + | |||
| + | |||
| + | Для начала нужно убедиться, | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Переменнные окружения вычитаны успешно** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ** Переменнные окружения не вычитаны ** | ||
| + | |||
| + | === Переменные окружения с точки зрения U-boot === | ||
| + | U-boot вычитывает переменные окружения либо из из области flash, которая опеределна на этапе компиляции, | ||
| + | Во случае невалидности необходимо выполнить команду //saveenv// в консоли U-boot. Так вкомпилированные переменные попадут во Flash. | ||
| + | < | ||
| + | BAIKAL # saveenv | ||
| + | Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done | ||
| + | OK | ||
| + | BAIKAL # | ||
| + | </ | ||
| + | |||
| + | === Переменные окружения с точки зрения Linux === | ||
| + | Linux читает переменные окружения опираясь на /// | ||
| + | < | ||
| + | [root@baikal_t1_uq7 ~]# cat / | ||
| + | # MTD device name Device offset Env. size Flash sector size Number of sectors | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | Если MTD device невалиден, | ||
| + | |||
| + | Оба файла задаются на этапе сборке rootfs. | ||
| + | |||
| + | Linux должен корректно вычитывать переменные через fw_printenv (не должно быть сообщения //using default environment// | ||
| - | 1f047000 | + | === Переопределение MAC-адреса из Linux === |
| + | Команда записи переменной окружения ethaddr: | ||
| + | < | ||
| + | fw_setenv ethaddr aa: | ||
| + | </ | ||
| + | После перезагрузки MAC-адрес должен быть применен к сетевому интерфейсу и читаться через ifconfig | ||
| + | < | ||
| + | [root@baikal_t1_uq7 ~]# ifconfig | ||
| + | eth0 Link encap: | ||
| + | inet addr: | ||
| + | </ | ||
| + | === Команды для автоматического назначения MAC из EEPROM === | ||
| + | < | ||
| + | ethaddr=`dd if=/ | ||
| + | echo "set ethaddr=$ethaddr" | ||
| + | fw_setenv ethaddr $ethaddr | ||
| + | eth1addr=`dd if=/ | ||
| + | echo "set eth1addr=$eth1addr" | ||
| + | fw_setenv eth1addr $eth1addr | ||
| + | </ | ||