Версия U‑boot‑1.1.1 не имеет встроенного драйвера LXT972, следовательно его необходимо интегрировать в текущую версию u‑boot‑1.1.1.
Для включения контроллера, нужно patch-файлами обновить исходные тексты U-boot под нашу версию реализации схемы (AT91RM9200‑SK) и ее особенности, отличные от традиционного включения процессора AT91RM9200‑DK(EK).
Традиционная версия программы U-boot-1.1.1 не предусматривает многих моментов, которые реализованы в нашей плате. Поэтому изменения нужно вносить с учетом специфики включения устройств или отдельных блоков.
Драйвер lxt972, как идеально подходящий, взят с более старшей версии u-boot-1.1.6 ( предварительно нужно старшую версию распаковать и скопировать во временную директорию).
Среди исходных текстов u-boot-1.1.6 нужно найти следующие 2 файла:
lxt971a.h (header) и lxt971a.c (source)
9.5.1 u‑boot‑1.1.1/include/lxt971a.h
Файл lxt971a.h копируется в директорию u‑boot‑1.1.1/include/.
Обязательно сделать эти изменения, так как наложенный patch-файл, как описывалось выше, вносит изменения в процедуры, которые нужны для других драйверов, но не для нашего.
Листинг программы, отображающий изменения в исходном тексте:
Добавление драйвера LXT972, требует обязательного редактирования некоторых процедур в исходном тексте программы u‑boot,в файле u‑boot‑1.1.1/board/RM9200/at91rm9200_ether.c, связанных с работой Ethernet контроллера.
Эти процедуры берутся из старшей версии u-boot-1.1.6 из файла lxt971a.c
Также, необходимо сделать следующее:
· Скопировать header «AT91RM9200.h» с текущей версии Romboot.
· Переименовать его в AT91RM9200_all.h.
· Скопировать в u-boot-1.1.1/include/
· Добавить header в at91rm9200_ether.c:
#include <AT91RM9200_all.h>
· Исправить то, что по умолчанию, на следующее:
Листинг программы, отображающий изменения в исходном тексте:
…
#ifdef CONFIG_PHY_IS_RTL8201
AT91S_PhyOps AT91S_Rtl8201Ops;
#elif defined (CONFIG_PHY_IS_LXT972)
AT91S_PhyOps AT91S_Lxt972Ops;
#else
AT91S_PhyOps AT91S_Dm9161Ops;
#endif
AT91PS_PhyOps pPhyOps;
…
// вставить процедуры из lxt971a.c
// эти процедуры и есть LXT972-драйвер !!!
//
#elif defined (CONFIG_PHY_IS_LXT972)
/*
* Name:
* lxt972_IsPhyConnected
* Description:
* Reads the 2 PHY ID registers
* Arguments:
* p_mac - pointer to AT91S_EMAC struct
* Return value:
* TRUE - if id read successfully
* FALSE- if error
*/
unsigned int lxt972_IsPhyConnected (AT91PS_EMAC p_mac)