Программирование ARM Загрузка процессоров TI, создание загрузочной флешки SD Sat, April 20 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Загрузка процессоров TI, создание загрузочной флешки SD Печать
Добавил(а) microsin   

В этой статье описывается последовательность загрузки (boot sequence) OMAP3 EVM (EValuation Module, оценочная плата разработчика TI). Это перевод документации [1].

[Основная последовательность загрузки (система Linux)]

Последовательность загрузки осуществляется в следующем порядке [7]:

1. Boot ROM
2. X-loader
3. U-boot
4. Linux

При включении питания CPU OMAP3 (OMAP это технология TI, означает Open Multimedia Application Platform - открытая платформа мультимедийных приложений, подробности см. в Википедии) начинает загрузку с выполнения внутреннего кода Boot ROM. Этот код фиксированно установлен в CPU на этапе производства, и никак не может быть изменен. Boot ROM опрашивает состояние выводов конфигурации загрузки (boot configuration pins, SW4 на OMAP3 EVM), что укажет ему, где должен находиться первый внешний загрузчик. Возможен выбор вариантов NAND, UART и SD/MMC Card. Затем управление передается в этот внешний загрузчик, который называется x-loader. Приложение x-loader, включенное в Linux PSP, предоставляется TI, и может быть изменено конечным пользователем. Приложение x-loader передает управление в загрузчик u-boot. U-boot это тоже загрузчик, и в этом случае он считается внешним загрузчиком второго уровня.

U-boot это приложение, которое передает управление системе Linux. Главная задача u-boot - получить откуда-то код ядра (Linux kernel) и предоставить ядру информацию о местонахождении файловой системы Linux. U-boot может быть сконфигурирован для получения ядра из NAND, SD/MMC Card, UART или Ethernet (через TFTP). U-boot может также указать место корневой файловой системы (root filesystem) в памяти NAND (jffs2), SRAM (ramdisk), SD/MMC card (раздел ext3) или файловая система может быть смонтирована через сетевой протокол IP (NFS).

Затем U-boot загружает Linux kernel. Linux kernel монтирует корневую файловую систему (Linux root filesystem).

[Загрузка TI SDK]

OMAP3 EVM, который включает TI SDK, поставляется с картой SD. Эта карта отформатирована и на ней созданы разделы таким образом, что вся система загружается с этой карты. Здесь есть загружаемый раздел FAT (bootable FAT partition), который содержит x-loader (MLO), u-boot (файл u-boot.bin) и Linux kernel (uImage). Здесь также есть отдельный раздел ext3, где содержится корневая файловая система (Linux root filesystem).

Карта Linux SD, предоставляемая с платами Sitara AMx EVM, может быть повторно создана с помощью Sitara Linux SDK. Здесь описывается процесс создания карты SD, которая может быть загружена всем необходимым для запуска системы Linux на Sitara EVM. ВАЖНОЕ ЗАМЕЧАНИЕ: внимательно прочитайте эту инструкцию и поймите её указания перед тем, как запускать любой из описанных здесь скриптов.

[Сколько потребуется разделов на карте SD]

AM35x EVM или AM37 EVM. Эти EVM используют 3 раздела. На карте будет маленький (примерно 70 мегабайт) загружаемый DOS-раздел для бинарников системы (x-loader, u-boot, uImage), и раздел ext3 (приблизительно 1 гигабайт) для корневой файловой системы (Linux root file system), и еще один раздел ext3 для исполняемого файла инсталлятора Linux и исходного кода SDK. Третий раздел займет все оставшееся пространство карты SD поэтому если у карты объем 2 гигабайта, то третий раздел получит размер около 1 гигабайта. Соответственно если карта размером 4 гигабайта, то третий раздел будет размером около 3 гигабайт.

Имя раздела Тип Система Содержимое
Boot FAT32 Windows/Linux Демонстрационная страничка; windows_user.htm
File System EXT3 Linux Корневая файловая система
START_HERE EXT3 Linux Инсталлятор SDK; setup.htm

