Не удается загрузить базовый OpenEmbedded-Core на Freescale i.MX28

Я пытался собрать и загрузить OpenEmbedded-Core на оценочный набор для Freescale ARM i.MX28, используя уровень Freescale ARM для OpenEmbedded-Core. К сожалению, я не могу найти базовое руководство «Начало работы» (хотя есть Руководство по началу работы с Yocto). К сожалению, я не смог «начать», чтобы успешно загрузиться в базовую командную строку через последовательный порт отладки платы.

Вот то, что я смог собрать воедино, и насколько мне удалось зайти так далеко.

Получить источники

mkdir -p oe-core/freescale-arm
cd oe-core/freescale-arm
git clone git://git.openembedded.org/openembedded-core oe-core
git clone git://github.com/Freescale/meta-fsl-arm.git
cd oe-core
git clone git://git.openembedded.org/meta-openembedded
git clone git://git.openembedded.org/bitbake bitbake

Настройка среды

. ./oe-init-build-env

Это помещает нас в новый подкаталог build и устанавливает определенные переменные среды.

Изменить конфигурацию

Отредактируйте файлы conf/bblayers.conf и local.conf:

conf/bblayers.conf должны быть добавлены слои meta-fls-arm и meta-oe для BBLAYERS. Например.:

BBLAYERS ?= " \
  /home/craigm/oe-core/freescale-arm/oe-core/meta \
  /home/craigm/oe-core/freescale-arm/oe-core/meta-openembedded/meta-oe \
  ${TOPDIR}/../../meta-fsl-arm \
  "

В conf/local.conf я установил:

BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
MACHINE = "imx28evk"

Строить

bitbake core-image-minimal

Я запустил эту сборку за ночь, и она успешно завершилась для меня. Выходные файлы находились в ~/oe-core/freescale-arm/oe-core/build/tmp-eglibc/deploy/images.

Есть два варианта загрузки, которые я хотел бы попробовать, как описано ниже. Загрузка с SD-карты проще, но занимает довольно много времени (~ 30 минут) для записи образа на SD-карту. Загрузка с TFTP + NFS выполняется быстрее, но требует дополнительных настроек.

Загрузка с SD-карты

Записать образ на SD-карту:

sudo dd if=tmp-eglibc/deploy/images/core-image-minimal-imx28evk.sdcard of=/dev/sdc

Это заняло около 30 минут (файл 3,5 ГБ). Затем я вставил его в слот для SD-карты 0 на плате и включил питание. Дошло до загрузки ядра, а потом остановилось:

U-Boot 2012.04.01-00059-g4e6e824 (Aug 23 2012 - 18:08:54)

Freescale i.MX28 family at 454 MHz
BOOT:  SSP SD/MMC #0, 3V3
DRAM:  128 MiB
MMC:   MXS MMC: 0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   FEC0, FEC1
Hit any key to stop autoboot:  0
reading boot.scr

** Unable to read "boot.scr" from mmc 0:2 **
reading uImage

2598200 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 42000000 ...
   Image Name:   Linux-2.6.35.3-11.09.01+yocto-20
   Created:      2012-08-23   7:53:40 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2598136 Bytes = 2.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Загрузка с TFTP + NFS

Сначала я попытался записать U-Boot на SD-карту:

sudo dd if=tmp-eglibc/deploy/images/u-boot-imx28evk.mxsboot-sdcard of=/dev/sdc

Затем я вставил его в слот для SD-карты 0 на плате и включил питание. Но все, что я получил в последовательном порту отладки, было:

0x8020a01d

Итак, я решил использовать дистрибутив U-Boot для i.MX28 от Freescale (из их дистрибутива LTIB) на SD-карту. Я установил подходящие параметры U-Boot для загрузки NFS с параметрами от DHCP.

setenv bootargs console=ttyAMA0,115200n8
setenv bootargs_nfs setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=,v3,tcp fec_mac=${ethaddr}
saveenv

Я подключился к маршрутизатору DD-WRT со следующими настройками DNSmasq:

dhcp-boot=,,192.168.250.106
dhcp-option=17,"192.168.250.106:/home/craigm/rootfs"

На моем хост-компьютере я настроил TFTP-сервер для обслуживания файла uImage из ~/oe-core/freescale-arm/oe-core/build/tmp-eglibc/deploy/images/.

Я также настроил корневой сервер NFS для обслуживания корневой файловой системы. Я отредактировал /etc/exports, чтобы обслуживать /home/craigm/rootfs. Я извлек корневую файловую систему:

bitbake meta-ide-support
rm -Rf ~/rootfs
runqemu-extract-sdk tmp-eglibc/deploy/images/core-image-minimal-imx28evk.tar.bz2 ~/rootfs

Затем я вставил SD-карту U-Boot в слот для SD-карты 0 на плате и включил питание. Дошло до этого и остановилось:

...
TCP cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20090105 abi 8)
NET: Registered protocol family 29
can: raw protocol (rev 20090105)
mxs-rtc mxs-rtc.0: setting system clock to 1970-01-01 00:03:33 UTC (213)
eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=0:00, irq=-1)
eth1: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=0:01, irq=-1)
Sending DHCP requests .
PHY: 0:00 - Link is Up - 100/Full
., OK
IP-Config: Got DHCP answer from 192.168.250.106, my address is 192.168.250.142
IP-Config: Complete:
     device=eth0, addr=192.168.250.142, mask=255.255.255.0, gw=192.168.250.1,
     host=192.168.250.142, domain=, nis-domain=(none),
     bootserver=192.168.250.106, rootserver=192.168.250.106, rootpath=/home/craigm/rootfs
Looking up port of RPC 100003/3 on 192.168.250.106
Looking up port of RPC 100005/3 on 192.168.250.106
VFS: Mounted root (nfs filesystem) on device 0:15.
Freeing init memory: 160K

Я не уверен, работает ли он без последовательной консоли или какая-то другая проблема. Я могу пропинговать его на 192.168.250.142, но я не могу подключиться к нему через Telnet или SSH.

Вопросы

  • Есть ли какое-нибудь руководство по началу работы с OpenEmbedded-Core на Freescale i.MX28?
  • Действительно ли слой Freescale ARM предназначен для использования с OpenEmbedded-Core, Yocto или чем-то еще? Я не очень понимаю, как связаны эти проекты.
  • Кому-нибудь еще удалось загрузить минимальный образ OpenEmbedded-Core на Freescale i.MX28? Если да, то чем ваша процедура отличается от моей?
  • На данном этапе я не уверен, является ли проблема просто неработающей последовательной консолью или какой-то другой проблемой. Трудно диагностировать эти проблемы, которые мешают запуску даже базовой системы. Любые указатели на то, как диагностировать в этой точке?
  • Почему U-Boot сломался, чтобы он даже не загружался?

person Craig McQueen    schedule 27.08.2012    source источник
comment
Я не использовал бесплатное оборудование, которое вы используете, но оно подозрительно похоже на неработающую последовательную консоль (или поврежденную rootfs, но давайте сначала попробуем легко исправить!). В вашем local.conf попробуйте добавить SERIAL_CONSOLE = "115200 ttyO2" (или ttyS2, очевидно, вам также нужно использовать правильный номер консоли для вашего оборудования). После сборки OE проверьте .../your_target_roofs/etc/inittab, чтобы убедиться, что он вызывает getty с правильными серийными параметрами.   -  person Ben    schedule 27.08.2012
comment
/etc/inittab уже содержит строку S:2345:respawn:/sbin/getty 115200 ttyAMA0, и я подумал, что ttyAMA0 - правильное последовательное устройство.   -  person Craig McQueen    schedule 27.08.2012
comment
forums.freescale.com/freescale, пожалуй, лучший форум для таких вопросов, как этот. Поддержка Freescale, а иногда и их разработчики читают этот форум.   -  person Lundin    schedule 27.08.2012


Ответы (1)


Судя по загрузочному сообщению, U-boot работает нормально. U-boot не сломан.

Следующее загрузочное сообщение

2598200 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 42000000 ...
   Image Name:   Linux-2.6.35.3-11.09.01+yocto-20
   Created:      2012-08-23   7:53:40 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2598136 Bytes = 2.5 MiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Судя по приведенному выше журналу, u-boot сделал свое дело. «Загрузка ядра» — это момент, когда загрузчик передает управление ядру.

Я предполагаю, что проблема может быть в образе ядра или в памяти.

Чтобы устранить проблему с памятью, попробуйте проверить руководство и попробуйте прочитать и записать в ОЗУ, используя справочное руководство платы.

Судя по загрузочному журналу, с оперативной памятью проблем нет. Он был инициализирован.

DRAM:  128 MiB

Убедитесь, что следующее сообщение не вызывает проблем. * Предупреждение: неправильный CRC, используется среда по умолчанию

Убедитесь, что все устройства были инициализированы и ничего не пропущено после предупреждения о неверной контрольной сумме.

person New to Rails    schedule 07.08.2013