1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wenfengliaoshuzhai-uboot-1.1.6

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README 170 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 01:20 62ea018
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200
**Резюме:**
В этом каталоге находится исходный код U-Boot, загрузчика для встраиваемых плат на базе процессоров PowerPC, ARM, MIPS и некоторых других, который можно установить в загрузочное ПЗУ и использовать для инициализации и тестирования оборудования или загрузки и запуска прикладного кода.
Разработка U-Boot тесно связана с Linux: некоторые части исходного кода происходят из дерева исходных текстов Linux, у нас есть общие заголовочные файлы, и были приняты специальные меры для поддержки загрузки образов Linux.
Некоторое внимание было уделено тому, чтобы сделать это программное обеспечение легко настраиваемым и расширяемым. Например, все команды монитора реализованы с одним и тем же интерфейсом вызова, так что очень легко добавлять новые команды. Кроме того, вместо постоянного добавления редко используемого кода (например, утилит для тестирования оборудования) в монитор, вы можете загружать и запускать его динамически.
**Статус:**
Как правило, все платы, для которых существует опция конфигурации в Makefile, были протестированы до некоторой степени и могут считаться «работающими». Фактически, многие из них используются в производственных системах.
В случае возникновения проблем см. файлы CHANGELOG и CREDITS, чтобы узнать, кто внёс вклад в конкретный порт.
**Где получить помощь:**
Если у вас есть вопросы, проблемы или предложения по U-Boot, вам следует отправить сообщение в список рассылки U-Boot по адресу <u-boot-users@lists.sourceforge.net>. Также существует архив предыдущего трафика в списке рассылки — пожалуйста, поищите в архиве, прежде чем задавать часто задаваемые вопросы. Пожалуйста, смотрите http://lists.sourceforge.net/lists/listinfo/u-boot-users/.
**Откуда мы пришли:**
— начать с источников 8xxrom;
— создать проект PPCBoot (http://sourceforge.net/projects/ppcboot);
— очистить код;
— упростить добавление пользовательских плат;
— сделать возможным добавление других процессоров [PowerPC];
— расширить функции, особенно:
* предоставить расширенный интерфейс для загрузчика Linux;
* загрузка S-Record;
* сетевая загрузка;
* загрузка PCMCIA / CompactFLash / ATA disk / SCSI...;
— создать проект ARMBoot (http://sourceforge.net/projects/armboot);
— добавить другие семейства процессоров (начиная с ARM);
— создать проект U-Boot (http://sourceforge.net/projects/u-boot).
**Названия и написание:**
«Официальное» название этого проекта — «Das U-Boot». Написание «U-Boot» должно использоваться во всех письменных текстах (документация, комментарии в исходных файлах и т. д.). Пример:
Это файл README для проекта U-Boot.
Имена файлов и т.д. должны основываться на строке «u-boot». Примеры:
include/asm-ppc/u-boot.h
#include <asm/u-boot.h>
Переменные имена, константы препроцессора и т.д. должны быть либо основаны на строке «u_boot», либо на «U_BOOT». Пример:
U_BOOT_VERSION u_boot_logo
IH_OS_U_BOOT u_boot_hush_start
**Версии:**
U-Boot использует трёхуровневый номер версии, содержащий версию, подверсию и уровень исправления: «U-Boot-2.34.5» означает версию «2», подверсию «34» и уровень исправления «4».
Уровень исправления используется для обозначения определённых этапов разработки между выпущенными версиями, то есть официально выпущенные версии U-Boot всегда будут иметь уровень исправления «0».
**Иерархия каталогов:**
— board — файлы, зависящие от платы;
— common — разное. Функции, независимые от архитектуры:
- **CPU**:
- Файлы для процессоров Freescale MPC74xx и 7xx.
- Файлы для ARM 720.
- Файлы для ARM 920:
- Файлы для Atmel AT91RM9200.
- Файлы для Freescale MC9328 i.MX.
- Файлы для Samsung S3C24X0.
- Файлы для ARM 925.
- Файлы для ARM 926.
- Файлы для ARM 1136.
- Файлы для Atmel AVR32 AP.
- Файлы для i386.
- Файлы для Intel XScale IXP.
- Файлы для Freescale ColdFire MCF52x2.
- Файлы для MIPS.
- Файлы для Freescale MPC5xx.
- Файлы для Freesscale MPC5xxx.
- Файлы для Freescale MPC8xx.
- Файлы для Freescale MPC8220.
- Файлы для Freescale MPC824x.
- Файлы для Freescale MPC8260.
- Файлы для Freescale MPC85xx.
- Файлы для Altera NIOS.
- Файлы для Altera Nios-II.
- Файлы для AMCC PowerPC 4xx.
- Файлы для Intel XScale PXA.
- Файлы для Samsung S3C44B0.
- Файлы для Intel StrongARM SA1100.
Программное обеспечение:
Конфигурация обычно выполняется с использованием определений препроцессора C. Это делается для того, чтобы избежать мёртвого кода, когда это возможно.
Существует два класса переменных конфигурации:
* **Опции конфигурации (CONFIG_)**: выбираются пользователем.
* **Настройки конфигурации (CFG_)**: зависят от оборудования и т. д., не рекомендуется изменять их без понимания последствий; устанавливаются автоматически.
Позже мы добавим инструмент конфигурации — вероятно, похожий или даже идентичный тому, который используется для ядра Linux. Сейчас конфигурацию нужно выполнять вручную, что означает создание символических ссылок и редактирование некоторых файлов конфигурации. В качестве примера здесь используются платы TQM8xxL.
Выбор архитектуры процессора и типа платы:
Для всех поддерживаемых плат доступны готовые к использованию конфигурации по умолчанию; просто введите «make <board_name>_config».
Пример: для модуля TQM823L введите:
cd u-boot
make TQM823L_config
Для платформы Cogent необходимо также указать тип процессора; например, «make cogent_mpc8xx_config». Также настройте каталог cogent в соответствии с инструкциями в файле cogent/README.
Опции конфигурации:
Конфигурация зависит от сочетания типа платы и процессора; вся такая информация хранится в файле конфигурации «include/configs/<board_name>.h».
Многие опции названы точно так же, как соответствующие опции конфигурации ядра Linux. Цель состоит в том, чтобы упростить создание инструмента конфигурации позже.
Необходимо настроить следующие параметры:
— Процессор. **Тип процессора**:
* PowerPC: CONFIG_MPC823, CONFIG_MPC850, CONFIG_MPC855, CONFIG_MPC860 или CONFIG_MPC5xx, CONFIG_MPC8220, CONFIG_MPC824X, CONFIG_MPC8260, CONFIG_MPC85xx, CONFIG_IOP480, CONFIG_405GP, CONFIG_405EP, CONFIG_440, CONFIG_MPC74xx, CONFIG_750FX;
* ARM: CONFIG_SA1110, CONFIG_ARM7, CONFIG_PXA250, CONFIG_CPU_MONAHANS;
* MicroBlaze: CONFIG_MICROBLAZE;
* Nios-2: CONFIG_NIOS2;
* AVR32: CONFIG_AT32AP.
**Тип платы**:
* на базе процессоров PowerPC:
* CONFIG_ADCIOP, CONFIG_FPS860L, CONFIG_OXC, CONFIG_ADS860, CONFIG_GEN860T, CONFIG_PCI405, CONFIG_AMX860, CONFIG_GENIETV, CONFIG_PCIPPC2, CONFIG_AP1000, CONFIG_GTH, CONFIG_pcu_e, CONFIG_AR405, CONFIG_gw8260, CONFIG_hermes, CONFIG_PIP405 и т. д.;
* на базе ARM:
* CONFIG_ARMADILLO, CONFIG_AT91RM9200DK, CONFIG_CERF250, CONFIG_CSB637, CONFIG_DELTA, CONFIG_DNP1110 и т.д.
* на базе MicroBlaze:
* CONFIG_SUZAKU;
* на базе Nios-2:
* CONFIG_PCI5441, CONFIG_PK1C20, CONFIG_EP1C20, CONFIG_EP1S10, CONFIG_EP1S40. **Платы на базе AVR32:**
CONFIG_ATSTK1000:
- Тип дочерней платы ЦПУ (если определён CONFIG_ATSTK1000):
Определить ровно один из:
CONFIG_ATSTK1002.
- Тип модуля ЦПУ (если определён CONFIG_COGENT):
Определить ровно один из:
CONFIG_CMA286_60_OLD.
--- FIXME --- не проверено:
CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
CONFIG_CMA287_23, CONFIG_CMA287_50.
- Тип материнской платы (если определён CONFIG_COGENT):
Определить ровно один из:
CONFIG_CMA101, CONFIG_CMA102.
- Модули ввода-вывода материнской платы (если определён CONFIG_COGENT):
Определить один или более из:
CONFIG_CMA302.
- Опции материнской платы (если определены CONFIG_CMA101 или CONFIG_CMA102):
Определить одну или более из:
CONFIG_LCD_HEARTBEAT — обновление позиции символа на ЖК-дисплее каждую секунду с помощью «ротатора» |\-/|\-/
- Вариант платы (если определён CONFIG_MPC8260ADS):
CONFIG_ADSTYPE. Возможные значения:
CFG_8260ADS — оригинальный MPC8260ADS;
CFG_8266ADS — MPC8266ADS;
CFG_PQ2FADS — PQ2FADS-ZU или PQ2FADS-VR;
CFG_8272ADS — MPC8272ADS.
- Член семейства MPC824X (если определён CONFIG_MPC824X):
Определить ровно один из:
CONFIG_MPC8240, CONFIG_MPC8245.
- Параметры процессоров 8xx (если используется процессор MPC8xx):
CONFIG_8xx_GCLK_FREQ — устаревший параметр: частота тактового генератора процессора, если get_gclk_freq() не работает, например, если нет 32 кГц опорной частоты PIT/RTC;
CONFIG_8xx_OSCLK — вход тактовой частоты ПЛИС (либо EXTCLK, либо XTAL/EXTAL).
- Варианты процессоров 859/866/885 (если используются процессоры MPC859, MPC866 или MPC885):
CFG_8xx_CPUCLK_MIN;
CFG_8xx_CPUCLK_MAX;
CONFIG_8xx_CPUCLK_DEFAULT — см. doc/README.MPC866;
CFG_MEASURE_CPUCLK — определить этот параметр для измерения фактической частоты процессора вместо того, чтобы полагаться на правильность настроенных значений. В основном полезно для запуска платы, чтобы убедиться, что ПЛИС заблокирована на заданной частоте. Обратите внимание, что для этого требуется (стабильная) опорная частота (32 кГц RTC или CFG_8XX_XIN).
- Intel Monahans:
CFG_MONAHANS_RUN_MODE_OSC_RATIO — определяет соотношение режима работы Monahans к частоте генератора. Допустимые значения: 8, 16, 24, 31. Частота ядра равна этому значению, умноженному на 13 МГц;
CFG_MONAHANS_TURBO_RUN_MODE_RATIO — определяет отношение частоты в режиме турбо к частоте генератора. Значение по умолчанию — 1 (определяется, если не определено), 2. Частота ядра, рассчитанная выше, умножается на это значение.
**Интерфейс ядра Linux:**
CONFIG_CLOCKS_IN_MHZ — U-Boot хранит всю информацию о часах в Гц внутри. Для двоичной совместимости со старыми ядрами Linux (которые ожидают, что часы, переданные в данных bd_info, будут в МГц), можно определить переменную среды «clocks_in_mhz», чтобы U-Boot преобразовал данные часов в МГц перед передачей их ядру Linux. Когда определён CONFIG_CLOCKS_IN_MHZ, определение «clocks_in_mhz=1» автоматически включается в среду по умолчанию.
CONFIG_MEMSIZE_IN_BYTES — при передаче параметра memsize в Linux некоторые версии ожидают его в байтах, другие — в МБ. Определите CONFIG_MEMSIZE_IN_BYTES, чтобы он был в байтах.
CONFIG_OF_FLAT_TREE — новые версии ядра ожидают, что параметры прошивки будут переданы с использованием плоских деревьев открытой прошивки. Переменная среды «disable_of», когда она установлена, отключает эту функцию.
CONFIG_OF_FLAT_TREE_MAX_SIZE — максимальный размер построенного дерева OF.
OF_CPU — правильное название узла cpus.
OF_SOC — правильное название узла soc.
OF_TBCLK — частота временной базы.
OF_STDOUT_PATH — путь к устройству консоли.
CONFIG_OF_HAS_BD_T — ... В результате в плоском дереве устройств будет копия bd_t.
Для bd_t в dts должно быть предварительно выделено пространство.
CONFIG_OF_HAS_UBOOT_ENV
В результирующем плоском дереве устройств также будут копии переменных среды u-boot.
CONFIG_OF_BOARD_SETUP
Код платы имеет дополнительные модификации, которые он хочет внести в плоское дерево устройств перед передачей его ядру.
CONFIG_OF_BOOT_CPU
Это определение заполняет правильный загрузочный процессор в заголовке параметров загрузки, значение по умолчанию равно нулю, если не определено.
**Последовательные порты:**
CFG_PL010_SERIAL
Определите это, если вам нужна поддержка UART Amba PrimeCell PL010.
CFG_PL011_SERIAL
Определите это, если вам нужна поддержка UART Amba PrimeCell PL011.
CONFIG_PL011_CLOCK
Если у вас есть UART Amba PrimeCell PL011, установите эту переменную на тактовую частоту UART.
CONFIG_PL01x_PORTS
Если на вашей плате есть UART Amba PrimeCell PL010 или PL011, определите это как список базовых адресов для каждого (поддерживаемого) порта. См., например, include/configs/versatile.h
**Интерфейс консоли:**
В зависимости от платы определите ровно один последовательный порт (например, CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2, CONFIG_8xx_CONS_SCC1 и т. д.) или отключите последовательную консоль, определив CONFIG_8xx_CONS_NONE.
Примечание: если определено CONFIG_8xx_CONS_NONE, процедуры последовательного порта должны быть определены в другом месте (т. е. serial_init(), serial_getc() и т.д.).
CONFIG_CFB_CONSOLE
Включает устройство консоли для цветного фреймбуфера. Требуются следующие определения (см. smiLynxEM, i8042, board/eltec/bab7xx):
* VIDEO_FB_LITTLE_ENDIAN — организация графической памяти (по умолчанию — с большим порядком байтов).
* VIDEO_HW_RECTFILL — графический чип поддерживает заливку прямоугольника (см. smiLynxEM).
* VIDEO_HW_BITBLT — графический чип поддерживает битовое копирование (см. smiLynxEM).
* VIDEO_VISIBLE_COLS — видимые пиксельные столбцы (cols = шаг).
* VIDEO_VISIBLE_ROWS — видимые строки пикселей.
* VIDEO_PIXEL_SIZE — байты на пиксель.
* VIDEO_DATA_FORMAT — формат графических данных (0–5, см. cfb_console.c).
* VIDEO_FB_ADRS — адрес фреймбуфера.
* VIDEO_KBD_INIT_FCT — функция инициализации клавиатуры (например, i8042_kbd_init()).
* VIDEO_TSTC_FCT — тестовая символьная функция (например, i8042_tstc).
* VIDEO_GETC_FCT — получить символьную функцию (например, i8042_getc).
* CONFIG_CONSOLE_CURSOR — рисование курсора включено/выключено (требуется таймер мигания, см. i8042.c).
* CFG_CONSOLE_BLINK_COUNT — интервал мигания (см. i8042.c).
* CONFIG_CONSOLE_TIME — отображение времени/даты в правом верхнем углу (требуется CFG_CMD_DATE).
* CONFIG_VIDEO_LOGO — отображение логотипа Linux в левом верхнем углу.
* CONFIG_VIDEO_BMP_LOGO — используйте bmp_logo.h вместо linux_logo.h для логотипа. Требуется CONFIG_VIDEO_LOGO.
* CONFIG_CONSOLE_EXTRA_INFO — дополнительная информация о плате рядом с логотипом.
Когда определено CONFIG_CFB_CONSOLE, видеоконсоль является стандартным вводом-выводом по умолчанию. Последовательную консоль можно принудительно использовать с помощью среды «console=serial».
Когда определено CONFIG_SILENT_CONSOLE, все консольные сообщения (от U-Boot и Linux!) можно отключить с помощью переменной среды «silent». Дополнительную информацию см. в doc/README.silent.
**Скорость передачи последовательного порта:**
CONFIG_BAUDRATE — в бит/с.
Выберите одну из скоростей передачи, перечисленных в CFG_BAUDRATE_TABLE, см. ниже.
CFG_BRGCLK_PRESCALE — коэффициент предделения тактовой частоты генератора скорости передачи.
**Ввод последовательного порта с прерыванием:**
CONFIG_SERIAL_SOFTWARE_FIFO
Только PPC405GP. Используйте обработчик прерываний для... Получение данных по последовательному порту. Также позволяет использовать аппаратное квитирование (RTS/CTS) и встроенный FIFO UART. Установите количество байтов, которое должен иметь входной буфер, управляемый прерываниями.
Оставьте неопределённым, чтобы отключить эту функцию, включая отключение буфера и аппаратного квитирования.
- Консольный UART номер:
CONFIG_UART1_CONSOLE
AMCC PPC4xx только. Если определено, внутренний UART1 (а не UART0) используется в качестве консоли U-Boot по умолчанию.
- Задержка перед загрузкой: CONFIG_BOOTDELAY — в секундах.
Задержка перед автоматической загрузкой образа по умолчанию; установите -1, чтобы отключить автозагрузку.
См. doc/README.autoboot для этих параметров, которые работают с CONFIG_BOOTDELAY. Ни один из них не является обязательным.
CONFIG_BOOT_RETRY_TIME
CONFIG_BOOT_RETRY_MIN
CONFIG_AUTOBOOT_KEYED
CONFIG_AUTOBOOT_PROMPT
CONFIG_AUTOBOOT_DELAY_STR
CONFIG_AUTOBOOT_STOP_STR
CONFIG_AUTOBOOT_DELAY_STR2
CONFIG_AUTOBOOT_STOP_STR2
CONFIG_ZERO_BOOTDELAY_CHECK
CONFIG_RESET_TO_RETRY
- Команда автозагрузки:
CONFIG_BOOTCOMMAND
Требуется только при включённом CONFIG_BOOTDELAY; определите строку команды, которая автоматически выполняется, когда после сброса на интерфейсе консоли в течение «Задержки перед загрузкой» не считывается ни один символ.
CONFIG_BOOTARGS
Может использоваться для передачи аргументов команде bootm. Значение CONFIG_BOOTARGS помещается в значение среды «bootargs».
CONFIG_RAMBOOT и CONFIG_NFSBOOT
Значение этих параметров помещается в среду как «ramboot» и «nfsboot» соответственно и может быть использовано для удобства при переключении между загрузкой из оперативной памяти и NFS.
- Команды перед загрузкой:
CONFIG_PREBOOT
Когда этот параметр определён, будет немедленно проверяться существование переменной среды «preboot» перед началом обратного отсчёта CONFIG_BOOTDELAY и/или выполнением команды автозагрузки или переходом в интерактивный режим.
Эта функция особенно полезна, когда «preboot» генерируется или изменяется автоматически. Пример см. в специальном коде платы LWMON: здесь «preboot» изменяется, когда пользователь удерживает определённую комбинацию клавиш на (специальной) клавиатуре при загрузке системы.
- Режим эха при последовательной загрузке:
CONFIG_LOADS_ECHO
Если определено как 1, все символы, полученные во время последовательной загрузки (с использованием команды loads), возвращаются обратно. Это может потребоваться некоторым эмуляторам терминала (например, «cu»), но может занять время на других. Этот параметр определяет начальное значение переменной среды loads_echo.
- Скорость передачи в бодах kgdb (если определено CFG_CMD_KGDB):
CONFIG_KGDB_BAUDRATE
Выберите одну из скоростей передачи, перечисленных в CFG_BAUDRATE_TABLE, см. ниже.
- Функции монитора:
CONFIG_COMMANDS
Большинство функций монитора можно выбрать (или отменить выбор), настроив определение CONFIG_COMMANDS; чтобы выбрать отдельные функции, определите CONFIG_COMMANDS, используя «ИЛИ» для любого из следующих значений:
#define включает команды:
-------------------------
CFG_CMD_ASKENV * запросить переменную среды
CFG_CMD_AUTOSCRIPT поддержка Autoscript
CFG_CMD_BDI bdinfo
CFG_CMD_BEDBUG * включить отладчик BedBug
CFG_CMD_BMP * поддержка BMP
CFG_CMD_BSP * специальные команды платы
CFG_CMD_BOOTD bootd
CFG_CMD_CACHE * icache, dcache
CFG_CMD_CONSOLE coninfo
CFG_CMD_DATE * поддержка RTC, дата/время...
CFG_CMD_DHCP * поддержка DHCP
CFG_CMD_DIAG * диагностика
CFG_CMD_DOC * поддержка Disk-On-Chip
CFG_CMD_DTT * цифровой термостат
CFG_CMD_ECHO аргументы echo
CFG_CMD_EEPROM * поддержка чтения/записи EEPROM
CFG_CMD_ELF * bootelf, bootvx
CFG_CMD_ENV saveenv
CFG_CMD_FDC * флоппи-диск **Поддержка дисков**
CFG_CMD_FAT * Поддержка разделов FAT.
CFG_CMD_FDOS * Поддержка дискет Dos.
CFG_CMD_FLASH flinfo, erase, protect.
CFG_CMD_FPGA * Поддержка инициализации устройства FPGA.
CFG_CMD_HWFLOW * Поддержка аппаратного управления потоком RTS/CTS.
CFG_CMD_I2C * Поддержка последовательной шины I2C.
CFG_CMD_IDE * Поддержка жёсткого диска IDE.
CFG_CMD_IMI iminfo.
CFG_CMD_IMLS * Список всех найденных образов.
CFG_CMD_IMMAP * Поддержка дампа IMMR.
CFG_CMD_IRQ * irqinfo.
CFG_CMD_ITEST * Целочисленное/строковое тестирование двух значений.
CFG_CMD_JFFS2 * Поддержка JFFS2.
CFG_CMD_KGDB * kgdb.
CFG_CMD_LOADB * loadb.
CFG_CMD_LOADS * loads.
CFG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base, loop, loopw, mtest.
CFG_CMD_MISC * Разные функции, такие как sleep и т. д.
CFG_CMD_MMC * Поддержка MMC с отображением памяти.
CFG_CMD_MII * Утилитарные команды MII.
CFG_CMD_NAND * Поддержка NAND.
CFG_CMD_NET bootp, tftpboot, rarpboot.
CFG_CMD_PCI * pciinfo.
CFG_CMD_PCMCIA * Поддержка PCMCIA.
CFG_CMD_PING * Отправка ICMP ECHO_REQUEST на сетевой хост.
CFG_CMD_PORTIO * Порт ввода-вывода.
CFG_CMD_REGINFO * Считывание регистра.
CFG_CMD_RUN * Запуск команды в переменной окружения.
CFG_CMD_SAVES * Сохранить дамп записи S.
CFG_CMD_SCSI * Поддержка SCSI.
CFG_CMD_SDRAM * Распечатать информацию о конфигурации SDRAM (требуется CFG_CMD_I2C).
CFG_CMD_SETGETDCR * Поддержка доступа к регистру DCR (только 4xx).
CFG_CMD_SPI * Поддержка SPI.
CFG_CMD_USB * Поддержка USB.
CFG_CMD_VFD * Поддержка VFD (TRAB).
CFG_CMD_BSP * Функции платы.
CFG_CMD_CDP * Поддержка протокола обнаружения Cisco.
-----------------------------------------------
CFG_CMD_ALL все.
CONFIG_CMD_DFL * По умолчанию включает все команды, кроме отмеченных «*» в списке выше.
Если вы не определяете CONFIG_COMMANDS, по умолчанию используется CONFIG_CMD_DFL в include/cmd_confdefs.h. Плата может переопределить настройки по умолчанию в соответствующем файле включения.
Пример: если вы хотите использовать все функции, кроме поддержки сети, вы можете написать:
#define CONFIG_COMMANDS (CFG_CMD_ALL & ~CFG_CMD_NET)
Примечание: не включайте команды «icache» и «dcache» (опция конфигурации CFG_CMD_CACHE), если вы не знаете, что делаете вы и ваши пользователи U-Boot. Кэш данных нельзя включить в таких системах, как 8xx или 8260 (где доступ к области IMMR должен быть некэшированным), и его нельзя отключить во всех других системах, где мы (неправильно) используем кэш данных для хранения начального стека и некоторых данных.
XXX — этот список необходимо обновить!
**Сторожевой таймер:**
CONFIG_WATCHDOG.
Эта переменная позволяет включить поддержку сторожевого таймера. В платформенном коде должна быть поддержка сторожевого таймера. Для процессоров 8xx и 8260 функция сторожевого таймера SIU включена в регистре SYPCR.
**Версия U-Boot:**
CONFIG_VERSION_VARIABLE.
Если эта переменная определена, U-Boot создаёт переменную среды с именем «ver», показывающую версию U-Boot, напечатанную командой «version». Эта переменная доступна только для чтения.
**Часы реального времени:**
При выборе CFG_CMD_DATE необходимо также выбрать тип RTC. Определите ровно один из следующих параметров:
* CONFIG_RTC_MPC8xx — использовать внутренний RTC MPC8xx;
* CONFIG_RTC_PCF8563 — использовать Philips PCF8563 RTC;
* CONFIG_RTC_MC146818 — использовать MC146818 RTC;
* CONFIG_RTC_DS1307 — использовать Maxim, Inc. DS1307 RTC;
* CONFIG_RTC_DS1337 — использовать Maxim, Inc. DS1337 RTC;
* CONFIG_RTC_DS1338 — использовать Maxim, Inc. DS1338 RTC;
* CONFIG_RTC_DS164x — использовать Dallas DS164x RTC;
* CONFIG_RTC_MAX6900 — использовать Maxim, Inc. MAX6900 RTC.
Обратите внимание, что если RTC использует I2C, то... Интерфейс I2C также должен быть настроен. См. раздел «Поддержка I2C» ниже.
- Поддержка временных меток:
Когда выбрана CONFIG_TIMESTAMP, временная метка (дата и время) изображения печатается командами изображения, такими как bootm или iminfo. Эта опция автоматически включается при выборе CFG_CMD_DATE.
- Поддержка разделов:
CONFIG_MAC_PARTITION и/или CONFIG_DOS_PARTITION и/или CONFIG_ISO_PARTITION.
Если поддержка IDE или SCSI включена (CFG_CMD_IDE или CFG_CMD_SCSI), вы также должны настроить поддержку хотя бы одного типа раздела.
- Метод сброса IDE:
CONFIG_IDE_RESET_ROUTINE — этот метод определён в нескольких файлах конфигурации плат, но нигде не используется!
CONFIG_IDE_RESET — если этот параметр определён, сброс IDE будет выполняться путём вызова функции ide_set_reset(int reset), которая должна быть определена в файле, специфичном для платы.
- ATAPI-поддержка:
CONFIG_ATAPI.
Установите этот параметр, чтобы включить поддержку ATAPI.
- LBA48-поддержка:
CONFIG_LBA48.
Включите этот параметр для поддержки дисков размером более 137 ГБ. Также обратите внимание на CFG_64BIT_LBA, CFG_64BIT_VSPRINTF и CFG_64BIT_STRTOUL. Без них поддержка LBA48 использует 32-битные переменные и будет поддерживать диски только до 2,1 ТБ.
CFG_64BIT_LBA:
При включении IDE-подсистема использует 64-битные адреса секторов. По умолчанию используется 32 бита.
- SCSI-поддержка:
На данный момент поддерживается только контроллер SCSI SYM53C8XX; определите CONFIG_SCSI_SYM53C8XX, чтобы включить его.
CFG_SCSI_MAX_LUN [8], CFG_SCSI_MAX_SCSI_ID [7] и
CFG_SCSI_MAX_DEVICE [CFG_SCSI_MAX_SCSI_ID *
CFG_SCSI_MAX_LUN] можно настроить для определения максимального количества LUN, SCSI ID и целевых устройств. CFG_SCSI_SYM53C8XX_CCF используется для фиксации тактовой частоты (80 МГц).
- Сетевая поддержка (PCI):
CONFIG_E1000. Поддержка чипов Intel 8254x Gigabit.
CONFIG_EEPRO100. Поддержка Intel 82557/82559/82559ER чипы. Необязательная CONFIG_EEPRO100_SROM_WRITE включает процедуру записи EEPROM для начальной инициализации.
CONFIG_TULIP. Поддержка Digital 2114x чипов. Необязательный CONFIG_TULIP_SELECT_MEDIA для инициализации конкретного модема (KS8761/QS6611).
CONFIG_NATSEMI. Поддержка National dp83815 чипов.
CONFIG_NS8382X. Поддержка National dp8382[01] гигабитных чипов.
- Сетевая поддержка (другое):
CONFIG_DRIVER_LAN91C96. Поддержка чипов SMSC LAN91C96.
CONFIG_LAN91C96_BASE. Определите это, чтобы сохранить физический адрес пространства ввода-вывода LAN91C96.
CONFIG_LAN91C96_USE_32_BIT. Определите это для включения 32-разрядной адресации.
CONFIG_DRIVER_SMC91111. Поддержка чипа SMSC LAN91C111.
CONFIG_SMC91111_BASE. Определите это, чтобы сохранить физический адрес устройства (пространство ввода-вывода).
CONFIG_SMC_USE_32_BIT. Определите, если шина данных 32 бит.
CONFIG_SMC_USE_IOFUNCS. Определите, чтобы использовать функции ввода-вывода вместо макросов (некоторое оборудование не будет работать с макросами).
- USB-поддержка:
В настоящее время поддерживается только хост-контроллер UHCI (PIP405, MIP405, MPC5200); определите CONFIG_USB_UHCI, чтобы включить его. Определите CONFIG_USB_KEYBOARD, чтобы включить USB-клавиатуру, и определите CONFIG_USB_STORAGE, чтобы включить запоминающие USB-устройства. Обратите внимание: поддерживаются USB-клавиатуры и USB-накопители (TEAC FD-05PUB). Для MPC5200 USB требуются дополнительные определения:
CONFIG_USB_CLOCK для тактовой частоты 528 МГц: 0x0001bbbb.
CONFIG_USB_CONFIG для дифференциальных драйверов: 0x00001000, для однополярных драйверов: 0x00005000.
- MMC-поддержка:
Поддерживается контроллер MMC на Intel PXA. Чтобы включить эту функцию, определите CONFIG_MMC. Доступ к MMC можно получить из загрузочного приглашения. Сопоставление устройства с физической памятью, подобной флэш-памяти. Командная строка включена с помощью CFG_CMD_MMC. Драйвер MMC также работает с файловой системой FAT, что включено с помощью CFG_CMD_FAT.
* Поддержка журналируемой файловой системы Flash:
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE, CONFIG_JFFS2_NAND_DEV — определяют для стандартного раздела на устройстве NAND;
CFG_JFFS2_FIRST_SECTOR, CFG_JFFS2_FIRST_BANK, CFG_JFJFS2_NUM_BANKS — определяют для стандартного раздела на устройстве NOR;
CFG_JFFS_CUSTOM_PART — создаёт собственный раздел. Необходимо предоставить функцию struct part_info* jffs2_part_info(int part_num).
Если вы определяете только один раздел JFFS2, вы также можете захотеть определить #define CFG_JFFS_SINGLE_PART 1, чтобы отключить команду chpart. Это значение по умолчанию, если вы не определили пользовательский раздел.
* Поддержка клавиатуры:
CONFIG_ISA_KEYBOARD — определяет стандартную (в стиле ПК) поддержку клавиатуры;
CONFIG_I8042_KBD — стандартный драйвер клавиатуры ПК с поддержкой раскладки US (по умолчанию) и GERMAN (переключение через среду «keymap=de»). Экспорт функций i8042_kbd_init, i8042_tstc и i8042_getc для cfb_console. Поддерживает мигание курсора.
* Видеоподдержка:
CONFIG_VIDEO — определяет поддержку видео (для вывода на видео);
CONFIG_VIDEO_CT69000 — включает видеочип Chips & Technologies 69000;
CONFIG_VIDEO_SMI_LYNXEM — включает видеочип Silicon Motion SMI 712/710/810. Видеовыход выбирается через среду 'videoout' (1 = LCD и 2 = CRT). Если videoout не определено, предполагается CRT.
Для драйверов CT69000 и SMI_LYNXEM режим видео выбирается через среду videomode. Возможны два разных способа:
— «videomode=num», где 'num' — это стандартные номера режимов LiLo. Поддерживаются следующие стандартные режимы (* — по умолчанию):
| Цвета | 640x480 | 800x600 | 1024x768 | 1152x864 | 1280x1024 |
|:----:|:------:|:-----:|:--------:|:-------:|:---------:|
| 8 бит | 0x301* | 0x303 | 0x305 | 0x161 | 0x307 |
| 15 бит | 0x310 | 0x313 | 0x316 | 0x162 | 0x319 |
| 16 бит | 0x311 | 0x314 | 0x317 | 0x163 | 0x31A |
| 24 бит | 0x312 | 0x315 | 0x318 | ? | 0x31B |
— «videomode=bootargs» — все параметры видео анализируются из bootargs. (См. драйверы/видеорежимы.c).
CONFIG_VIDEO_SED13806 — включает драйвер Epson SED13806. Этот драйвер поддерживает 8bpp и 16bpp режимы, определённые с помощью CONFIG_VIDEO_SED13806_8BPP или CONFIG_VIDEO_SED13806_16BPP.
* Поддержка клавиатуры:
CONFIG_KEYBOARD — определяет пользовательскую поддержку клавиатуры. Просто вызывает drv_keyboard_init(), который должен быть определён в ваших файлах, специфичных для платы. Пока что эту функцию использует только RBC823.
* ЖК-поддержка: CONFIG_LCD — определяет ЖК-поддержку (для вывода на ЖК-дисплей), а также выбирает один из поддерживаемых дисплеев, определяя один из следующих параметров:
CONFIG_NEC_NL6448AC33 — NEC NL6448AC33-18. Активный, цветной, одно сканирование.
CONFIG_NEC_NL6448BC20 — NEC NL6448BC20-08. 6,5", 640x480. Активный, цветной, односканирование.
CONFIG_NEC_NL6448BC33_54 — NEC NL6448BC33-54. 10,4", 640x480. Активный, цветной, односканирование.
CONFIG_SHARP_16x9 — Sharp 320x240. Активный, цветной, односканирование. Не 16x9, и я не уверен, что это такое.
CONFIG_SHARP_LQ64D341 — Sharp LQ64D341 дисплей, 640x480. Активный, цветной, односканирование.
CONFIG_HLD1045 — HLD1045 дисплей, 640x480. Активный, цветной, односканирование.
CONFIG_OPTREX_BW — Optrex CBL50840-2 NF-FW. 99 22 M5
или
Hitachi LMG6912RPFC-00T
или
Hitachi SP14Q002
320x240. Чёрно-белое изображение.
Обычно дисплей отображается чёрным цветом на белом фоне; определите CFG_WHITE_ON_BLACK, чтобы инвертировать его.
* Поддержка заставки экрана: CONFIG_SPLASH_SCREEN
Если эта опция установлена, среда проверяется на наличие переменной «splashimage». Если она найдена, обычное отображение логотипа, авторских прав и системной информации на ЖК-дисплее подавляется, и вместо этого загружается растровое изображение BMP по адресу, указанному в «splashimage». Консоль также перенаправляется на «nulldev». Это позволяет выполнить «тихую» загрузку, при которой заставка загружается очень быстро после включения питания.
* Поддержка сжатых изображений BMP в формате Gzip: CONFIG_VIDEO_BMP_GZIP
Если эта опция установлена, помимо стандартных изображений BMP, можно отображать сжатые изображения BMP через поддержку заставки или команду bmp.
* Поддержка сжатия:
CONFIG_BZIP2
Если эта опция установлена, включена поддержка изображений, сжатых с помощью алгоритма bzip2. В противном случае поддерживаются только несжатые и сжатые с помощью Gzip изображения.
Примечание: алгоритм bzip2 требует много оперативной памяти, поэтому область malloc (определённая CFG_MALLOC_LEN) должна быть не менее 4 МБ.
* Поддержка MII/PHY:
CONFIG_PHY_ADDR
Адрес PHY на шине MII.
CONFIG_PHY_CLOCK_FREQ (ppc4xx)
Тактовая частота шины MII.
CONFIG_PHY_GIGE
Если эта опция включена, поддерживается определение скорости/дуплекса гигабитного PHY.
CONFIG_PHY_RESET_DELAY
Некоторым PHY, таким как Intel LXT971A, требуется дополнительная задержка после сброса, прежде чем станет возможным доступ к регистрам MII. Для таких PHY установите эту опцию на требуемую задержку в микросекундах (минимум 300 мкс для LXT971A).
CONFIG_PHY_CMD_DELAY (ppc4xx)
Некоторые PHY, такие как Intel LXT971A, требуют дополнительной задержки после выдачи команды, прежде чем можно будет прочитать регистр состояния MII.
* Ethernet-адрес:
CONFIG_ETHADDR
CONFIG_ETH2ADDR
CONFIG_ETH3ADDR
Определите значение по умолчанию для адреса Ethernet для соответствующего интерфейса Ethernet, если он не определяется автоматически.
* IP-адрес:
CONFIG_IPADDR
Определите значение по умолчанию для IP-адреса для основного интерфейса Ethernet, если оно не определено, например, через bootp.
* Сервер IP-адресов:
CONFIG_SERVERIP
Определяет значение по умолчанию для IP-адреса TFTP-сервера, с которым следует связаться при использовании команды tftboot.
* Режим восстановления BOOTP:
CONFIG_BOOTP_RANDOM_DELAY
Если у вас есть много целей в сети, которые пытаются загрузиться с использованием BOOTP, вы можете избежать того, что все системы будут отправлять запросы BOOTP точно в один и тот же момент (что может произойти, например, при восстановлении после сбоя питания, когда все системы попытаются загрузиться, тем самым перегружая сервер BOOTP. Определение CONFIG_BOOTP_RANDOM_DELAY приводит к вставке случайной задержки перед отправкой запросов BOOTP. Затем вставляются следующие задержки:
1-й запрос BOOTP: задержка 0...1 сек
2-й запрос BOOTP: задержка 0...2 сек
3-й запрос BOOTP: задержка 0...4 сек
4-й и последующие запросы BOOTP: задержка 0...8 сек
* Расширенные параметры DHCP:
CONFIG_BOOTP_MASK
Вы можете настроить функциональность DHCP, добавив эти флаги в определение CONFIG_BOOTP_MASK:
CONFIG_BOOTP_DNS2 — если клиент DHCP запрашивает IP-адрес DNS-сервера у сервера DHCP, возможно, клиенту будет предложено более одного IP-адреса DNS-сервера. Если CONFIG_BOOTP_DNS2 включён, вторичный IP-адрес DNS будет сохранён в дополнительной переменной среды «dnsip2». Первый IP-адрес DNS всегда сохраняется в переменной «dnsip», когда CONFIG_BOOTP_DNS добавляется в CONFIG_BOOTP_MASK. **CONFIG_BOOTP_SEND_HOSTNAME** — некоторые DHCP-серверы способны динамически обновлять DNS-сервер. Для этого им требуется имя хоста запрашивающего DHCP.
Если **CONFIG_BOOP_SEND_HOSTNAME** добавить в **CONFIG_BOOTP_MASK**, содержимое переменной среды «hostname» передаётся как опция 12 на сервер DHCP.
**CDP Options:**
* **CONFIG_CDP_DEVICE_ID** — идентификатор устройства, используемый в триггерных кадрах CDP.
* **CONFIG_CDP_DEVICE_ID_PREFIX** — двухсимвольная строка, которая добавляется к MAC-адресу устройства.
* **CONFIG_CDP_PORT_ID** — строка формата printf, содержащая ASCII-имя порта. Обычно устанавливается как «eth%d», что устанавливает eth0 для первого Ethernet, eth1 для второго и т. д.
* **CONFIG_CDP_CAPABILITIES** — 32-битное целое число, указывающее возможности устройства; 0x00000010 для обычного хоста, который не выполняет переадресацию.
* **CONFIG_CDP_VERSION** — ASCII-строка, содержащая версию программного обеспечения.
* **CONFIG_CDP_PLATFORM** — ASCII-строка, содержащая название платформы.
* **CONFIG_CDP_TRIGGER** — 32-битное целое число, отправляемое при срабатывании.
* **CONFIG_CDP_POWER_CONSUMPTION** — 16-битное целое число, содержащее энергопотребление устройства в .1 милливатта.
* **CONFIG_CDP_APPLIANCE_VLAN_TYPE** — байт, содержащий идентификатор VLAN.
**Status LED: CONFIG_STATUS_LED**
Некоторые конфигурации позволяют отображать текущий статус с помощью светодиода. Например, светодиод будет быстро мигать во время выполнения кода U-Boot, перестанет мигать, как только будет получен ответ на запрос BOOTP, и начнёт медленно мигать после запуска ядра Linux (поддерживается драйвером светодиодного индикатора состояния в ядре Linux). Определение **CONFIG_STATUS_LED** включает эту функцию в U-Boot.
**CAN Support: CONFIG_CAN_DRIVER**
Определение **CONFIG_CAN_DRIVER** включает поддержку драйвера CAN в системах, которые поддерживают эту (необязательную) функцию, таких как модули TQM8xxL.
**I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C**
Эти параметры включают команды последовательной шины I2C. Определение любого из **CONFIG_HARD_I2C** или **CONFIG_SOFT_I2C** включит соответствующий драйвер I2C для выбранного процессора. Это позволит вам использовать команды i2c в командной строке U-Boot (при условии, что вы установили **CFG_CMD_I2C** в **CONFIG_COMMANDS**) и взаимодействовать с чипами часов реального времени на основе i2c. Описание интерфейса командной строки см. в common/cmd_i2c.c.
**CONFIG_I2C_CMD_TREE** — рекомендуемый параметр, который помещает все команды I2C под единую команду «i2c». Старые команды «imm», «imd», «iprobe» и др. считаются устаревшими и могут исчезнуть в будущем.
**CONFIG_HARD_I2C** выбирает аппаратный контроллер I2C.
**CONFIG_SOFT_I2C** настраивает U-Boot на использование программного (также известного как бит-банг) драйвера вместо CPM или аналогичной аппаратной поддержки I2C. Существует несколько других величин, которые также необходимо определить при определении **CONFIG_HARD_I2C** или **CONFIG_SOFT_I2C**.
В обоих случаях вам нужно определить **CFG_I2C_SPEED**, чтобы установить частоту (в Гц), с которой вы хотите, чтобы ваша шина I2C работала, и **CFG_I2C_SLAVE**, чтобы быть адресом этого узла (то есть адресом узла процессора I2C).
Теперь код I2C U-boot для mpc8xx (cpu/mpc8xx/i2c.c) настраивает процессор как главный узел, поэтому его адрес должен быть очищен до 0 (см., например, MPC823e User's Manual p.16–473). Поэтому установите **CFG_I2C_SLAVE** равным 0.
Это всё, что требуется для **CONFIG_HARD_I2C**. Если вы используете программный интерфейс I2C (**CONFIG_SOFT_I2C**), то необходимо определить следующие макросы (примеры взяты из include/configs/lwmon.h):
* **I2C_INIT** (необязательно). Любые команды, необходимые для включения контроллера I2C или настройки портов. **I2C**
(Только для MPC8260 CPU). I/O порт для использования (код предполагает, что оба бита находятся на одном порту). Допустимые значения: 0–3 для портов A–D.
**I2C_ACTIVE**
Код, необходимый для того, чтобы линия данных I2C стала активной (управляемой). Если линия данных с открытым коллектором, этот параметр может быть нулевым.
Пример: #define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA)
**I2C_TRISTATE**
Код, необходимый, чтобы сделать линию данных I2C в трёх состояниях (неактивной). Если линия данных с открытым коллектором, этот параметр может быть нулевым.
Пример: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
**I2C_READ**
Возвращает TRUE, если линия данных I2C высокая, FALSE — если низкая.
Пример: #define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0)
**I2C_SDA(bit)**
Если <bit> равен TRUE, устанавливает линию данных I2C высокой. Если FALSE, очищает её (низкая).
Пример: #define I2C_SDA(bit) \
if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \
else immr->im_cpm.cp_pbdat &= ~PB_SDA
**I2C_SCL(bit)**
Если <bit> равен TRUE, устанавливает тактовую линию I2C высокой. Если FALSE, очищает её (низкая).
Пример: #define I2C_SCL(bit) \
if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \
else immr->im_cpm.cp_pbdat &= ~PB_SCL
**I2C_DELAY**
Эта задержка вызывается четыре раза за цикл синхронизации, поэтому она контролирует скорость передачи данных. Таким образом, скорость передачи составляет 1 / (I2C_DELAY * 4). Часто определяется как-то вроде:
#define I2C_DELAY udelay(2)
*Другие определения и параметры не имеют прямых аналогов в русском языке и оставлены без перевода.* **Цель**
Драйвер, который требует только три общих вывода портов ввода-вывода (два выхода и один вход) для работы. Если это определено, конфигурация платы должна определять несколько элементов конфигурации SPI (используемые выводы портов и т. д.). Для примера см. include/configs/sacsng.h.
* Поддержка FPGA: CONFIG_FPGA_COUNT*
Указывает количество устройств FPGA для поддержки.
* CONFIG_FPGA*
Используется для указания типов устройств FPGA. Например, #define CONFIG_FPGA CFG_XILINX_VIRTEX2.
* CFG_FPGA_PROG_FEEDBACK*
Включает печать хеш-меток во время настройки FPGA.
* CFG_FPGA_CHECK_BUSY*
Включает проверку статуса занятости интерфейса конфигурации FPGA функцией конфигурации. Эта опция потребует написания функции, специфичной для платы или устройства.
* CONFIG_FPGA_DELAY*
Если определено, функция, обеспечивающая задержки в драйвере конфигурации FPGA.
* CFG_FPGA_CHECK_CTRLC*
Разрешает Control-C прерывать настройку FPGA.
* CFG_FPGA_CHECK_ERROR*
Проверяет наличие ошибок конфигурации во время загрузки битового файла FPGA. Например, прерывание во время конфигурации Virtex II, если линия INIT_B становится низкой (что указывает на ошибку CRC).
* CFG_FPGA_WAIT_INIT*
Максимальное время ожидания деактивации линии INIT_B после деактивации PROB_B во время последовательности конфигурации Virtex II FPGA. По умолчанию — 500 мс.
* CFG_FPGA_WAIT_BUSY*
Максимальное время ожидания снятия занятости во время конфигурации Virtex II FPGA. По умолчанию — 5 мс.
* CFG_FPGA_WAIT_CONFIG*
Время ожидания после конфигурации FPGA. По умолчанию — 200 мс.
**Управление конфигурацией:**
* CONFIG_IDENT_STRING*
Эта строка будет добавлена к информации о версии U-Boot (U_BOOT_VERSION), если она определена.
**Защита параметров поставщика:**
U-Boot считает значения переменных среды «serial#» (серийный номер платы) и «ethaddr» (адрес Ethernet) параметрами, которые устанавливаются один раз поставщиком / производителем платы, и защищает эти переменные от случайного изменения пользователем. После установки эти переменные доступны только для чтения, а попытки записи или удаления отклоняются. Вы можете изменить это поведение:
* Если CONFIG_ENV_OVERWRITE определён в вашем файле конфигурации, защита от записи для параметров поставщика полностью отключена. Любой может изменить или удалить эти параметры.
* Или же, если вы определите *и* CONFIG_ETHADDR, *и* CONFIG_OVERWRITE_ETHADDR_ONCE, по умолчанию устанавливается адрес Ethernet, который пользователь может изменить ровно ОДИН РАЗ. [На serial# это не влияет, то есть он остаётся доступным только для чтения.]
**Защищённая RAM:**
* CONFIG_PRAM*
Определите эту переменную, чтобы включить резервирование «защищённой RAM», то есть RAM, которая не перезаписывается U-Boot. Определите CONFIG_PRAM, чтобы указать количество килобайт, которое вы хотите зарезервировать для pRAM. Вы можете переопределить это значение по умолчанию, определив переменную среды «pram» с количеством килобайт, которые вы хотите зарезервировать. Обратите внимание, что структура информации о плате по-прежнему будет показывать полный объём оперативной памяти. Если зарезервирована pRAM, автоматически будет определена новая переменная среды «mem», чтобы сохранить оставшийся объём оперативной памяти в форме, которую можно передать в качестве аргумента загрузки Linux, например так:
setenv bootargs ... mem=\${mem}
saveenv
Таким образом, вы можете указать Linux также не использовать эту память, в результате чего получится область памяти, на которую не повлияют перезагрузки.
* ВНИМАНИЕ * Если ваша конфигурация платы использует автоматическое определение размера оперативной памяти, вы должны убедиться, что этот тест памяти является неразрушающим. До сих пор известны следующие конфигурации плат, которые являются неразрушающими: **pRAM-clean:**
ETX094, IVMS8, IVML24, SPD8xx, TQM8xxL,
HERMES, IP860, RPXlite, LWMON, LANTEC,
PCU_E, FLAGADM, TQM8260.
**Error Recovery:**
CONFIG_PANIC_HANG
Определяет эту переменную для остановки системы в случае фатальной ошибки, так что вам придётся перезагрузить её вручную. Вероятно, это НЕ лучшая идея для встроенной системы, где вы хотите, чтобы система автоматически перезагружалась как можно быстрее, но это может быть полезно во время разработки, поскольку вы можете попытаться отладить условия, которые приводят к ситуации.
CONFIG_NET_RETRY_COUNT
Эта переменная определяет количество попыток для сетевых операций, таких как ARP, RARP, TFTP или BOOTP, прежде чем отказаться от операции. Если не определено, используется значение по умолчанию 5.
**Командный интерпретатор:**
CONFIG_AUTO_COMPLETE
Включает автозаполнение команд с помощью клавиши TAB.
Обратите внимание, что эта функция ещё НЕ реализована для оболочки «hush».
CFG_HUSH_PARSER
Определяет эту переменную, чтобы включить оболочку «hush» (из Busybox) в качестве интерпретатора командной строки, тем самым позволяя использовать мощный синтаксис командной строки, такой как условные выражения if...then...else...fi или конструкции `&&' и '||' («shell scripts»).
Если не определено, вы получаете старое, гораздо более простое поведение с несколько меньшим объёмом памяти.
CFG_PROMPT_HUSH_PS2
Это определяет вторичную строку приглашения, которая печатается, когда интерпретатору команд требуется больше ввода для завершения команды. Обычно "> ".
Примечание:
В текущей реализации пространство локальных переменных и пространство глобальных переменных среды разделены. Локальные переменные — это те, которые вы определяете, просто набирая `name=value'. Чтобы получить доступ к локальной переменной позже, вы должны написать `$name' или `${name}'; чтобы выполнить содержимое переменной напрямую, введите `$name' в командной строке.
Глобальные переменные среды — это те, с которыми вы используете setenv/printenv. Чтобы запустить команду, хранящуюся в такой переменной, вам нужно использовать команду run, и вы не должны использовать знак '$' для доступа к ним.
Чтобы сохранить команды и специальные символы в переменной, используйте двойные кавычки, окружающие весь текст переменной, вместо обратных косых черт перед точками с запятой и специальными символами.
**Редактирование командной строки и история:**
CONFIG_CMDLINE_EDITING
Включите функции редактирования и истории для интерактивных операций ввода командной строки.
**Среда по умолчанию:**
CONFIG_EXTRA_ENV_SETTINGS
Определите это, чтобы содержать любое количество строк с нулевым завершением (пар «переменная = значение»), которые будут частью среды по умолчанию, скомпилированной в загрузочный образ.
Например, поместите что-то подобное в файл конфигурации вашей платы:
#define CONFIG_EXTRA_ENV_SETTINGS \
"myvar1=value1\0" \
"myvar2=value2\0".
Предупреждение: этот метод основан на знании внутреннего формата хранения среды кодом U-Boot. Это НЕ официальный, экспортированный интерфейс! Хотя маловероятно, что этот формат скоро изменится, гарантии тоже нет. Вы лучше знаете, что делаете здесь.
Примечание: чрезмерное использование среды по умолчанию не рекомендуется. Сначала убедитесь, что проверили другие способы предварительной настройки среды, такие как функция autoscript или команда загрузки.
**Поддержка DataFlash:**
CONFIG_HAS_DATAFLASH
Определение этой опции включает функции DataFlash и позволяет читать/записывать в Dataflash через стандартные команды cp, md...
**SystemACE Support:**
CONFIG_SYSTEMACE
Добавление этой опции добавляет поддержку чипов Xilinx SystemACE, подключённых через какую-либо локальную шину. Адрес микросхемы также должен быть определён в файле конфигурации. **CFG_SYSTEMACE_BASE macro.**
Например:
#define CONFIG_SYSTEMACE
#define CFG_SYSTEMACE_BASE 0xf0000000
Когда поддержка SystemACE добавлена, тип устройства «ace» становится доступным для команд fat, например, fatls.
**Фиксированный порт UDP TFTP:**
CONFIG_TFTP_PORT
Если он определён, то значение порта источника UDP TFTP задаётся с помощью переменной среды tftpsrcp. Если tftpsrcp не определена, используется обычный генератор псевдослучайных номеров портов.
Также переменная среды tftpdstp используется для задания значения порта назначения UDP TFTP. Если она не определена, применяется номер порта 69 по умолчанию.
Цель tftpsrcp — позволить TFTP-серверу слепо запустить передачу TFTP, используя предварительно настроенный целевой IP-адрес и порт UDP. Это позволяет «пробить» (Windows XP) брандмауэр, позволяя остальной части передачи TFTP продолжаться в обычном режиме. Лучшее решение — правильно настроить брандмауэр, но иногда это невозможно.
**Отображение прогресса загрузки:**
CONFIG_SHOW_BOOT_PROGRESS
Определение этой опции позволяет добавить некоторый код, специфичный для платы (вызов предоставленной пользователем функции show_boot_progress(int)), который позволяет отображать прогресс загрузки системы на каком-либо дисплее (например, некоторых светодиодах) на вашей плате. В настоящее время реализованы следующие контрольные точки:
| Аргумент | Где | Когда |
| --- | --- | --- |
| 1 | common/cmd_bootm.c | перед попыткой загрузить образ |
| -1 | common/cmd_bootm.c | заголовок образа имеет неправильный магический номер |
| 2 | common/cmd_bootm.c | заголовок образа имеет правильный магический номер |
| -2 | common/cmd_bootm.c | заголовок образа имеет неправильную контрольную сумму |
| 3 | common/cmd_bootm.c | заголовок образа имеет правильную контрольную сумму |
| -3 | common/cmd_bootm.c | данные образа имеют неправильную контрольную сумму |
| 4 | common/cmd_bootm.c | данные образа имеют правильную контрольную сумму |
| -4 | common/cmd_bootm.c | образ предназначен для неподдерживаемой архитектуры |
| 5 | common/cmd_bootm.c | проверка архитектуры прошла успешно |
| -5 | common/cmd_bootm.c | неправильный тип образа (не ядро, мульти, автономный) |
| 6 | common/cmd_bootm.c | проверка типа образа прошла успешно |
| -6 | common/cmd_bootm.c | ошибка распаковки gunzip |
| -7 | common/cmd_bootm.c | не реализованный тип сжатия |
| 7 | common/cmd_bootm.c | распаковка прошла успешно |
| -8 | common/cmd_bootm.c | неправильный тип образа (не ядро, мульти, автономный) |
| 8 | common/cmd_bootm.c | проверка типа образа прошла успешно |
| -9 | common/cmd_bootm.c | неподдерживаемая ОС (не Linux, BSD, VxWorks, QNX) |
| 9 | common/cmd_bootm.c | начало проверки начального RAM-диска |
| -10 | common/cmd_bootm.c | у заголовка RAM-диска неправильный магический номер |
| -11 | common/cmd_bootm.c | у заголовка RAM-диска неправильная контрольная сумма |
| 10 | common/cmd_bootm.c | с заголовком RAM-диска всё в порядке |
| -12 | common/cmd_bootm.c | у данных RAM-диска неправильная контрольная сумма |
| 11 | common/cmd_bootm.c | у данных RAM-диска правильная контрольная сумма |
| 12 | common/cmd_bootm.c | проверка RAM-диска завершена, начинается загрузка |
| -13 | common/cmd_bootm.c | неправильный тип образа (не PPC Linux RAM-диск) |
| 13 | common/cmd_bootm.c | начинается проверка многофайлового образа |
| 14 | common/cmd_bootm.c | нет начального RAM-диска, нет многофайлового, продолжаем |
| 15 | common/cmd_bootm.c | вся подготовка завершена, передача управления ОС |
| -30 | lib_ppc/board.c | фатальная ошибка, зависание системы |
| -31 | post/post.c | тест POST не пройден, обнаружен post_output_backlog() |
| -32 | post/post.c | тест POST не пройден, обнаружен post_run_single() |
| -1 | common/cmd_doc.c | неправильное использование команды «doc» |
| -1 | common/cmd_doc.c | устройство загрузки отсутствует |
| -1 | common/cmd_doc.c | неизвестный идентификатор чипа на устройстве загрузки |
| -1 | common/cmd_doc.c | ошибка чтения на устройстве загрузки |
| -1 | common/cmd_doc.c | заголовок образа имеет неправильный магический номер |
| -1 | common/cmd_ide.c | неправильное использование команды «ide» |
| -1 | common/cmd_ide.c | устройство загрузки отсутствует |
| -1 | common/cmd_ide.c | неизвестное устройство загрузки |
| -1 | common/cmd_ide.c | неизвестная таблица разделов |
| -1 | common/cmd_ide.c | неверный тип раздела |
| -1 | common/cmd_ide.c | ошибка чтения на загрузочном устройстве | **common/cmd_ide.c**
Заголовок изображения имеет неправильный магический номер.
**-1 common/cmd_nand.c**
Неправильное использование команды «nand».
**-1 common/cmd_nand.c**
Нет загрузочного устройства.
**-1 common/cmd_nand.c**
Неизвестный идентификатор чипа на загрузочном устройстве.
**-1 common/cmd_nand.c**
Ошибка чтения на загрузочном устройстве.
**-1 common/cmd_nand.c**
Заголовок изображения имеет неправильный магический номер.
**-1 common/env_common.c**
В среде есть плохая контрольная сумма CRC, используется значение по умолчанию.
**Поддержка модемов:**
[пока только для SMDK2400 и TRAB плат]
- Поддержка модема может быть отключена:
CONFIG_MODEM_SUPPORT.
- Управление потоком RTS/CTS можно включить:
CONFIG_HWFLOW.
- Можно включить поддержку отладки модема:
CONFIG_MODEM_SUPPORT_DEBUG.
Включает отладочные функции (char screen[1024], dbg()) для поддержки модема. Полезно только с BDI2000.
- Поддержка прерываний (PPC):
Существуют общие interrupt_init() и timer_interrupt() для всех архитектур PPC. interrupt_init() вызывает interrupt_init_cpu() для инициализации, специфичной для процессора. interrupt_init_cpu() должен установить значение decrementer_count в соответствующее значение. Если процессор сбрасывает счётчик автоматически после прерывания (ppc4xx), он должен установить decrementer_count равным нулю. timer_interrupt() вызывает timer_interrupt_cpu() для обработки, специфичной для процессора. Если плата имеет сторожевой таймер / индикатор состояния / другой монитор активности, он работает автоматически от общего timer_interrupt().
- Общие сведения:
На целевой системе поддержка модема включается при нажатии определённой клавиши (комбинации клавиш) во время включения питания. В противном случае U-Boot загрузится нормально (автозагрузка). Функция key_pressed() вызывается из board_init(). В настоящее время key_pressed() — это фиктивная функция, возвращающая 1 и, таким образом, включающая инициализацию модема.
Если в среде нет строк инициализации модема, U-Boot переходит к автозагрузке; предыдущий вывод (баннер, информация printfs) будет подавлен.
См. также: doc/README.Modem.
**Настройки конфигурации:**
- CFG_LONGHELP: Определяется, когда вы хотите включить длинные сообщения справки; отмените определение, если у вас мало памяти.
- CFG_PROMPT: Это то, что U-Boot печатает на консоли для запроса ввода данных пользователем.
- CFG_CBSIZE: Размер буфера для ввода с консоли.
- CFG_PBSIZE: Размер буфера вывода консоли.
- CFG_MAXARGS: Максимальное количество аргументов, принимаемых для команд монитора.
- CFG_BARGSIZE: Размер буфера аргументов загрузки, которые передаются приложению (обычно ядру Linux) при его загрузке.
- CFG_BAUDRATE_TABLE: Список допустимых настроек скорости передачи данных для этой платы.
- CFG_CONSOLE_INFO_QUIET: Подавляет отображение информации о консоли при загрузке.
- CFG_CONSOLE_IS_IN_ENV: Если функция платы, определённая как extern int overwrite_console (void); возвращает 1, stdin, stderr и stdout переключаются на последовательный порт, иначе используются настройки среды.
- CFG_CONSOЛЕ_OVERWRITE_ROUTINE: Включить вызов overwrite_console().
- CFG_CONSOLE_ENV_OVERWRITE: Включить перезапись предыдущих настроек среды консоли.
- CFG_MEMTEST_START, CFG_MEMTEST_END: Начало и конец области, используемой простым тестом памяти.
- CFG_ALT_MEMTEST: Включить альтернативный, более обширный тест памяти.
- CFG_MEMTEST_SCRATCH: Адрес записи, используемый альтернативным тестом памяти. Вам нужно установить это значение, только если адрес нуля не доступен для записи.
- CFG_TFTP_LOADADDR: Адрес загрузки по умолчанию для сетевых загрузок файлов.
- CFG_LOADS_BAUD_CHANGE: Включить временное изменение скорости передачи во время последовательной загрузки.
- CFG_SDRAM_BASE: Физический начальный адрес SDRAM. *Должен* быть здесь равен 0.
- CFG_MBIO_BASE: Физический начальный адрес ввода-вывода материнской платы (если используется материнская плата Cogent).
- CFG_FLASH_BASE: Физический начальный адрес флэш-памяти.
- CFG_MONITOR_BASE: Физический начальный адрес кода загрузочного монитора (устанавливается файлами конфигурации make для соответствия текстовому базовому адресу (TEXT_BASE), используемому при... - CFG_FLASH_BASE — аналогично.
Используется при загрузке с флеш-накопителя.
- CFG_MONITOR_LEN:
Размер памяти, зарезервированный для кода монитора, используется для определения во время компиляции (!), находится ли среда в образе U-Boot или в отдельном секторе флеш-памяти.
- CFG_MALLOC_LEN:
Объём DRAM, зарезервированный для использования malloc().
- CFG_BOOTM_LEN:
Обычно сжатые образы uImage ограничены несжатым размером 8 Мбайт. Если этого недостаточно, вы можете определить CFG_BOOTM_LEN в файле конфигурации вашей платы, чтобы настроить этот параметр под свои нужды.
- CFG_BOOTMAPSZ:
Максимальный размер памяти, отображаемой загрузочным кодом ядра Linux; все данные, которые должны быть обработаны ядром Linux (bd_info, аргументы загрузки, возможно, образ initrd), должны быть ниже этого предела.
- CFG_MAX_FLASH_BANKS:
Максимальное количество банков флеш-памяти.
- CFG_MAX_FLASH_SECT:
Максимальное количество секторов на чипе флеш-памяти.
- CFG_FLASH_ERASE_TOUT:
Таймаут для операций стирания флеш-памяти (в мс).
- CFG_FLASH_WRITE_TOUT:
Таймаут для операций записи во флеш-память (в мс).
- CFG_FLASH_LOCK_TOUT:
Таймаут для операции установки бита блокировки сектора флеш-памяти (в мс).
- CFG_FLASH_UNLOCK_TOUT:
Таймаут для операции очистки битов блокировки флеш-памяти (в мс).
- CFG_FLASH_PROTECTION:
Если определено, используется аппаратная защита секторов флеш-памяти вместо программной защиты U-Boot.
- CFG_DIRECT_FLASH_TFTP:
Включите передачу TFTP непосредственно во флеш-память; без этой опции такая загрузка должна выполняться в два этапа: (1) загрузка в ОЗУ и (2) копирование из ОЗУ во флеш.
Двухэтапный подход обычно более надёжен, поскольку вы можете проверить, сработала ли загрузка, прежде чем стирать флеш, но в некоторых ситуациях (когда системная оперативная память слишком ограничена, чтобы позволить временную копию загруженного образа) эта опция может быть очень полезна.
- CFG_FLASH_CFI:
Определите, использует ли драйвер флеш-памяти дополнительные элементы в общей структуре флеш-памяти для хранения геометрии флеш-памяти.
- CFG_FLASH_CFI_DRIVER:
Эта опция также включает сборку драйвера cfi_flash в каталоге драйверов.
- CFG_FLASH_QUIET_TEST:
Если эта опция определена, общий драйвер CFI flash не выводит предупреждение при распознавании банков FLASH. Это полезно, если некоторые из настроенных банков доступны только опционально.
- CFG_RX_ETH_BUFFER:
Определяет количество буферов приёма Ethernet. На некоторых контроллерах Ethernet рекомендуется установить это значение равным 8 или даже выше (EEPRO100 или 405 EMAC), поскольку все буферы могут заполниться вскоре после включения интерфейса при высоком трафике Ethernet. По умолчанию равно 4, если не определено.
Следующие определения, связанные с размещением и управлением данными среды (переменной областью), в целом мы поддерживаем следующие конфигурации:
- CFG_ENV_IS_IN_FLASH:
Определите это, если среда находится во флеш-памяти.
а) Среда занимает один целый сектор флеш-памяти, который «внедрён» в текстовый сегмент с кодом U-Boot. Обычно это происходит с чипами флеш-памяти типа «нижний загрузочный сектор» или «верхний загрузочный сектор», которые имеют несколько меньших секторов в начале или конце. Например, такой макет может иметь размеры секторов 8, 2x4, 16, Nx32 кБ. В таком случае вы бы поместили среду в один из 4-килобайтных секторов — с кодом U-Boot до и после него. С чипами флеш-типа «верхний загрузочный сектор» вы бы разместили среду в одном из последних секторов, оставив промежуток между U-Boot и средой.
- CFG_ENV_OFFSET:
Смещение данных среды (переменная область) к началу флеш-памяти; например, с нижним типом загрузочной флеш-памяти можно использовать второй сектор: здесь указано смещение для этого сектора.
CFG_ENV_OFFSET используется относительно CFG_FLASH_BASE.
- CFG_ENV_ADDR:
Это просто... **Другой способ указать начальный адрес сектора флэш-памяти, содержащего окружение (вместо CFG_ENV_OFFSET):**
- CFG_ENV_SECT_SIZE:
Размер сектора флэш-памяти, содержащего окружение.
**b) Иногда микросхемы флэш-памяти имеют несколько одинаковых по размеру больших секторов. В таком случае вы не хотите тратить целый сектор на окружение.**
- CFG_ENV_SIZE:
Если вы используете это в сочетании с CFG_ENV_IS_IN_FLASH и CFG_ENV_SECT_SIZE, вы можете указать использовать только часть этого сектора флэш-памяти для окружения. Это экономит память для копии окружения в ОЗУ.
Также это может сэкономить память флэш-памяти, если вы решите использовать это, когда ваше окружение «встроено» в код U-Boot, так как тогда оставшуюся часть сектора флэш-памяти можно использовать для кода U-Boot. Следует отметить, что с точки зрения надёжности это **настоятельно не рекомендуется**: обновление окружения во флэш-памяти всегда требует стирания всего сектора. Если что-то пойдёт не так до того, как содержимое будет восстановлено из копии в ОЗУ, ваша целевая система выйдет из строя.
- CFG_ENV_ADDR_REDUND, CFG_ENV_SIZE_REDUND:
Эти настройки описывают вторую область хранения, используемую для хранения резервной копии данных окружения, чтобы была действительная резервная копия на случай сбоя питания во время операции «saveenv».
*Будьте осторожны! Любые изменения в макете флэш-памяти и некоторые изменения в исходном коде потребуют адаптации <board>/u-boot.lds* соответствующим образом!*
- CFG_ENV_IS_IN_NVRAM:
Определите это, если у вас есть какое-либо энергонезависимое запоминающее устройство (NVRAM, батарейно-буферизованная SRAM), которое вы хотите использовать для окружения.
- CFG_ENV_ADDR, CFG_ENV_SIZE:
Эти два #define используются для определения области памяти, которую вы хотите использовать для окружения. Предполагается, что к этой памяти можно просто обращаться для чтения и записи без каких-либо специальных условий.
*Будьте осторожны! Первый доступ к окружению происходит довольно рано при инициализации U-Boot (когда мы пытаемся получить настройку скорости передачи данных для консоли). Вы *ДОЛЖНЫ* заполнить свою область NVRAM к этому моменту, иначе U-Boot зависнет.*
Обратите внимание, что даже с NVRAM мы всё ещё используем копию окружения в ОЗУ: мы могли бы работать с NVRAM напрямую, но мы хотим, чтобы настройки там всегда оставались неизменными, за исключением случаев, когда кто-то использует «saveenv» для сохранения текущих настроек.
- CFG_ENV_IS_IN_EEPROM:
Используйте это, если у вас есть EEPROM или подобное устройство последовательного доступа и драйвер для него.
- CFG_ENV_OFFSET, CFG_ENV_SIZE:
Эти две #define указывают смещение и размер области окружения в общей памяти вашего EEPROM.
- CFG_I2C_EEPROM_ADDR:
Если определено, указывает адрес чипа устройства EEPROM. По умолчанию — ноль.
- CFG_EEPROM_PAGE_WRITE_BITS:
Если определено, количество битов, используемых для адресации байтов в одной странице в устройстве EEPROM. Например, 64-байтовая страница потребует шесть битов.
- CFG_EEPROM_PAGE_WRITE_DELAY_MS:
Если определено, задержка в миллисекундах между записями страниц. По умолчанию задержка равна нулю миллисекунд.
- CFG_I2C_EEPROM_ADDR_LEN:
Длина в байтах адреса массива памяти EEPROM. Обратите внимание, что это НЕ длина адреса чипа!
- CFG_I2C_EEPROM_ADDR_OVERFLOW:
Микросхемы EEPROM, которые реализуют «переполнение адреса», такие как Catalyst 24WC04/08/16, имеют 9/10/11 бит адреса, и дополнительные биты попадают в слоты «адрес чипа». Это делает микросхему 24WC08 (1 Кбайт) похожей на четыре микросхемы по 256 байт.
Обратите внимание, что мы рассматриваем длину поля адреса равной одному байту, поскольку дополнительные биты адреса скрыты в адресе чипа.
- CFG_EEPROM_SIZE:
Размер в байтах устройства EEPROM.
- CFG_ENV_IS_IN_DATAFLASH:
Определите это, если у вас есть устройство памяти DataFlash, которое вы хотите использовать для окружения. CFG_ENV_ADDR:
- CFG_ENV_SIZE:
Эти три #define указывают смещение и размер области среды в общей памяти вашего DataFlash, размещённой по указанному адресу.
- CFG_ENV_IS_IN_NAND:
Определите это, если у вас есть устройство NAND, которое вы хотите использовать для среды.
— CFG_ENV_OFFSET:
— CFG_ENV_SIZE:
Эти два #define указывают смещение и размер области среды в первом устройстве NAND.
— CFG_ENV_OFFSET_REDUND:
Этот параметр описывает вторую область хранения размером CFG_ENV_SIZE, используемую для хранения резервной копии данных среды, чтобы была действительная резервная копия на случай сбоя питания во время операции «saveenv».
Примечание: CFG_ENV_OFFSET и CFG_ENV_OFFSET_REDUND должны быть выровнены по границе блока, а CFG_ENV_SIZE должен быть кратен размеру блока устройств NAND.
— CFG_SPI_INIT_OFFSET
Определяет смещение к начальной области буфера SPI в DPRAM. Область используется на ранней стадии (часть ROM), если среда настроена так, чтобы находиться в EEPROM SPI: нам нужна область DPRAM размером 520 байт. Она используется между двумя вызовами инициализации (spi_init_f() и spi_init_r()). Значение 0xB00 кажется хорошим выбором, поскольку оно достаточно далеко от начала области данных, а также от указателя стека.
Обратите внимание, что среда доступна только для чтения, пока монитор перемещён в ОЗУ и создана копия среды в ОЗУ; кроме того, при использовании EEPROM вам придётся использовать getenv_r(), пока не будет прочитана переменная среды.
Среда защищена контрольной суммой CRC32. Перед тем как монитор будет перемещён в ОЗУ, в результате плохой CRC вы будете работать со встроенной средой по умолчанию — *молча*!!! [Это необходимо, потому что первая переменная среды, которая нам нужна, — это настройка «baudrate» для консоли — если у нас плохая CRC, у нас ещё нет устройства, на которое мы могли бы пожаловаться.]
Примечание: после перемещения монитора он будет жаловаться, если используется среда по умолчанию; новая контрольная сумма вычисляется, как только вы используете команду «saveenv» для сохранения действительной среды.
— CFG_FAULT_ECHO_LINK_DOWN:
Эхо инвертированного состояния Ethernet-соединения на светодиод неисправности.
Примечание: Если эта опция активна, то также необходимо определить CFG_FAULT_MII_ADDR.
— CFG_FAULT_MII_ADDR:
MII-адрес PHY для проверки состояния Ethernet-соединения.
— CFG_64BIT_VSPRINTF:
Делает vsprintf (и все функции *printf) поддерживает печать 64-битных значений с помощью квантификатора L.
— CFG_64BIT_STRTOUL:
Добавляет simple_strtoull, который возвращает 64-битное значение.
Параметры конфигурации низкого уровня (связанные с оборудованием):
---------------------------------------------------
— CFG_CACHELINE_SIZE:
Размер строки кэша процессора.
— CFG_DEFAULT_IMMR:
Адрес по умолчанию IMMR после сброса системы.
Требуется на некоторых системах 8260 (MPC8260ADS, PQ2FADS-ZU и RPXsuper), чтобы иметь возможность регулировать положение регистра IMMR после сброса.
Поддержка гибких дисков:
CFG_FDC_DRIVE_NUMBER:
номер диска по умолчанию (значение по умолчанию 0).
CFG_ISA_IO_STRIDE:
определяет интервал между регистрами набора микросхем fdc (значение по умолчанию 1).
CFG_ISA_IO_OFFSET:
определяет смещение регистра от адреса. Это зависит от того, какая часть шины данных подключена к набору микросхем FDC. (значение по умолчанию 0)
Если CFG_ISA_IO_STRIDE, CFG_ISA_IO_OFFSET и CFG_FDC_DRIVE_NUMBER не определены, они принимают свои значения по умолчанию.
если определено CFG_FDC_HW_INIT, то функция fdc_hw_init() вызывается в начале настройки FDC. fdc_hw_init() должна предоставляться исходным кодом платы. Он используется для выполнения аппаратно-зависимых инициализаций.
— CFG_IMMR: физический адрес внутренней памяти.
Не изменяйте, если вы точно не знаете, что делаете! (11-4) [Только системы MPC8xx/82xx] **bus other than the first one, specify here.**
Note that the value must resolve to something your driver can deal with.
- CFG_83XX_DDR_USES_CS0
Only for 83xx systems. If specified, then DDR should be configured using CS0 and CS1 instead of CS2 and CS3.
- CFG_83XX_DDR_USES_CS0
Только для систем 83xx. Если указано, то DDR следует настроить с использованием CS0 и CS1 вместо CS2 и CS3.
- CONFIG_ETHER_ON_FEC[12]
Определите для включения FEC[12] на процессоре серии 8xx.
- CONFIG_FEC[12]_PHY
Определите жёстко заданный адрес PHY, который соответствует данному FEC; т. е.
#define CONFIG_FEC1_PHY 4
означает, что PHY с адресом 4 подключён к FEC1.
Когда установлено значение -1, означает поиск первого доступного.
- CONFIG_FEC[12]_PHY_NORXERR
У PHY нет линии RXERR (только RMII).
(поэтому запрограммируйте FEC так, чтобы он игнорировал её).
- CONFIG_RMII
Включите режим RMII для всех FEC.
Обратите внимание, что это глобальный параметр, мы не можем иметь один FEC в стандартном режиме MII, а другой — в режиме RMII.
- CONFIG_CRC32_VERIFY
Добавьте опцию проверки к команде crc32.
Синтаксис:
=> crc32 -v <адрес> <количество> <crc32>
Где адрес/количество указывают область памяти, а crc32 — правильный crc32, который должна иметь эта область.
- CONFIG_LOOPW
Добавьте команду памяти «loopw». Это действует только в том случае, если команды памяти активированы глобально (CFG_CMD_MEM).
- CONFIG_MX_CYCLIC
Добавьте команды памяти «mdc» и «mwc». Это циклические команды «md/mw».
Примеры:
=> mdc.b 10 4 500
Эта команда будет выводить 4 байта (10,11,12,13) каждые 500 мс.
=> mwc.l 100 12345678 10
Эта команда запишет 12345678 по адресу 100 каждые 10 мс.
Это действует только в том случае, если команды памяти активированы глобально (CFG_CMD_MEM).
- CONFIG_SKIP_LOWLEVEL_INIT
- CONFIG_SKIP_RELOCATE_UBOOT
[Только ARM] Если эти переменные определены, то некоторые низкоуровневые инициализации (например, настройка контроллера памяти) пропускаются или U-Boot не перемещается в ОЗУ.
Обычно эти переменные НЕ ДОЛЖНЫ быть определены. Единственное исключение — когда U-Boot загружается (в ОЗУ) другим загрузчиком или отладчиком, который выполняет эти инициализации самостоятельно.
**Сборка программного обеспечения:**
======================
Сборка U-Boot была протестирована в собственных средах PPC (на PowerBook G3 под управлением LinuxPPC 2000) и в кросс-средах (под управлением RedHat 6.x и 7.x Linux на x86, Solaris 2.6 на SPARC и NetBSD 1.5 на x86).
Если вы не используете собственную среду PPC, предполагается, что у вас есть инструменты GNU для кросс-компиляции, доступные в вашем пути и названные с префиксом «powerpc-linux-». Если это не так (например, если вы используете Monta Vista Hard Hat Linux CDK 1.2), вы должны изменить определение CROSS_COMPILE в Makefile. Для HHL на 4xx CPU измените его на:
CROSS_COMPILE = ppc_4xx-
U-Boot предназначен для простой сборки. После установки источников вы должны настроить U-Boot для одного конкретного типа платы. Это делается путём ввода:
make NAME_config
где «NAME_config» — это имя одной из существующих конфигураций; поддерживаются следующие имена:
ADCIOP_config FPS860L_config omap730p2_config
ADS860_config GEN860T_config pcu_e_config
Alaska8220_config
AR405_config GENIETV_config PIP405_config
at91rm9200dk_config GTH_config QS823_config
CANBT_config hermes_config QS850_config
cmi_mpc5xx_config hymod_config QS860T_config
cogent_common_config IP860_config RPXlite_config
cogent_mpc8260_config IVML24_config RPXlite_DW_config
cogent_mpc8xx_config IVMS8_config RPXsuper_config
CPCI405_config JSE_config rsdproto_config
CPCIISER4_config LANTEC_config Sandpoint8240_config
csb272_config lwmon_config **sbc8260_config**
* CU824_config
* MBX860T_config
* sbc8560_33_config
* DUET_ADS_config
* MBX_config
* sbc8560_66_config
* EBONY_config
* MPC8260ADS_config
* SM850_config
* ELPT860_config
* MPC8540ADS_config
* SPD823TS_config
* ESTEEM192E_config
* MPC8540EVAL_config
* stxgp3_config
* ETX094_config
* FADS823_config
* NETVIA_config
* TQM823L_config
* FADS850SAR_config
* omap1510inn_config
* TQM850L_config
* omap1610h2_config
* TQM855L_config
* FPS850L_config
* omap1610inn_config
* TQM860L_config
* omap5912osk_config
* walnut_config
* omap2420h4_config
* Yukon8220_config
* ZPC1900_config
Note: for some board special configuration names may exist; check if additional information is available from the board vendor; for instance, the TQM823L systems are available without (standard) or with LCD support. You can select such additional «features» when choosing the configuration, i. e.:
make TQM823L_config — will configure for a plain TQM823L, i. e. no LCD support
make TQM823L_LCD_config — will configure for a TQM823L with U-Boot console on LCD
etc.
Finally, type «make all», and you should get some working U-Boot images ready for download to / installation on your system:
— «u-boot.bin» is a raw binary image
— «u-boot» is an image in ELF binary format
— «u-boot.srec» is in Motorola S-Record format
By default the build is performed locally and the objects are saved in the source directory. One of the two methods can be used to change this behavior and build U-Boot to some external directory:
1. Add O= to the make command line invocations:
make O=/tmp/build distclean
make O=/tmp/build NAME_config
make O=/tmp/build all
2. Set environment variable BUILD_DIR to point to the desired location:
export BUILD_DIR=/tmp/build
make distclean
make NAME_config
make all
Note that the command line «O=» setting overrides the BUILD_DIR environment variable.
Please be aware that the Makefiles assume you are using GNU make, so for instance on NetBSD you might need to use «gmake» instead of native «make».
If the system board that you have is not listed, then you will need to port U-Boot to your hardware platform. To do this, follow these steps:
1. Add a new configuration option for your board to the toplevel «Makefile» and to the «MAKEALL» script, using the existing entries as examples. Note that here and at many other places boards and other names are listed in alphabetical sort order. Please keep this order.
2. Create a new directory to hold your board specific code. Add any files you need. In your board directory, you will need at least the «Makefile», a «<board>.c», «flash.c» and «u-boot.lds».
3. Create a new configuration file «include/configs/<board>.h» for your board
4. If you're porting U-Boot to a new CPU, then also create a new directory to hold your CPU specific code. Add any files you need.
5. Run «make <board>_config» with your new name.
6. Type «make», and you should get a working «u-boot.srec» file to be installed on your target system.
7. Debug and solve any problems that might arise. [Of course, this last step is much harder than it sounds.]
Testing of U-Boot Modifications, Ports to New Hardware, etc.:
==============================================================
If you have modified U-Boot sources (for instance added a new board or support for new devices, a new CPU, etc.) you are expected to provide feedback to the other developers. The feedback normally takes the form of a «patch», i. e. a context diff against a certain (latest official or latest in CVS) version of U-Boot sources.
But before you submit such a patch, please verify that your modification did not break existing code. At least make sure that *ALL* of the supported boards compile WITHOUT ANY compiler warnings. To do so, just run the «MAKEALL» script. **Сконфигурируем и соберём U-Boot для всех поддерживаемых систем. Предупреждаем, это займёт некоторое время.**
Вы можете выбрать компилятор (cross compiler), передав переменную среды `CROSS_COMPILE` в скрипт, например:
CROSS_COMPILE=ppc_8xx- MAKEALL
или чтобы собрать на родной системе PowerPC, введите:
CROSS_COMPILE=' ' MAKEALL
При использовании скрипта MAKEALL по умолчанию U-Boot собирается в исходном каталоге. Это местоположение можно изменить, установив переменную окружения BUILD_DIR. Также для каждой собранной цели скрипт MAKEALL сохраняет два файла журнала (<target>.ERR и <target>.MAKEALL) в каталоге <source dir>/LOG. Это расположение по умолчанию можно изменить, задав переменную MAKEALL_LOGDIR. Например:
export BUILD_DIR=/tmp/build
export MAKEALL_LOGDIR=/tmp/log
CROSS_COMPILE=ppc_8xx- MAKEALL
С указанными выше настройками объекты сборки сохраняются в /tmp/build, файлы журналов — в /tmp/log, а дерево исходных текстов остаётся чистым в течение всего процесса сборки.
**См. также «Руководство по переносу U-Boot» ниже.**
* * *
**Команды монитора — обзор:**
go — запустить приложение по адресу addr;
run — выполнить команды в среде с переменной окружения;
bootm — загрузить образ приложения из памяти;
bootp — загрузить образ через сеть с использованием протокола BootP/TFTP;
tftpboot — загрузить образ через сеть с помощью TFTP-протокола и переменных окружения «ipaddr» и «serverip» (и, возможно, «gatewayip»);
rarpboot — загрузить образ через сеть, используя протокол RARP/TFTP;
diskboot — загрузиться с IDE-устройства;
bootd — загрузиться по умолчанию, т. е. выполнить команду bootcmd;
loads — загрузить файл S-Record по последовательной линии;
loadb — загрузить двоичный файл по последовательной линии (режим kermit);
md — отображение памяти;
mm — изменение памяти (автоинкремент);
nm — изменение памяти (постоянный адрес);
mw — запись в память (заполнение);
cp — копирование памяти;
cmp — сравнение памяти;
crc32 — расчёт контрольной суммы;
imd — отображение памяти I2C;
imm — изменение памяти I2C (автоинкремент);
inm — изменение памяти I2C (постоянный адрес);
imw — запись в память I2C (заполнение);
icrc32 — вычисление контрольной суммы I2C;
iprobe — поиск действительных адресов микросхем I2C;
iloop — бесконечный цикл по диапазону адресов;
isdram — вывод информации о конфигурации SDRAM;
sspi — команды утилиты SPI;
base — вывести или установить смещение адреса;
printenv — вывести переменные окружения;
setenv — задать переменные окружения;
saveenv — сохранить переменные окружения в постоянном хранилище;
protect — включить или отключить защиту от записи во FLASH;
erase — стереть память FLASH;
flinfo — вывести информацию о памяти FLASH;
bdinfo — вывести структуру Board Info;
iminfo — вывести информацию заголовка для образа приложения;
coninfo — вывести устройства консоли и информацию;
ide — подсистема IDE;
loop — бесконечный цикл по диапазону адресов;
loopw — бесконечная запись цикла по диапазону адресов;
mtest — простой тест RAM;
icache — включить или выключить кэш инструкций;
dcache — включить или выключить кеш данных;
reset — выполнить сброс CPU;
echo — вывести аргументы на консоль;
version — вывести версию монитора;
help — вывести онлайн-справку;
? — псевдоним для «help».
* * *
Для команд монитора пока просто введите «help <command>».
* * *
**Переменные окружения:**
U-Boot поддерживает пользовательскую конфигурацию с помощью переменных окружения, которые можно сделать постоянными, сохранив их во флэш-памяти.
Переменные окружения задаются с помощью setenv, выводятся с помощью printenv и сохраняются во Flash с помощью saveenv. Использование setenv без значения может использоваться для удаления переменной из окружения. Пока вы не сохраните окружение, вы работаете с его копией в памяти. В случае случайного стирания области флэш-памяти, содержащей окружение, предоставляется стандартное окружение.
Некоторые параметры конфигурации можно задать с помощью переменных среды:
baudrate — см. CONFIG_BAUDRATE;
bootdelay — см. CONFIG_BOOTDELAY;
bootcmd — см. CONFIG_BOOTCOMMAND;
bootargs — аргументы загрузки при загрузке образа RTOS;
bootfile — имя образа для загрузки с TFTP. Если установлено значение «no» (любая строка, начинающаяся с «n»),
«bootp» просто загрузит конфигурацию с сервера BOOTP, но не будет пытаться загрузить образ с помощью TFTP.
autostart — если установлено значение «yes», образ, загруженный с помощью команд «bootp», «rarpboot», «tftpboot» или «diskboot», будет автоматически запущен (путем внутреннего вызова «bootm»).
Если установлено значение «нет», автономный образ, переданный команде «bootm», будет скопирован по адресу загрузки (и в конечном итоге распакован), но НЕ будет запущен. Это можно использовать для загрузки и распаковки произвольных данных.
i2cfast — (только PPC405GP|PPC405EP)
если установлено значение 'y', настраивает драйвер Linux I2C для быстрого режима (400 кГц). Эта переменная среды используется в коде инициализации. Поэтому, чтобы изменения вступили в силу, их необходимо сохранить, а плату необходимо перезагрузить.
initrd_high — ограничивает размещение образов initrd:
Если эта переменная не установлена, образы initrd будут скопированы по максимально возможному адресу в ОЗУ; обычно это то, что вам нужно, поскольку это позволяет использовать максимальный размер initrd. Если по какой-то причине вы хотите убедиться, что образ initrd загружен ниже предела CFG_BOOTMAPSZ, вы можете установить эту переменную среды на значение «нет» или «выкл.» или «0».
Альтернативно, вы можете задать для нее максимальное значение верхнего адреса для использования (U-Boot все равно проверит, не перезаписывает ли он стек и данные U-Boot).
Например, когда у вас есть система с 16 МБ ОЗУ и вы хотите зарезервировать 4 МБ для использования Linux, вы можете сделать это, добавив «mem=12M» к значению переменной «bootargs». Однако теперь вы должны убедиться, что изображение initrd помещено в первые 12 МБ — это можно сделать с помощью
setenv initrd_high 00c00000
Если вы установите для initrd_high значение 0xFFFFFFFF, это будет означать для U-Boot, что все адреса допустимы для ядра Linux, включая адреса во флэш-памяти. В этом случае U-Boot вообще НЕ БУДЕТ КОПИРОВАТЬ ramdisk. Это может быть полезно для сокращения времени загрузки вашей системы, но требует поддержки этой функции вашим ядром Linux.
ipaddr — IP-адрес; необходим для команды tftpboot.
loadaddr — адрес загрузки по умолчанию для таких команд, как «bootp»,
«rarpboot», «tftpboot», «loadb» или «diskboot».
loads_echo — см. CONFIG_LOADS_ECHO.
serverip — IP-адрес TFTP-сервера; необходим для команды tftpboot.
bootretry — см. CONFIG_BOOT_RETRY_TIME.
bootdelaykey — см. CONFIG_AUTOBOOT_DELAY_STR.
bootstopkey — см. CONFIG_AUTOBOOT_STOP_STR.
ethprime — когда включен CONFIG_NET_MULTI, управляет тем, какой интерфейс используется первым.
ethact — когда CONFIG_NET_MULTI включен, управляет тем, какой интерфейс в настоящее время активен. Например, вы можете выполнить следующее
=> setenv ethact FEC ETHERNET
=> ping 192.168.0.1 # трафик отправляется через FEC ETHERNET
=> setenv ethact SCC ETHERNET
=> ping 10.0.0.1 # трафик отправляется через SCC ETHERNET
netretry — когда установлено значение «нет», каждая сетевая операция либо завершится успешно, либо завершится ошибкой без повторной попытки. Когда установлено значение «один раз», сетевая операция завершится неудачно, если все доступные сетевые интерфейсы будут испробованы один раз без успеха. Полезно в сценариях, которые сами контролируют операцию повтора.
tftpsrcport — если это установлено, значение используется для исходного порта UDP TFTP.
tftpdstport — если это установлено, значение используется для порта назначения UDP TFTP вместо известного порта 69.
vlan — когда установлено значение < 4095, трафик по Ethernet инкапсулируется/принимается через кадры VLAN с тегами 802.1q. **rarpboot**),
в зависимости от информации, предоставленной вашим загрузочным сервером:
* **bootfile** — см. выше;
* **dnsip** — IP-адрес вашего сервера доменных имён;
* **dnsip2** — IP-адрес вторичного сервера доменных имён;
* **gatewayip** — IP-адрес шлюза (маршрутизатора), который будет использоваться;
* **hostname** — целевое имя хоста;
* **ipaddr** — см. выше;
* **netmask** — маска подсети;
* **rootpath** — путь к корневой файловой системе на сервере NFS;
* **serverip** — см. выше.
Есть две специальные переменные среды:
* **serial#** — содержит информацию об аппаратном обеспечении, такую как строка типа и/или серийный номер;
* **ethaddr** — адрес Ethernet.
Эти переменные могут быть установлены только один раз (обычно во время изготовления платы). U-Boot отказывается удалять или перезаписывать эти переменные после их однократной установки.
Дополнительная специальная переменная среды:
* **ver** — содержит строку версии U-Boot, напечатанную с помощью команды «version». Эта переменная доступна только для чтения (см. CONFIG_VERSION_VARIABLE).
Обратите внимание, что изменения некоторых параметров конфигурации могут вступить в силу только после следующей загрузки (да, это похоже на Windoze :-).
**Разбор командной строки:**
Существует два разных парсера командной строки, доступных в U-Boot: старый «простой» и гораздо более мощный «hush» shell:
Старый простой парсер командной строки:
--------------------------------
* поддерживает переменные среды (через команды setenv / saveenv);
* несколько команд в одной строке, разделённых символом ';';
* подстановка переменных с использованием синтаксиса "... ${name} ...";
* специальные символы ('$', ';') можно экранировать, добавляя перед ними символ '\', например:
setenv bootcmd bootm \${address};
* вы также можете экранировать текст, заключая его в одинарные кавычки, например:
setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'.
Hush shell:
-----------
* похож на Bourne shell с такими управляющими структурами, как if...then...else...fi, for...do...done; while...do...done, until...do...done и т. д.;
* поддерживает глобальные переменные («глобальные») (с помощью команд setenv / saveenv) и локальные переменные оболочки (с помощью стандартного синтаксиса оболочки «имя=значение»); только переменные окружения можно использовать с командой «run».
Общие правила:
--------------
(1) Если командная строка (или переменная окружения, выполняемая командой «run») содержит несколько команд, разделённых точкой с запятой, и одна из этих команд завершается неудачно, остальные команды всё равно будут выполнены.
(2) Если вы выполняете несколько переменных одним вызовом run (т. е. вызываете run со списком переменных в качестве аргументов), любая неудачная команда приведёт к завершению «run», то есть оставшиеся переменные не будут выполнены.
Примечание для избыточных Ethernet-интерфейсов:
=======================================
Некоторые платы поставляются с избыточными Ethernet-интерфейсами; U-Boot поддерживает такие конфигурации и способен автоматически выбирать «рабочий» интерфейс при необходимости. Назначение MAC-адресов работает следующим образом:
Сетевые интерфейсы нумеруются eth0, eth1, eth2 и т.д. Соответствующие MAC-адреса могут храниться в среде как «ethaddr» (=>eth0), «eth1addr» (=>eth1), «eth2addr» и т. д.
Если сетевой интерфейс хранит действительный MAC-адрес (например, в SROM), этот адрес используется по умолчанию, если в среде нет соответствующего параметра; если соответствующий параметр среды установлен, он переопределяет настройки карты; это означает:
o Если SROM имеет действительный MAC-адрес, а в среде адреса нет, используется адрес SROM.
o Если в SROM нет действительного адреса, а определение в среде существует, то используется значение переменной среды.
o Если и SROM, и среда содержат MAC-адрес, и оба адреса совпадают, используется этот MAC-адрес.
o Если и в SROM, и в среде содержится MAC-адрес, но адреса различаются, используется значение из переменной среды, и выводится предупреждение.
o Если ни SROM, ни среда не содержат MAC-адреса, возникает ошибка.
**Форматы образов:** **Создание образов U-Boot с помощью mkimage**
Инструмент «mkimage» также можно использовать для создания образов RAM-диска для использования с U-Boot, отдельно от образа ядра Linux или объединённых в один файл. «mkimage» инкапсулирует образы 64-байтным заголовком, содержащим информацию о целевой архитектуре, операционной системе, типе образа, методе сжатия, точках входа, метке времени, контрольных суммах CRC32 и т. д.
«mkimage» можно вызвать двумя способами: чтобы проверить существующие образы и распечатать информацию заголовка или чтобы создать новые образы.
В первой форме (с опцией «-l») «mkimage» выводит список информации, содержащейся в заголовке существующего образа U-Boot; это включает проверку контрольной суммы:
tools/mkimage -l image
-l ==> вывести информацию заголовка образа
Вторая форма (с опцией «-d») используется для создания образа U-Boot из файла данных, который используется в качестве полезной нагрузки образа:
tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
-n name -d data_file image
-A ==> установить архитектуру на 'arch'
-O ==> установить операционную систему на 'os'
-T ==> установить тип образа на 'type'
-C ==> установить метод сжатия 'comp'
-a ==> установить адрес загрузки на 'addr' (шестнадцатеричный)
-e ==> установить точку входа на 'ep' (шестнадцатеричная)
-n ==> установить имя образа на 'name'
-d ==> использовать данные образа из 'datafile'
На данный момент все ядра Linux для систем PowerPC используют один и тот же адрес загрузки (0x00000000), но адрес точки входа зависит от версии ядра:
- ядра 2.2.x имеют точку входа по адресу 0x0000000C,
- ядра 2.3.x и более поздние имеют точку входа по адресу 0x00000000.
Таким образом, типичный вызов для создания образа U-Boot будет выглядеть так:
-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
> -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz \
> examples/uImage.TQM850L
Имя образа: 2.4.4 kernel for TQM850L
Создано: среда, 19 июля 2000 г., 02:34:59
Тип образа: Образ ядра Linux PowerPC (сжатый gzip)
Размер данных: 335725 байт = 327,86 КБ = 0,32 МБ
Адрес загрузки: 0x00000000
Точка входа: 0x00000000
Чтобы проверить содержимое образа (или проверить наличие повреждений):
-> tools/mkimage -l examples/uImage.TQM850L
Имя образа: 2.4.4 kernel for TQM850L
Создано: среда, 19 июля 2000 г., 02:34:59
Тип образа: Образ ядра Linux PowerPC (сжатый gzip)
Размер данных: 335725 байт = 327,86 КБ = 0,32 МБ
Адрес загрузки: 0x00000000
Точка входа: 0x00000000
Примечание: для встраиваемых систем, где время загрузки критично, вы можете обменять скорость на память и установить несжатый образ: это требует больше места во Flash, но загружается намного быстрее, поскольку его не нужно распаковывать:
-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz
-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
> -A ppc -O linux -T kernel -C none -a 0 -e 0 \
> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux \
> examples/uImage.TQM850L-uncompressed
Имя образа: 2.4.4 kernel for TQM850L
Создано: среда, 19 июля 2000 г., 02:34:59
Тип образа: Образ ядра Linux PowerPC (несжатый)
Размер данных: 792160 байт = 773,59 КБ = 0,76 МБ
Адрес загрузки: 0x00000000
Точка входа: 0x00000000
Аналогичным образом вы можете создавать образы U-Boot из файла ramdisk.image.gz, когда ваше ядро предназначено для использования начального RAM-диска:
-> tools/mkimage -n 'Simple Ramdisk Image' \
> -A ppc -O linux -T ramdisk -C gzip \
> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
Имя образа: Simple Ramdisk Image
Создано: 12 января 2000 года, 14:01:50
Тип образа: Образом RAM-диска Linux PowerPC (gzip сжатый)
Размер данных: 566530 байт = 553,25 КБ = 0,54 МБ
Адрес загрузки: 0x00000000
Точка входа: 0x00000000 **Загрузка и запуск Linux на устройстве TQM8xxL**
Чтобы загрузить образ в заданный адрес, необходимо указать целевой адрес как параметр «offset» с командой «loads».
Пример: установка образа по адресу 0x40100000 (который на TQM8xxL находится в первом Flash-банке):
=> erase 40100000 401FFFFF
.......... done
Стёрто 8 секторов
=> loads 40100000
## Ready for S-Record download ...
~>examples/image.srec
1 2 3 4 5 6 7 8 9 10 11 12 13 ...
...
15989 15990 15991 15992
[file transfer complete]
[connected]
## Start Addr = 0x00000000
Успех загрузки можно проверить с помощью команды «iminfo»; она также включает проверку контрольной суммы, чтобы убедиться, что данные не повреждены:
=> imi 40100000
## Checking Image at 40100000 ...
Image Name: 2.2.13 for initrd on TQM850L
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 335725 Bytes = 327 kB = 0 MB
Load Address: 00000000
Entry Point: 0000000c
Verifying Checksum ... OK
Загрузка Linux:
-----------
Команда «bootm» используется для загрузки приложения, которое хранится в памяти (ОЗУ или Flash). В случае образа ядра Linux содержимое переменной среды «bootargs» передаётся ядру в качестве параметров. Вы можете проверить и изменить эту переменную с помощью команд «printenv» и «setenv»:
=> printenv bootargs
bootargs=root=/dev/ram
=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
=> printenv bootargs
bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPCC nfsaddrs=10.0.0.99:10.0.0.2
=> bootm 40020000
## Booting Linux kernel at 40020000 ...
Image Name: 2.2.13 for NFS on TQM850L
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 381681 Bytes = 372 kB = 0 MB
Load Address: 00000000
Entry Point: 0000000c
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
time_init: decrementer frequency = 187500000/60
Calibrating delay loop... 49.77 BogoMIPS
Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
...
Если вы хотите загрузить ядро Linux с начальным RAM-диском, вы передаёте адреса памяти как ядра, так и образа initrd (формат PPBCOOT!) команде «bootm»:
=> imi 40100000 40200000
## Checking Image at 40100000 ...
Image Name: 2.2.13 for initrd on TQM850L
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 335725 Bytes = 327 kB = 0 MB
Load Address: 00000000
Entry Point: 0000000c
Verifying Checksum ... OK
## Checking Image at 40200000 ...
Image Name: Simple Ramdisk Image
Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
Data Size: 566530 Bytes = 553 kB = 0 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
=> bootm 40100000 40200000
## Booting Linux kernel at 40100000 ...
Image Name: 2.2.13 for initrd on TQM850L
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 335725 Bytes = 327 kB = 0 MB
Load Address: 00000000
Entry Point: 0000000c
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
## Loading RAMDisk Image at 40200000 ...
Image Name: Simple Ramdisk Image
Image Type: PowerPC Linux RAMDisk Image (gzip compressed)
Data Size: 566530 Bytes = 553 kB = 0 MB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Loading Ramdisk ... OK
Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
Boot arguments: **root=/dev/ram**
*time_init: decrementer frequency = 187500000/60*
*Calibrating delay loop... 49.77 BogoMIPS*
...
*RAMDISK: Compressed image found at block 0*
*VFS: Mounted root (ext2 filesystem).*
Bash#
**Загрузка Linux и передача плоского дерева устройств:**
Сначала U-Boot должен быть скомпилирован с соответствующими определениями. Более подробное объяснение см. в разделе «Интерфейс ядра Linux» выше. Ниже приведён пример того, как запустить ядро и передать обновлённое плоское дерево устройств:
=> print oftaddr
oftaddr=0x300000
=> print oft
oft=oftrees/mpc8540ads.dtb
=> tftp $oftaddr $oft
Speed: 1000, full duplex
Using TSEC0 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.101
Filename 'oftrees/mpc8540ads.dtb'.
Load address: 0x300000
Loading: #
done
Bytes transferred = 4106 (100a hex)
=> tftp $loadaddr $bootfile
Speed: 1000, full duplex
Using TSEC0 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.2
Filename 'uImage'.
Load address: 0x200000
Loading:############
done
Bytes transferred = 1029407 (fb51f hex)
=> print loadaddr
loadaddr=200000
=> print oftaddr
oftaddr=0x300000
=> bootm $loadaddr - $oftaddr
## Booting image at 00200000 ...
Image Name: Linux-2.6.17-dirty
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 1029343 Bytes = 1005.2 kB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Booting using flat device tree at 0x300000
Using MPC85xx ADS machine description
Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0Mb
[snip]
**Подробнее о типах образов U-Boot:**
U-Boot поддерживает следующие типы образов:
«Автономные программы» непосредственно запускаются в среде, предоставляемой U-Boot; ожидается, что (если они ведут себя хорошо) вы сможете продолжить работу в U-Boot после возврата из автономной программы.
«Образы ядра ОС» обычно представляют собой образы какой-либо встроенной ОС, которая полностью возьмёт на себя управление. Обычно эти программы установят собственный набор обработчиков исключений, драйверов устройств, настроят MMU и т. д. — это означает, что вы не можете ожидать повторного входа в U-Boot, кроме как путём сброса процессора.
«Изображения RAMDisk» — это более или менее просто блоки данных, а их параметры (адрес, размер) передаются ядру ОС, которое запускается.
«Многофайловые образы» содержат несколько образов, обычно ядро ОС Linux и один или несколько образов данных, таких как RAMDisk. Эта конструкция полезна, например, когда вы хотите загрузиться по сети с использованием BOOTP и т. п., где загрузочный сервер предоставляет только один файл образа, но вы хотите получить, например, ядро ОС и образ RAMDisk.
«Многофайловые образы» начинаются со списка размеров образов, каждый размер образа (в байтах) указывается с помощью «uint32_t» в сетевом порядке байтов. Этот список завершается значением (uint32_t)0. Сразу после завершающего нуля следуют изображения, одно за другим, все выровненные по границам «uint32_t» (размер округляется до кратного 4 байтам).
«Образцы прошивки» — двоичные образы, содержащие прошивку (например, образы U-Boot или FPGA), которые обычно будут запрограммированы во флэш-память.
Файлы сценариев — это последовательности команд, которые будут выполняться интерпретатором команд U-Boot; эта функция особенно полезна, когда вы настраиваете U-Boot для использования реальной оболочки (hush) в качестве интерпретатора команд.
**Автономное руководство:**
Одна из особенностей U-Boot заключается в том, что вы можете динамически загружать и запускать «автономные» приложения, которые могут использовать некоторые ресурсы U-Boot, такие как функции ввода-вывода консоли или службы прерываний.
Два простых примера включены в исходные коды:
Демонстрация «Hello World»:
-------------------
'examples/hello_world.c' содержит небольшую демонстрацию «Hello World»; она автоматически компилируется при сборке U-Boot. Она настроена на запуск по адресу 0x00040004, так что вы можете поиграть с ней следующим образом:
=> loads
## Ready for S-Record download ...
~>examples/hello_world.srec
1 2 3 4 5 6 7 8 9 10 11 ...
[file transfer complete]
[connected]
## Start Addr = 0x00040004
=> go 40004 Hello World! This is a test.
## Starting application at 0x00040004 ...
Hello World
argc = 7
argv[0] = "40004"
argv[1] = "Hello"
argv[2] = "World!"
argv[3] = "This"
argv[4] = "is"
argv[5] = "a"
argv[6] = "test."
argv[7] = "<NULL>"
Hit any key to exit ...
## Application terminated, rc = 0x0
Another example, which demonstrates how to register a CPM interrupt
handler with the U-Boot code, can be found in 'examples/timer.c'.
Here, a CPM timer is set up to generate an interrupt every second.
The interrupt service routine is trivial, just printing a '.'
character, but this is just a demo program. The application can be
controlled by the following keys:
? - print current values of the CPM Timer registers
b - enable interrupts and start timer
e - stop timer and disable interrupts
q - quit application
=> loads
## Ready for S-Record download ...
~>examples/timer.srec
1 2 3 4 5 6 7 8 9 10 11 ...
[file transfer complete]
[connected]
## Start Addr = 0x00040004
=> go 40004
## Starting application at 0x00040004 ...
TIMERS=0xfff00980
Using timer 1
tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
Hit 'b':
[q, b, e, ?] Set interval 1000000 us
Enabling timer
Hit '?':
[q, b, e, ?] ........
tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
Hit '?':
[q, b, e, ?] .
tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
Hit '?':
[q, b, e, ?] .
tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
Hit '?':
[q, b, e, ?] .
tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
Hit 'e':
[q, b, e, ?] ...Stopping timer
Hit 'q':
[q, b, e, ?] ## Application terminated, rc = 0x0
Minicom warning:
================
Over time, many people have reported problems when trying to use the
"minicom" terminal emulation program for serial download. I (wd)
consider minicom to be broken, and recommend not to use it. Under
Unix, I recommend to use C-Kermit for general purpose use (and
especially for kermit binary protocol download ("loadb" command), and
use "cu" for S-Record download ("loads" command).
Nevertheless, if you absolutely want to use it try adding this
configuration to your "File transfer protocols" section:
Name Program Name U/D FullScr IO-Red. Multi
X kermit /usr/bin/kermit -i -l %l -s Y U Y N N
Y kermit /usr/bin/kermit -i -l %l -r N D Y N N
NetBSD Notes:
=============
Starting at version 0.9.2, U-Boot supports NetBSD both as host
(build U-Boot) and target system (boots NetBSD/mpc8xx).
Building requires a cross environment; it is known to work on
NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
need gmake since the Makefiles are not compatible with BSD make).
Note that the cross-powerpc package does not install include files;
attempting to build U-Boot will fail because <machine/ansi.h> is
missing. This file has to be installed and patched manually:
# cd /usr/pkg/cross/powerpc-netbsd/include
# mkdir powerpc
# ln -s powerpc machine
# cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
# ${EDIT} powerpc/ansi.h ## must remove __va_list, _BSD_VA_LIST
Native builds *don't* work due to incompatibilities between native
and U-Boot include files.
Booting assumes that (the first part of) the image booted is a
stage-2 loader which in turn loads and then invokes the kernel
proper. Loader sources will eventually appear in the NetBSD source
tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
meantime, see ftp://ftp.denx.de/pub/u-boot/ppcboot_stage2.tar.gz
Implementation Internals:
=========================
The following is not intended to be a complete description of every
implementation detail. However, it should help to understand the inner **Работа с U-Boot и упрощение его портирования на пользовательское оборудование**
Начальная область стека, глобальные данные:
---------------------------
Реализация U-Boot осложняется тем, что U-Boot начинает работать из ПЗУ (флеш-памяти), обычно без доступа к системной оперативной памяти (так как контроллер памяти ещё не инициализирован). Это означает, что у нас нет доступных для записи сегментов данных или BSS, и BSS не инициализируется нулями. Чтобы вообще получить работающую среду C, мы должны выделить хотя бы минимальный стек. Варианты реализации этого определяются и ограничиваются используемым процессором: некоторые модели процессоров предоставляют встроенную память (например, область IMMR на процессорах MPC8xx и MPC826x), на других (части) кэш данных можно заблокировать и использовать в качестве памяти и т. д.
Крис Халлинан опубликовал хорошее резюме этих проблем в списке рассылки u-boot-users:
Тема: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
От: «Крис Халлинан» <clh@net1plus.com>
Дата: Пн, 10 февраля 2003 г., 16:43:46 -0500 (22:43 MET)
...
Поправьте меня, если я ошибаюсь, но насколько я понимаю, использование DCACHE в качестве начальной оперативной памяти для стека и т.д. не требует физической оперативной памяти, поддерживающей кэш. Хитрость заключается в том, что кэш используется в качестве временного источника необходимого хранилища до настройки контроллера SDRAM. В рамках этого списка невозможно подробно объяснить детали, но вы можете увидеть, как это работает, изучив архитектуру кэша и работу в руководствах по архитектуре и процессору.
OCM — это встроенная память, которая, как я полагаю, имеет 4K. Это ещё один вариант для системного проектировщика использовать в качестве области начального стека/RAM до того, как станет доступна SDRAM. Любой из вариантов должен подойти вам. Использование CS 4 должно быть нормальным, если ваши разработчики плат не использовали его для чего-то, что может вызвать проблемы во время начальной загрузки! Часто он не используется.
CFG_INIT_RAM_ADDR должен находиться где-нибудь, чтобы не мешать вашему процессору/плате/системному дизайну. Значение по умолчанию, которое вы найдёте в любом недавнем дистрибутиве u-boot в walnut.h, должно подойти вам. Я бы установил его на значение больше вашего модуля SDRAM. Если у вас модуль SDRAM 64 МБ, установите его выше 400_0000. Просто убедитесь, что ваша плата не имеет ресурсов, которые должны реагировать на этот адрес! Этот код в start.S существует уже некоторое время и должен работать как есть, когда вы правильно настроите конфигурацию.
— Крис Халлинан
DS4.COM, Inc.
Важно помнить об этом, поскольку это влияет на код C для процедур инициализации:
* Инициализированные глобальные данные (сегмент данных) доступны только для чтения. Не пытайтесь их записать.
* Не используйте какие-либо неинициализированные глобальные данные (или неявно инициализированные как нулевые данные — сегмент BSS) вообще — это неопределённо, инициализация выполняется позже (при перемещении в оперативную память).
* Пространство стека очень ограничено. Избегайте больших буферов данных и тому подобного.
Наличие только стека в качестве доступной для записи памяти означает, что мы не можем использовать обычные глобальные данные для обмена информацией между кодом. Но оказалось, что реализацию U-Boot можно значительно упростить, сделав глобальную структуру данных (gd_t) доступной для всех функций. Мы могли бы передать указатель на эти данные в качестве аргумента всем функциям, но это раздуло бы код. Вместо этого мы используем функцию компилятора GCC (глобальные переменные регистра), чтобы поделиться данными: мы помещаем указатель (gd) на глобальные данные в регистр, который резервируем для этой цели.
При выборе регистра для такой цели мы ограничены соответствующими спецификациями (E)ABI для текущей архитектуры и реализацией GCC.
Для PowerPC следующие регистры имеют конкретное назначение:
R1: указатель стека
R2: указатель TOC
R3-R4: передача параметров и возвращаемые значения
R5-R10: передача параметров
R13: указатель небольшой области данных
R30: указатель GOT
R31: указатель кадра
(U-Boot также использует R14 в качестве внутреннего указателя GOT.)
==> U-Boot будет использовать R29 для хранения указателя на... Нормальная среда C;
пока вы ограничены несколькими способами, в основном потому, что вы
запускаетесь из ПЗУ, и потому что код должен быть перемещён на
новый адрес в ОЗУ.
Руководство по переносу U-Boot:
---------------------------
[На основе сообщений Джерри Ван Барена в списке рассылки U-Boot-Users, октябрь 2002 г.]
int main (int argc, char *argv[])
{
sighandler_t no_more_time;
signal (SIGALRM, no_more_time);
alarm (PROJECT_DEADLINE - toSec (3 * WEEK));
if (available_money > available_manpower) {
pay consultant to port U-Boot;
return 0;
}
Скачать последний исходный код U-Boot;
Подписаться на список рассылки u-boot-users;
if (clueless) {
email ("Привет, я новичок в U-Boot, как мне начать?");
}
while (learning) {
Прочитать файл README в каталоге верхнего уровня;
Читать http://www.denx.de/twiki/bin/view/DULG/Manual ;
Читать источник, Люк;
}
if (available_money > toLocalCurrency ($2500)) {
Купить BDI2000;
} else {
Добавить много раздражения и времени;
}
Создать собственный подкаталог поддержки платы;
Создайте собственный файл конфигурации платы;
while (!running) {
do {
Добавить / изменить исходный код;
} until (компилируется);
Отладка;
if (clueless)
email ("Привет, у меня проблемы...");
}
Отправить файл патча Вольфгангу;
return 0;
}
void no_more_time (int sig)
{
hire_a_guru();
}
Стандарты кодирования:
---------------------
Все вклады в U-Boot должны соответствовать стилю кодирования Linux-ядра; см. файл "Documentation/CodingStyle" и скрипт
"scripts/Lindent" в вашем исходном каталоге Linux-ядра. В источниках, происходящих из U-Boot, фактически используется стиль, соответствующий "Lindent -pcs" (добавление пробелов перед параметрами вызовов функций).
Исходные файлы, происходящие из другого проекта (например, подсистема MTD), обычно освобождаются от этих рекомендаций и не переформатируются для облегчения последующей миграции на более новые версии этих источников.
Обратите внимание, что U-Boot реализован на C (и в некоторых небольших частях на ассемблере); C++ не используется, поэтому, пожалуйста, не используйте комментарии в стиле C++ (//) в своём коде.
Также придерживайтесь следующих правил форматирования:
- удалите все конечные пробелы;
- используйте символы TAB для отступов, а не пробелы;
- убедитесь, что не используете DOS '\r\n' переводы строк;
- не добавляйте более 2 пустых строк к исходным файлам;
- не добавляйте пустые строки в конце исходных файлов.
Материалы, которые не соответствуют стандартам, могут быть возвращены с просьбой переформатировать изменения.
Отправка патчей:
-----------------
Поскольку количество патчей для U-Boot растёт, нам необходимо
установить некоторые правила. Материалы, которые не соответствуют этим правилам, могут быть отклонены, даже если они содержат важные и ценные материалы.
Патчи следует отправлять в список рассылки u-boot-users.
Отправляя патч, укажите следующую информацию:
* Для исправления ошибок: описание ошибки и того, как ваш патч исправляет эту ошибку. Пожалуйста, попробуйте включить способ демонстрации того, что патч действительно что-то исправляет.
* Для новых функций: описание функции и вашей реализации.
* Запись CHANGELOG в виде открытого текста (отдельно от патча).
* Для крупных вкладов — ваша запись в файле CREDITS.
* Когда вы добавляете поддержку новой платы, не забудьте также добавить эту плату в сценарий MAKEALL.
* Если ваш патч добавляет новые параметры конфигурации, не забудьте задокументировать их в файле README.
* Сам патч. Если вы обращаетесь к репозиторию CVS, используйте "cvs update; cvs diff -puRN"; в противном случае используйте "diff -purN OLD NEW". Если ваша версия diff не поддерживает эти параметры, получите последнюю версию GNU diff.
Текущий каталог при выполнении этой команды должен быть верхним уровнем исходного дерева U-Boot или его родительским каталогом (т. е. убедитесь, что ваш патч включает достаточную информацию о каталоге для затронутых файлов).
Мы принимаем патчи в виде простого текста, MIME-вложений или в виде Заархивированный с помощью uuencode текст.
* Если один логический набор изменений затрагивает или создаёт несколько файлов, все эти изменения должны быть представлены в ОДНОМ файле патча.
* Наборы изменений, которые содержат разные, не связанные между собой модификации, должны быть отправлены как ОТДЕЛЬНЫЕ патчи, по одному набору изменений на патч.
Примечания:
* Перед отправкой патча запустите скрипт MAKEALL в исправленном исходном дереве и убедитесь, что ни для одной из плат не выводятся ошибки или предупреждения.
* Ограничьте свои изменения необходимым минимумом: патч, содержащий несколько несвязанных изменений или произвольные переформатирования, будет возвращён с просьбой переформатировать / разделить его.
* Если вы изменяете существующий код, убедитесь, что ваш новый код не увеличивает объём используемой памяти кода ;-) Малое прекрасно! При добавлении новых функций они должны компилироваться только условно (с использованием #ifdef), и полученный код с новой функцией, отключённой, не должен требовать больше памяти, чем старый код без вашей модификации.
* Помните, что существует ограничение размера в 40 КБ на одно сообщение в списке рассылки u-boot-users. Сжатие может помочь.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wenfengliaoshuzhai-uboot-1.1.6.git
git@api.gitlife.ru:oschina-mirror/wenfengliaoshuzhai-uboot-1.1.6.git
oschina-mirror
wenfengliaoshuzhai-uboot-1.1.6
wenfengliaoshuzhai-uboot-1.1.6
master