AM180x EVM или AM1810 EVM. Эти EVM используют 2 раздела. Здесь находится альтернативный скрипт, который создаст на карте 2 раздела, только раздел загрузки и раздел файловой системы. Эти разделы - все что нужно для для загрузки системы с карты SD. Третий раздел опционален.

ВНИМАНИЕ: этот процесс запускает форматирование и создание разделов на носителе. Пользователю следует тщательно проверить имена устройств, передаваемых скрипту, используемому в этом процессе. Иначе есть возможность отформатировать и уничтожить файловую систему хоста, где происходит форматирование.

Предполагаемое оборудование:

• Машина хоста Linux с доступными портами USB для подключения карт-ридера SD (также подойдет виртуальная машина).
• Карт-ридер USB.
• Карта SD (рекомендуемый размер как минимум 4 гигабайта).

Необходимое ПО:

• Системные бинарники Linux (x-loader, u-boot, uImage).
• Корневая файловая система (Linux embedded system root filesystem).

[Как создать на SD-карте 3 раздела]

Следующие процедуры относятся к процессорам TI Sitara: AM35x и AM37x.

1. Подготовка скрипта. Создайте файл на хосте Linux с именем mk3PartSDCard. Скопируйте в него содержимое показанного ниже скрипта, и сохраните файл. Этот скрипт создает 3 раздела, далее будет также описан скрипт, создающий 2 раздела.

#! /bin/sh
# mk3PartSDCard.sh v0.3
# Licensed under terms of GPLv2
 
DRIVE=$1
 
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
 
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
 
echo DISK SIZE - $SIZE bytes
 
CYLINDERS=`echo $SIZE/255/63/512 | bc`
 
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
,9,0x0C,*
10,115,,-
126,,,-
EOF
 
mkfs.vfat -F 32 -n "boot" ${DRIVE}1
umount ${DRIVE}1
mkfs.ext3 -L "rootfs" ${DRIVE}2
umount ${DRIVE}2
mkfs.ext3 -L "START_HERE" ${DRIVE}3

Этот скрипт требует для запуска один входной параметр, который должен обозначать устройство носителя, установленное в карт-ридер USB. ВАЖНОЕ ЗАМЕЧАНИЕ: не запускайте этот скрипт, если не уверены полностью, что корректно ввели в параметре имя устройства. Если Вы случайно укажете устройство жесткого диска машины хоста, то его содержимое будет уничтожено. Далее будет показано, как правильно определить имя устройства, соответствующее подключенной в ридер карте SD, и как определить имя системного жесткого диска хоста.

Как правильно определить нужное имя устройства. Как уже было сказано, скрипту нужно передать один параметр, обозначающий целевой форматируемый носитель. Этот параметр должен однозначно указывать на устройство, используемое для подключения к карт-ридеру USB SD. Для этой цели можно использовать команду df -hT, см. пример ниже.

user@UbuntuVbox1004:~$ df -hT
Filesystem     Type     Size     Used     Avail    Use%     Mounted on
/dev/sda1      ext4     19G      16G      2.5G     87%      /
none        devtmpfs    245M     308K     245M     1%       /dev
none          tmpfs     249M     192K     249M     1%       /dev/shm
none          tmpfs     249M     340K     249M     1%       /var/run
none          tmpfs     249M     0        249M     0%       /var/lock
none          tmpfs     249M     0        249M     0%       /lib/init/rw
/dev/sdb1      vfat     1.9G     4.0K     1.9G     1%       /media/00F8-E7F0
user@UbuntuVbox1004:~$

Показанный выше пример показывает результат выполнения команды df на системе Linux, к которой подключен USB карт-ридер, в котором установлена карта SD. Карт-ридер соответствует устройству /dev/sdb1. Карта SD, установленная в карт-ридер, имеет размер 2 гигабайта, и отформатирована как один стандартный раздел Windows FAT. Это обычное состояние для карты SD, купленной в магазине. Важно отметить, что раздел хоста Linux, где запускаются команды (смонтированный на /) соответствует устройств /dev/sda1. Имя /dev/sda показывает, что машина хоста имеет диск SATA. Если бы машина имела более старый диск IDE, то устройство получило бы имя /dev/hda.

