U-Boot |
Предыдущая Содержание Следующая |
|
Загрузчик второго уровня. Копирует кусок данных из указанного ему места из энергонезависимой памяти в ОЗУ. Так как он считает, что это запакованный образ Linux, он его распаковывает и запускает. Образ ядра должен быть предварительно запакован в понятный формат для U-Boot с помощью утилиты mkimage. U-Boot позволяет производить загрузку образов через ftp, а также менять параметры запуска из командной строки, что удобно в момент отладки системы, когда требуется часто пересобирать ядро, файловую систему.
Используем U-Boot 1.3.4 + патч от linux4sam. http://www.denx.de/wiki/U-Boot/SourceCode http://www.at91.com/linux4sam/bin/view/Linux4SAM/U-Boot
wget ftp://ftp.denx.de/pub/u-boot/u-boot-x.x.x.tar.bz2 tar xvjf u-boot-x.x.x.tar.bz2 cd u-boot-x.x.x wget http://www.linux4sam.org/twiki/pub/Linux4SAM/U-Boot/u-boot-x.x.x-exp.diff # или, в зависимости от версии u-boot, проверить директорию FTP: wget ftp://www.linux4sam.org/pub/uboot/u-boot-x.x.x-exp/u-boot-x.x.x-exp.diff # наложить заплатку на оригинальный u-boot: cat u-boot-x.x.x-exp.diff | patch -p1
Список переменных: http://www.denx.de/wiki/view/DULG/UBootEnvVariables Адаптация кодаПроверить стартовый адрес в /u-boot/board/at91sam9260ek/config.mk. Он должен совпадать с адресом, указанным в Bootstrap (JUMP_ADDRESS).
TEXT_BASE = 0x23F00000
Установить размер памяти, рабочие частоты в /include/configs/at91sam9260.h:
#define AT91C_MAIN_CLOCK 200000000 #define AT91C_MASTER_CLOCK 10000000 #define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */
Понизить при необходимости частоту SPI (согласовать с Bootstrap):
#define AT91C_SPI_CLK 4800000
Задать параметры запуска в соответствующей секции (или во всех). Для JFFS2:
#define CONFIG_BOOTARGS "mem=64M console=ttyS0,115200 " \ "root=/dev/mtdblock1 " \ "rw rootfstype=jffs2"
Для UBIFS:
#define CONFIG_BOOTARGS "mem=64M console=ttyS0,115200 " \ "root=ubi:rootfs ubi.mtd=rootfs " \ "rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw"
Для ramfs:
#define CONFIG_BOOTARGS "mem=64M console=ttyS0,115200"
Для ramfs и монтировании UBIFS файловой системы:
#define CONFIG_BOOTARGS "mem=64M console=ttyS0,115200 ubi.mtd=rootfs"
Обратить внимание на параметр:
#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x210000; bootm"
0xD0042000 = адрес, где находится образ ядра. См. Логическая карта памяти. 0x210000 = 2162688 = максимальный размер образа ядра Linux. 0x22000000 = 32 M = адрес загрузки образ ядра, зависит от объёма установленной памяти.
Установить адрес микросхемы физического интерфейса Ethernet в cpu/arm926ejs/at91sam9/ether.c:
macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x01); КомпиляторИспользуется EABI компилятор. http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite. Используется не новее 2007q1-21. Причина: непонятное увеличение размера скомпилированного файла. КомпиляцияВ Makefile определить путь к компилятору (около 130 строки):
CROSS_COMPILE=arm-none-eabi-
Для запуска Linux из Dataflash сделать файл следующего содержания и запустить:
#!/bin/sh export PATH=/<path to toolchain>/arm-2007q1/bin:${PATH}
make ARCH=arm distclean make at91sam9260ek_dataflash_cs1_config make ARCH=arm CROSS_COMPILE=arm-none-eabi-
Для запуска Linux из Nandflash сделать файл следующего содержания и запустить:
#!/bin/sh export PATH=/<path to toolchain>/arm-2007q1/bin:${PATH}
make ARCH=arm distclean make at91sam9260ek_nandflash_config make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Результат сборки: /<path to u-boot>/board/at91sam9260ek/dataflash/u-boot.bin ~150 Кб. Утилита mkimage для упаковки ядра Linux: /<path to u-boot>/tools/mkimage ~40 кБ. mkimage.zip.
Смотри также How can I access U-Boot environment variables in Linux? http://www.denx.de/wiki/view/DULG/HowCanIAccessUBootEnvironmentVariablesInLinux Using Watchdog on Stamp9G20 or PortuxG20 http://www.armbedded.eu/node/169
| ||
Предыдущая Содержание Следующая |