===== MAC-адреса в модулях Q7 Baikal ===== MAC-адреса в модулях устанавливаются двумя способами: - Вычитываются из I2C EEPROM 24AA025E48T-I/OT с прошитым EUI-48 - Через переменные окружения U-boot (ethaddr и eth1addr) Способ работы с MAC-адресами определяется на этапе сборки U-boot. В розничных модулях по умолчанию прошит 1-й способ. ==== I2C EEPROM с EUI-48 ==== На модуле установлены 2 [[https://doc.inmys.ru/open?hash=337d9a81d946ebb6a12a449130fbedef&fn=24AA02E48-24AA025E48-24AA02E64-24AA025E64-Data-Sheet-20002124H.pdf|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 при старте: {{:boards:nms-uq7-bklt:v1_ru:uboot_env_vars_ok.png}} **Переменнные окружения вычитаны успешно** {{:boards:nms-uq7-bklt:v1_ru:uboot_env_vars.png}} ** Переменнные окружения не вычитаны ** === Переменные окружения с точки зрения 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 === Linux читает переменные окружения опираясь на ///etc/fw_env.config// [root@baikal_t1_uq7 ~]# cat /etc/fw_env.config # MTD device name Device offset Env. size Flash sector size Number of sectors /dev/mtd1 0x0 0x10000 Если MTD device невалиден, то используются переменные окружения из ///etc/u-boot-initial-env// Оба файла задаются на этапе сборке rootfs. Linux должен корректно вычитывать переменные через fw_printenv (не должно быть сообщения //using default environment//). === Переопределение MAC-адреса из Linux === Команда записи переменной окружения ethaddr: fw_setenv ethaddr aa:bb:cc:dd:ee:ff После перезагрузки MAC-адрес должен быть применен к сетевому интерфейсу и читаться через ifconfig [root@baikal_t1_uq7 ~]# ifconfig eth0 Link encap:Ethernet HWaddr AA:BB:CC:DD:EE:FF inet addr:192.168.1.209 Bcast:192.168.1.255 Mask:255.255.255.0 === Команды для автоматического назначения MAC из EEPROM === ethaddr=`dd if=/sys/devices/soc0/apb/1f047000.i2c1/i2c-1/1-0052/eeprom bs=1 count=6 skip=250 | hexdump -e '1/1 "%02x"5/1 ":%02x"'` echo "set ethaddr=$ethaddr" fw_setenv ethaddr $ethaddr eth1addr=`dd if=/sys/devices/soc0/apb/1f047000.i2c1/i2c-1/1-0053/eeprom bs=1 count=6 skip=250 | hexdump -e '1/1 "%02x"5/1 ":%02x"'` echo "set eth1addr=$eth1addr" fw_setenv eth1addr $eth1addr