Теперь мы четко знаем, что скрипту следует передать имя /dev/sdb, ни в коем случае не /dev/sda. Передача скрипту устройства, связанного с жестким диском машины хоста, попросту разрушит операционную систему Linux на хосте.

И еще несколько замечаний. Другие системы могут иметь аппаратуру, размещенную в других устройствах системы. Некоторые системы могут иметь несколько карт-ридеров. Так что один карт-ридер может называться /dev/sdb и другой /dev/sdc. Также может быть, что хост смонтировал жесткий диск IDE на устройстве /dev/hda, и имеет карт-ридер USB SD на имени /dev/sda. В этом случае будет правильным передать скрипту имя /dev/sdat. В любом случае пользователь должен правильно определить, что передавать в параметре скрипта.

2. Сделайте скрипт запускаемым:

user@UbuntuVbox1004:~$ chmod 755 mk3PartSDCard

3. Запуск скрипта. После того, как Вы правильно определили имя устройства, которое нужно передать скрипту, необходимо размонтировать любую директорию, которая смонтирована на этом устройстве. В примере запуска команды df, показанном выше, на устройство /dev/sdb1 смонтирована директория /media/disk. Для размонтирования выполните следующую команду:

user@Ubuntu1004:~$ umount /dev/sdb1

Скрипт должен быть запущен с правами суперпользователя. В Ubuntu это осуществляется через команду "sudo". Когда sudo запросит пароль, используйте пароль пользователя root.

user@Ubuntu1004:~$ sudo ./mk3PartSDCard /dev/sdb

Успешное выполнение скрипта в покажет в терминале вывод, подобный показанному ниже. Ошибка, которую может выдать sfdisk (что и показано ниже) может быть безопасно проигнорирована.

user@UbuntuVbox1004:~$ sudo ./mk3PartSD /dev/sdb
[sudo] password for user:
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 1.53109 s, 685 kB/s
Disk /dev/sdb doesn't contain a valid partition table
DISK SIZE - 1977614336 bytes
Checking that no-one is using this disk right now ...
OK
 
Disk /dev/sdb: 240 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
 
Device      Boot  Start    End   #cyls    #blocks     Id System
/dev/sdb1   *     0+       8     9-       72261       c W95 FAT32 (LBA)
/dev/sdb2         10       124   115      923737+     83 Linux
/dev/sdb3         126      239   114      915705      83 Linux
/dev/sdb4         0        - 0   0        0           Empty
Successfully wrote the new partition table
Re-reading the partition table ...
 
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
mkfs.vfat 3.0.7 (24 Dec 2009)
umount: /dev/sdb1: not mounted
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
57856 inodes, 230934 blocks
11546 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=239075328
8 block groups
32768 blocks per group, 32768 fragments per group
7232 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
umount: /dev/sdb2: not mounted
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=START_HERE
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
57232 inodes, 228926 blocks
11446 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=234881024
7 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 27 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Скрипт будет работать до тех пор, пока в терминале снова не покажется приглашение ввода команды Linux. На этой точке нужно размонтировать все на устройстве /dev/sdb:

user@Ubuntu1004:~$ umount /dev/sdb1
user@Ubuntu1004:~$ umount /dev/sdb2
user@Ubuntu1004:~$ umount /dev/sdb3

Теперь физически извлеките карту SD из карт-ридера USB, и снова установите её. Ubuntu автоматически смонтирует на ней новые разделы. Запуск команды df -hT должен показать следующее:

user@Ubuntu1004:~$ df -hT
Filesystem     Type     Size     Used     Avail    Use%  Mounted on
/dev/sda1      ext4     19G      16G      2.5G     87%   /
none        devtmpfs    245M     360K     245M     1%    /dev
none           tmpfs    249M     252K     249M     1%    /dev/shm
none           tmpfs    249M     340K     249M     1%    /var/run
none           tmpfs    249M     0        249M     0%    /var/lock
none           tmpfs    249M     0        249M     0%    /lib/init/rw
/dev/sdb1      vfat     70M      512      70M      1%    /media/boot
/dev/sdb2      ext3     888M     18M      826M     3%    /media/rootfs
/dev/sdb3      ext3     881M     17M      819M     3%    /media/START_HERE
user@Ubuntu1004:~$

