INMYS WIKI

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

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

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


boards:nms-uq7-bklt:v1_ru:eth_addr

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
boards:nms-uq7-bklt:v1_ru:eth_addr [2024/01/15 16:36] Артем Слеповboards:nms-uq7-bklt:v1_ru:eth_addr [2024/01/26 09:57] (текущий) – [Переопределение MAC-адреса из Linux] Артем Слепов
Строка 2: Строка 2:
  
 MAC-адреса в модулях устанавливаются двумя способами:  MAC-адреса в модулях устанавливаются двумя способами: 
-  - Через переменные окружения U-boot +  - Вычитываются из I2C EEPROM 24AA025E48T-I/OT с прошитым EUI-48 
-  - Вычитываются из I2C EEPROM 24AA025E48T-I/OT с прошитым EUI-48.+  - Через переменные окружения U-boot (ethaddr и eth1addr)
  
-В розничных модулях по умолчанию используется 2-й способ.+Способ работы с MAC-адресами определяется на этапе сборки U-boot. 
 + 
 +В розничных модулях по умолчанию прошит 1-й способ.
  
-==== Переменные окружения ==== 
  
 ==== I2C EEPROM с EUI-48 ==== ==== 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] 1f047000+На модуле установлены 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. 
 +<code> 
 +[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 
 +      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 ~]#  
 + 
 +</code> 
 + 
 + 
 +==== Переменные окружения ==== 
 + 
 +В варианте, когда U-boot не вычитывает EEPROM с мак-адресами, необходимо самостоятельно иницилизировать переменнные окружения с желаемым адресом. 
 +В u-boot по умолчанию вкомпилированы адреса 4c:a5:15:9e:ce:20 и 4c:a5:15:9e:ce:21.  
 + 
 +Переменные окружения хранятся в NOR SPI Flash, в которую прошит U-boot:  
 +<code> 
 +[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" 
 +</code> 
 + 
 +Переменные 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. 
 +<code> 
 +BAIKAL # saveenv  
 +Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done 
 +OK 
 +BAIKAL #  
 +</code> 
 + 
 +=== Переменные окружения с точки зрения Linux === 
 +Linux читает переменные окружения опираясь на ///etc/fw_env.config//  
 +<code> 
 +[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 
 +</code> 
 + 
 +Если MTD device невалиден, то используются переменные окружения из ///etc/u-boot-initial-env// 
 + 
 +Оба файла задаются на этапе сборке rootfs. 
 + 
 +Linux должен корректно вычитывать переменные через fw_printenv (не должно быть сообщения //using default environment//). 
 + 
 +=== Переопределение MAC-адреса из Linux === 
 +Команда записи переменной окружения ethaddr: 
 +<code> 
 +fw_setenv ethaddr aa:bb:cc:dd:ee:ff  
 +</code> 
 + 
 +После перезагрузки MAC-адрес должен быть применен к сетевому интерфейсу и читаться через ifconfig 
 + 
 +<code> 
 +[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 
 +</code> 
 + 
 + 
 +=== Команды для автоматического назначения MAC из EEPROM === 
 +<code> 
 +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 
 +</code>
boards/nms-uq7-bklt/v1_ru/eth_addr.1705336614.txt.gz · Последнее изменение: 2024/01/15 16:36 — Артем Слепов