Это старая версия документа!
MAC-адреса в модулях устанавливаются двумя способами:
В розничных модулях по умолчанию используется 1-й способ.
На модуле установлены 2 I2C EEPROM 24AA025E48T-I/OT.
Они работают на I2С-шине с контроллером 0x1f047000. На шине так же висит RTC, STM32 WD. Шина только на модуле, на разъем Q7 не выведена.
U-boot вычитывает EUI из EEPROM и устанавливает их в переменные U-boot ethaddr и eth1addr. Переопределять эти переменные нельзя.
EEPROM прописаны в DTS, поэтому драйвер atmel,24c02 добавляет их в sysfs.
[root@baikal_t1_uq7 ~]# hexdump -C /sys/bus/i2c/devices/1-0052/eeprom 00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 000000f0 ff ff ff ff ff ff ff ff ff ff 80 1f 12 30 0b d8 |.............0..| 00000100 [root@baikal_t1_uq7 ~]# hexdump -C /sys/bus/i2c/devices/1-0053/eeprom 00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| * 000000f0 ff ff ff ff ff ff ff ff ff ff 80 1f 12 30 73 8d |.............0s.| 00000100 [root@baikal_t1_uq7 ~]# i2cdetect -y -r 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- UU UU -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- 6a -- -- -- -- -- 70: -- -- -- -- -- -- -- -- [root@baikal_t1_uq7 ~]#
В варианте, когда U-boot не вычитывает EEPROM с мак-адресами, необходимо самостоятельно иницилизировать переменнные окружения с желаемым адресом. В u-boot по умолчанию вкомпилированы адреса 4c:a5:15:9e:ce:20 и 4c:a5:15:9e:ce:21.
Переменные окружения хранятся в NOR SPI Flash, в которую прошит U-boot:
[root@baikal_t1_uq7 ~]# cat /proc/mtd dev: size erasesize name mtd0: 000c0000 00010000 "bootloader" mtd1: 00010000 00010000 "environment" mtd2: 00010000 00010000 "information" mtd3: 00010000 00010000 "fdt" mtd4: 00e90000 00010000 "fitimage" mtd5: 00080000 00010000 "configs"
Переменные MAC-адреса, в отличие от других нельзя переопределить в U-boot, поэтому это делается из-под Linux с помощью утилит fw_printenv и fw_setenv.
Для начала нужно убедиться, что область переменных окружения валидна. Об этом пишет U-boot при старте:
Переменнные окружения вычитаны успешно
Переменнные окружения не вычитаны
U-boot вычитывает переменные окружения либо из из области flash, которая опеределна на этапе компиляции, либо использует вкомпилированные переменные окружения (если область flash невалидна). Во втором случае невалидности необходимо выполнить команду saveenv в консоли U-boot. Так вкомпилированные переменные попадут во Flash.
BAIKAL # saveenv Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done OK BAIKAL #
Linux читает переменные окружения