Загрузочный раздел на карте SD (vfat, смонтированный сейчас как /media/boot) по минимуму должен содержать x-loader в файле MLO, файлы u-boot.bin и uImage. Раздел rootfs это корневая файловая файловая система для embedded Linux.

[Как создать на SD-карте 2 раздела]

Следующие процедуры относятся к процессорам TI Sitara: AM180x и AM1810.

Карта SD с двумя разделами может быть создана незначительно модифицированным скриптом, который использовался для создания карты SD с тремя разделами. Сохраните скрипт, описанный ранее, в файл с именем mk2PartSDCard. Используйте для него те же предохранительные процедуры. ВНИМАНИЕ: этот скрипт также опасен при неправильном использовании!

#! /bin/sh
# mk2PartSDCard.sh v0.1
# Licensed under terms of GPLv2
 
DRIVE=$1
 
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
 
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
 
echo DISK SIZE - $SIZE bytes
 
CYLINDERS=`echo $SIZE/255/63/512 | bc`
 
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
,9,0x0C,*
10,114,,,
EOF
 
mkfs.vfat -F 32 -n "boot" ${DRIVE}1
umount ${DRIVE}1
mkfs.ext3 -L "rootfs" ${DRIVE}2

После использования этого скрипта на карте SD будет создан раздел с именем "boot" и размером 70M. Второй раздел будет разделом Linux ext3, у него будет имя "rootfs", и он займет все оставшееся пространство карты. Этот скрипт очень хорошо работает с картами на 2 гигабайта.

[Копирование на карту системных файлов]

Настало время скопировать на карту SD загрузчики, ядро Linux и другие необходимые файлы. Готовые собранные системные файлы включены в Sitara SDK. Для AM35x/37x EVM файлы загрузчика и образа ядра могут быть размещены в загрузочном разделе карты SD. Для AM18x/181x EVM на карту SD нужно записать только образ ядра, потому что эти платы EVM должны иметь загрузчик (u-boot), записанный в SPI flash. Файлы загрузчика и ядра обычно находятся в подкаталоге установки SDK с именем psp/prebuilt-images. Корневая файловая система присутствует в tarball, находящемся в поддиректории инсталляции SDK с именем filesystem. Пример ниже показывает эти места на диске для AM37x SDK.

user@UbuntuVbox1004:~/ti-sdk-am37x-evm-4.0.1.0/filesystem$ ls -l
total 10504
-rw-r--r-- 1 user user 10751480 2011-01-26 09:13 base-rootfs-am37x-evm.tar.gz
drwxr-xr-x 18 user user 4096 2011-02-07 14:40 SDK_NFS
user@UbuntuVbox1004:~/ti-sdk-am37x-evm-4.0.1.0/filesystem$ cd ..
user@UbuntuVbox1004:~/ti-sdk-am37x-evm-4.0.1.0$ cd psp/prebuilt-images/
user@UbuntuVbox1004:~/ti-sdk-am37x-evm-4.0.1.0/psp/prebuilt-images$ ls -l
total 51168
lrwxrwxrwx 1 user user 40 2011-02-11 16:09 MLO -> MLO-am37x-evm-1.46-psp03.00.01.06.sdk-r0
-rwxr-xr-x 1 user user 20060 2011-01-22 09:30 MLO-am37x-evm-1.46-psp03.00.01.06.sdk-r0
-rwxr-xr-x 1 user user 216572 2011-01-22 09:30 u-boot-am37x-evm-2009.11-psp03.00.01.06.sdk-r0.bin
lrwxrwxrwx 1 user user 50 2011-02-11 16:09 u-boot.bin -> u-boot-am37x-evm-2009.11-psp03.00.01.06.sdk-r0.bin
lrwxrwxrwx 1 user user 13 2011-02-11 16:09 uImage -> uImage-2.6.32
-rw-r--r-- 1 user user 2409528 2011-01-25 17:12 uImage-2.6.32
-rw-r--r-- 1 user user 49743774 2011-01-25 17:12 vmlinux-2.6.32
user@UbuntuVbox1004:~/ti-sdk-am37x-evm-4.0.1.0/psp/prebuilt-images$

