INMYS WIKI

Инженерами для инженеров

Инструменты пользователя

Инструменты сайта


boards:nms-uq7-bklt:v1_ru:eth_addr

Это старая версия документа!


MAC-адреса в модулях Q7 Baikal

MAC-адреса в модулях устанавливаются двумя способами:

  1. Вычитываются из I2C EEPROM 24AA025E48T-I/OT с прошитым EUI-48
  2. Через переменные окружения U-boot

Способ работы с MAC-адресами определяется на этапе сборки U-boot.

В розничных модулях по умолчанию прошит 1-й способ.

I2C EEPROM с EUI-48

На модуле установлены 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

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 
boards/nms-uq7-bklt/v1_ru/eth_addr.1705340134.txt.gz · Последнее изменение: 2024/01/15 17:35 — Артем Слепов