Для AM18x/AM181x EVM плата всегда запускает u-boot из SPI flash. Как записать u-boot в SPI flash показано в статье [6].

Для AM35x/37x EVM файлами загрузчика являются MLO и u-boot.bin. Эти два файла должны быть скопированы в загрузочный раздел карты SD.

Для всех EVM образом ядра служит файл uImage. Этот файл нужно записать в загрузочный раздел карты SD.

Корневая файловая система должна быть записана в раздел rootfs карты SD. Tarball, содержащий корневую файловую систему, доступен в директории filesystem установленного SDK. Здесь может быть два разных tarball-а. Пример ниже показывает, что AM181x SDK содержит два tarball-а с корневой файловой системой. Один имеет в имени префикс tisdk- и относится к файловой системе, поставляемой с retail EVM, и там полная система с Matrix GUI и все приложения примеров. Другой tarball это "базовая" файловая система без дополнительных, она может использоваться для как основа произвольных конфигураций Linux.

user@UbuntuVbox1004:~/ti-sdk-am181x-evm-4.0.1.0/filesystem$ ls -l
total 75264
-rw-r--r-- 1 user user 11055454 2011-01-26 10:44 base-rootfs-am181x-evm.tar.gz
-rw-r--r-- 1 user user 66010750 2011-01-26 10:44 tisdk-rootfs-am181x-evm.tar.gz
user@UbuntuVbox1004:~/ti-sdk-am181x-evm-4.0.1.0/filesystem$

Необходимо распаковать (un-tar) одну из этих файловых систем в раздел rootfs карты SD. Простое копирование и метод "drag-and-drop" на существующей файловой системе не сработают. Причина в том, что команда tar, использовавшаяся для создания tarball в SDK, имеет сохраненные полномочия, мягкие ссылки и узды device/file, которые важны в файловой системе. Также эти tarball-ы не создадут новую поддиректорию. Они разработаны для распаковки в раздел rootfs карты SD. Имейте в виду: необходимо использовать команду sudo, когда делаете распаковку tar-пакета файловой системы, чтобы дерево файлов устройств было создано корректно.

Самый лучший способ распаковать tar - сначала поменять текущую директорию на /media/rootfs (или на ту директорию, куда смонтирована карта в системе хоста). Затем нужно запустить команду tar, которая распакует tarball в текущую директорию. И наконец, что может быть самым важным, - нужно запустить команду sync некоторое количество раз после того, как корневая файловая система была распакована tar на карту SD. Это обеспечит гарантию, что все данные из буферов кеширования будут сброшены на физический носитель SD (flush data) и корректно записаны. См. пример ниже.

user@UbuntuVbox1004:~/ti-sdk-am181x-evm-4.0.1.0/filesystem$ cd /media/rootfs
user@UbuntuVbox1004:/media/rootfs$ sudo tar -xzvf
 ~/ti-sdk-am181x-evm-4.0.1.0/filesystem/tisdk-rootfs-am181x-evm.tar.gz
...
... тут будут еще сообщения, если был использован ключ -v в команде tar
...
user@UbuntuVbox1004:/media/rootfs$ sync
user@UbuntuVbox1004:/media/rootfs$ sync

И конечно же, можно поместить все это в скрипт, что может быть полезно для создания более одной карты SD. Пример ниже показывает скрипт, который копирует системные файлы для AM37x SDK. Перед запуском этого скрипта следует правильно отредактировать в нем все пути. Вот этот скрипт:

#! /bin/sh
# cpSDCard v0.1
 
export PATH_TO_SDK=
export PATH_TO_SDBOOT=
export PATH_TO_SDROOTFS=
 
cp $PATH_TO_SDK/psp/prebuilt-images/MLO $PATH_TO_SDBOOT
cp $PATH_TO_SDK/psp/prebuilt-images/u-boot.bin $PATH_TO_SDBOOT
cp $PATH_TO_SDK/psp/prebuilt-images/uImage $PATH_TO_SDBOOT
 
cd $PATH_TO_SDROOTFS
tar -xzvf $PATH_TO_SDK/filesystem/tisdk-rootfs-am37x-evm.tar.gz
sync
sync

Убедитесь, что поменяли export PATH_TO_SDK... на места расположения PSP, установленного в Вашем SDK. Пример ниже показывает пути для AM37 SDK и смонтированной карты SD.

export PATH_TO_SDK=/home/user/ti-sdk-AM37x-evm-4.0.1.0
export PATH_TO_SDBOOT=/media/boot
export PATH_TO_SDROOTFS=/media/rootfs

Для запуска скрипта cpSDCard используйте команду ./cpSDCard, введенную в терминале.

Позвольте скрипту работать, пока в терминале снова не будет выведено приглашение ввода команды. Это займет некоторое время, потому что работа команд "tar" и "sync" может занимать несколько минут.

Двоичные файлы на разделе FAT носят следующие реальные имена:

Приложение или скрипт Реальное имя на карте SD
X-loader MLO
U-boot u-boot.bin
Ядро Linux uImage
Скрипт загрузки boot.scr

Когда происходит загрузка с карты SD, код OMAP3 Boot ROM будет искать а карте SD файл с именем "MLO", где должен находиться загрузчик первого уровня x-loader.

Чтобы запустить загрузку с этой карты SD, перемычки SW4 должны быть установлены в соответствующее положение (SD/MMC boot):

SW4 = 00100111 (уровни нуля и единицы, т. е. в данной конфигурации SW4.1 = лог. 1)

Здесь "1" соответствует для выключателя позиции "On" (замкнуто).

Программа терминала UART, подключенная к UART 1/2 платы EVM, отобразит вывод процесса загрузки платы. Первая секция показывает вывод из x-loader, когда он загружается из карты SD/MMC и запускается.

Texas Instruments X-Loader 1.45 (Mar 19 2010 - 19:44:19)
Starting X-loader on MMC
Reading boot sector
 
212504 Bytes Read from MMC
Starting OS Bootloader from MMC...
Starting OS Bootloader...

Затем X-loader передает управление u-boot. Загрузчик U-boot ожидает найти "переменные окружения" (environment variables) в памяти NAND. Когда плата загружается первый раз, или если NAND была полностью стерта, u-boot покажет предупреждение о неправильном содержимом NAND (Warning - bad CRC or NAND). В этом случае загрузчик U-boot запишет значения переменных окружения по умолчанию (default environment), которые будет впоследствии использовать для продолжения процесса загрузки.

U-Boot 2009.11 (May 06 2010 - 16:57:54)
 
OMAP34xx/35xx-GP ES1.0, CPU-OPP2 L3-165MHz
OMAP3 EVM board + LPDDR/NAND
I2C: ready
DRAM: 128 MB
NAND: 256 MiB
*** Warning - bad CRC or NAND, using default environment
 
In: serial
Out: serial
Err: serial
Read back SMSC id 0x92200000
Die ID #731c0000000000000156087c0a023021
Net: smc911x-0
Hit any key to stop autoboot: 0

Переменные окружения по умолчанию разработаны для загрузки системы Linux с карты SD, так что нет необходимости останавливать процесс загрузки. И в следующий раз, когда загрузится плата EVM, корректные значения default environment будут находиться в памяти NAND, так что предупреждение "bad NAND" выводиться не будет.

U-boot дает пользователю 2-3 секунды на остановку процесса загрузки. Для этого нажмите любую клавишу в окне терминала UART, и u-boot выведет следующее приглашение ввода команд:

OMAP3_EVM #

В этом приглашении можно использовать несколько полезных команд, которые стоит запомнить.

printenv. Для отображения переменных окружения введите "printenv" или просто "pri".

OMAP3_EVM #
OMAP3_EVM # printenv
bootcmd=if mmc init; then if run loadbootscript; then run bootscript; else if run
 loaduimage; then run mmcboot; else run nandboot; f
i; fi; else run nandboot; fi
bootdelay=2
baudrate=115200
bootfile=uImage
loadaddr=0x82000000
usbtty=cdc_acm
console=ttyS0,115200n8
mmcargs=setenv bootargs console=${console} root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait
nandargs=setenv bootargs console=${console} root=/dev/mtdblock4 rw rootfstype=jffs2
loadbootscript=fatload mmc 0 ${loadaddr} boot.scr
bootscript=echo Running bootscript from mmc ...; source ${loadaddr}
loaduimage=fatload mmc 0 ${loadaddr} uImage
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr}
nandboot=echo Booting from nand ...; run nandargs; onenand read ${loadaddr} 280000
 400000; bootm ${loadaddr}
stdin=serial
stdout=serial
stderr=serial
dieid#=731c0000000000000156087c0a023021
ethact=smc911x-0
 
Environment size: 873/131068 bytes
OMAP3_EVM #

Показанные выше переменные окружения это переменные по умолчанию, которые включены в u-boot из TI SDK. Они будут перезаписаны в любое время, когда содержимое NAND стирается. Однако иначе они будут сохранены в NAND между перезагрузками (или выключением/включением питания), и могут быть модифицированы для того, чтобы повлиять на процесс загрузки Linux.

boot. Чтобы продолжить загрузку из u-boot, просто введите команду "boot", и процесс загрузки продолжится, как если бы Вы его не останавливали нажатием любой клавиши при включении питания. Это также эквивалент вводу "run bootcmd". Переменная окружения bootcmd environment это реальная последовательность операторов условия (отделенных друг от друга точками с запятой semicolons), которые выполняют проверку оборудования и ПО для завершения процесса загрузки.

OMAP3_EVM # boot
## Booting kernel from Legacy Image at 80000000 ...
Image Name: Linux-2.6.32
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2396212 Bytes = 2.3 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
 
Starting kernel ...
 
Uncompressing Linux............................................................
...............................................................................
............ done, booting the kernel.

Затем будет выведено несколько сообщений ядра перед появлением приглашения логина (Linux login prompt):

dm3730-am3715-evm login:

В приглашении логина просто введите "root".

[Подробнее про bootcmd]

Переменная окружения bootcmd это набор вложенных друг в друга условных операторов.

bootcmd=if mmc init; then if run loadbootscript; then run bootscript; else if run
 loaduimage; then run mmcboot; else run nandboot; fi; fi; else run nandboot; fi

Первый оператор условия "if mmc init" проверяет, подключена ли карта SD/MMC. Если карта присутствует, то следующий условный оператор "if run loadbootscript" проверяет, есть ли на карте SD скрипт загрузки boot.scr. Если этот скрипт присутствует, то он будет выполнен. Скрипт загрузки содержит аргументы загрузки (boot arguments) и команду для реальной загрузки ядра Linux. Таким образом, если скрипт загрузки существует и выполнен, то не будет осуществлен возврат в остальную часть скрипта bootcmd.

[Ссылки]

1. Boot Sequence site:processors.wiki.ti.com.
2. Processor SDK Linux Software Developer’s Guide site:software-dl.ti.com (Linux, RT-Linux).
3. Processor SDK RTOS Software Developer’s Guide site:software-dl.ti.com.
4. Processor SDK Android Software Developer’s Guide site:software-dl.ti.com.
5. How to Make 3 Partition SD Card site:processors.wiki.ti.com.
6. AM18x Flash Tool User's Guide site:processors.wiki.ti.com.
7Процесс загрузки TI CPU.

 

Добавить комментарий


Защитный код
Обновить

Top of Page