Jump to content

    

Загрузка НЕ из NAND Flash.

Опять потревожу уважаемое сообщество.

 

Есть проблема: пересобрал ядро и хочу им заменить старое ядро (в нем неправильно сделана настройка одного пина - pinmux).

 

В документации на борду написано: форматнуть SD под FAT32, закинуть файлы и папки linux/image (MLO, boot.img, rootfs.gz, uImage) и замкнуть JP5.

Все делаю как написано - ничего не получается. Т.е. при замыкании JP5 и последующем включении питания - в консоль тупо выдется "С" и всё. Проверил настройку сигналов, отвечающих за загрузку (SYSBOOT) - все верно. В первом случае - загрузка из NAND, а при замыкании JP5 - из MMC0.

Согласно доке на проц - он понимает FAT32 и может найти в корне файл MLO.

 

Попробовал другой вариант: загрузка по TFTP. Поднял в сети TFTP-сервер, закинул в папку - те же файлы. Гружусь в u-boot, настраивают доступ к TFTP и скачиваю uImage (команда tftboot). Скачивается ядро нормально. После этого даю команду go 0x80008000. И на этом все заканчивается...

По умолчанию loadaddr в u-boot настроен на адрес 0x82000000, но при загрузке с NAND - ставится адрес 0x8000800. Поэтому и я такие адреса поставил.

 

SBC8600# tftpboot
Auto negotitation failed
link up on port 1, speed 100, full duplex
Using cpsw device
TFTP from server 192.168.1.65; our IP address is 192.168.1.66
Filename 'uImage'.
Load address: 0x80008000
Loading: #################################################################
         #################################################################
         #################################################################
         ###########################
done
Bytes transferred = 3245384 (318548 hex)
SBC8600# go 0x80008000
## Starting application at 0x80008000 ...

 

А вот - нормальная загрузка с NAND:

U-Boot SPL 2011.09-svn55 (Dec 04 2012 - 09:29:02)
Texas Instruments Revision detection unimplemented
Booting from NAND...


U-Boot 2011.09-svn55 (Dec 04 2012 - 09:29:02)

I2C:   ready
DRAM:  512 MiB
WARNING: Caches not enabled
Did not find a recognized configuration, assuming General purpose EVM in Profile 0 with Daughter board
NAND:  HW ECC Hamming Code selected
512 MiB
MMC:   OMAP SD/MMC: 0
Net:   cpsw
Hit any key to stop autoboot:  0
Card did not respond to voltage select!
Booting from nand ...
HW ECC BCH8 Selected

NAND read: device 0 offset 0x280000, size 0x400000
4194304 bytes read: OK
## Booting kernel from Legacy Image at 80007fc0 ...
   Image Name:   Linux-3.2.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3245320 Bytes = 3.1 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

 

 

Соответственно вопросы:

1. Почему не получается загрузка с SD ?

2. Почему не получается загрузка с TFTP ?

3. Можно ли подсунуть в NAND второе ядро и в u-boot попробовать загрузиться с него (lilo такое умеет).

4. Можно ли вообще без SD/TFTP - безболезненно заменить ядро с возможность восстановления ? Например без перенастройки u-boot - выгрузить старое ядро и загрузить новое?

 

Заранее спасибо за ответы.

 

P.S. Плата: SBC8600 (embest), проц: AM3359, сборка: Angstrom Linux. Загрузчик: u-boot.

Share this post


Link to post
Share on other sites

Попробовал сделать bootm:

 

SBC8600# bootm
## Booting kernel from Legacy Image at 80008000 ...
   Image Name:   Linux-3.2.0
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3245320 Bytes = 3.1 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

 

К сожалению, тоже подвисает...

 

Попробовал другое ядро: аналогично. Виснет и всё тут...

 

Может быть надо грузить с tftp не только uImage, а еще что-то?

Share this post


Link to post
Share on other sites
В документации на борду написано: форматнуть SD под FAT32, закинуть файлы и папки linux/image (MLO, boot.img, rootfs.gz, uImage) и замкнуть JP5.

Все делаю как написано - ничего не получается. Т.е. при замыкании JP5 и последующем включении питания - в консоль тупо выдется "С" и всё.

про bootm вам уже написали..

по разбивке SD карточки - еще раз внимательно перечитайте, что там требуется, ключевые моменты:

- файл MLO - строго большими буквами

- партиция должна иметь статус Active

- после загрузки MLO ищет файл юбута - вы уверены, что он должен называться "boot.img"?

 

Starting kernel ...

К сожалению, тоже подвисает...

переменные окружения для ядра прописаны?

может требуется uEnv.txt - читайте руководство..

консольный порт называется ttyO0 (а не ttyS0 как в "стандартных" системах)

Share this post


Link to post
Share on other sites
Может быть надо грузить с tftp не только uImage, а еще что-то?

Покажите вывод u-boot по команде pri.

Share this post


Link to post
Share on other sites

Переменные окружения u-boot.

 

android_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} root=${android_root}  rootfstype=${nand_root_fs_type} earlyprintk init=/init androidboot.console=ttyO0
android_boot=echo Booting from android ...; run android_args; nandecc hw 2; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}; bootm ${kloadaddr}
android_root=ubi0:rootfs  ubi.mtd=7,2048
autoload=yes
baudrate=115200
bootargs_defaults=setenv bootargs console=${console} ${optargs}
bootcmd=if mmc rescan; then echo SD/MMC found on device ${mmc_dev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n ${uenvcmd}; then echo Running uenvcmd ...;run uenvcmd;fi;if run mmc_load_image; then run mmc_args;bootm ${kloadaddr};fi;fi;run nand_boot
bootdelay=3
bootenv=uEnv.txt
bootfile=uImage
console=ttyO0,115200n8
consoleblank=0
dispmode=4.3inch_LCD
dvsdk_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} root=${dvsdk_root}  rootfstype=${dvsdk_root_fs_type} earlyprintk
dvsdk_boot=echo Booting from dvsdk ...; run dvsdk_args; mmc rescan; run dvsdk_load_image;bootm ${kloadaddr}
dvsdk_load_image=fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile};
dvsdk_root=/dev/mmcblk0p2 rw
dvsdk_root_fs_type=ext3 rootwait
ethact=cpsw
ethaddr=bc:6a:29:57:11:80
importbootenv=echo Importing environment from mmc ...; env import -t ${loadaddr} ${filesize}
ip_method=none
ipaddr=192.168.1.66
kloadaddr=0x80007fc0
loadaddr=0x80008000
loadbootenv=fatload mmc ${mmc_dev} ${loadaddr} ${bootenv}
mmc_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} consoleblank=${consoleblank} root=${mmc_root} initrd=${rdloadaddr},32MB rootfstype=${mmc_root_fs_type} ip=${ip_method}
mmc_boot=run mmc_args; mmc rescan; run mmc_load_image; bootm ${kloadaddr}
mmc_dev=0
mmc_load_image=fatload mmc ${mmc_dev} ${kloadaddr} ${bootfile};fatload mmc ${mmc_dev} ${rdloadaddr} ${ramdisk}
mmc_root=/dev/ram rw
mmc_root_fs_type=ext2
nand_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} consoleblank=${consoleblank} root=${nand_root} noinitrd rootfstype=${nand_root_fs_type} ip=${ip_method}
nand_boot=echo Booting from nand ...; run nand_args; nandecc hw 2; nand read.i ${kloadaddr} ${nand_src_addr} ${nand_img_siz}; bootm ${kloadaddr}
nand_img_siz=0x400000
nand_root=ubi0:rootfs rw ubi.mtd=7,2048
nand_root_fs_type=ubifs rootwait
nand_src_addr=0x280000
net_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
net_boot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${kloadaddr} ${bootfile}; run net_args; bootm ${kloadaddr}
nfsopts=nolock
nor_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} root={nor_root} rootfstype=${nor_root_fs_type} ip=${ip_method}
nor_boot=echo Booting from NOR ...; run nor_args; cp.b ${0x08080000} ${kloadaddr} ${nor_img_siz}; bootm ${kloadaddr}
nor_img_siz=0x280000
nor_root=/dev/mtdblock3 rw
nor_root_fs_type=jffs2
nor_src_addr=0x08080000
ramdisk=ramdisk.gz
rdloadaddr=0x81600000
rootpath=/export/rootfs
script_addr=0x81900000
serverip=192.168.1.65
spi_args=run bootargs_defaults;setenv bootargs ${bootargs} dispmode=${dispmode} root=${spi_root} rootfstype=${spi_root_fs_type} ip=${ip_method}
spi_boot=echo Booting from spi ...; run spi_args; sf probe ${spi_bus_no}:0; sf read ${kloadaddr} ${spi_src_addr} ${spi_img_siz}; bootm ${kloadaddr}
spi_bus_no=0
spi_img_siz=0x280000
spi_root=/dev/mtdblock4 rw
spi_root_fs_type=jffs2
spi_src_addr=0x62000
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
stderr=serial
stdin=serial
stdout=serial
updatesys=nand erase.chip;mmc rescan; fatload mmc 0 82000000 MLO;nandecc hw 2;nand write.i 82000000 0 ${filesize}; fatload mmc 0 82000000 u-boot.img;nandecc hw 2;nand write.i 82000000 80000 ${filesize};fatload mmc 0 82000000 uImage;nandecc hw 2;nand write.i 82000000 280000 ${filesize}; fatload mmc 0 82000000 ubi.img;nandecc sw;nand write.i 82000000 780000 ${filesize};led flash all

Environment size: 4197/8188 bytes

 

 

Файлы на SD:

MLO

ramdisk.gz

u-boot.img

ubi.img

uImage

 

Эти файлы лежат в папке linux/image, как указано в доке на борду.

 

 

Партицию на SD поставить как Active - не удалось. Но вообще говоря, в доке на AM3359 указано:

File system mode (FAT12/16/32 supported with or without Master Boot Record), image data is read

from a booting file.

...

MMC/SD Cards may hold a FAT file system which ROM Code is able to read and process. The image

used by the booting procedure is taken from a specific booting file named “MLO”. This file has to be

located in the root directory on an active primary partition of type FAT12/16 or FAT32.

...

The card should always hold an MBR except for MMC cards using floppy-like file system (please refer to

the CSD internal Register fields FILE_FORMAT_GRP and FILE_FORMAT in the MultiMedia Card System

Specification). However, depending on the used operating system the MMC/SD card will be formatted

either with partition(s) (using an MBR) or without. The ROM Code supports both types; this is described in

the following section.

Share this post


Link to post
Share on other sites
Файлы на SD:

MLO

ramdisk.gz

u-boot.img

ubi.img

uImage

Эти файлы лежат в папке linux/image, как указано в доке на борду.

у вас тут нет рутовой в чистом виде..

попробуйте хотя бы успешно загрузиться до ядра включительно..

в компе с линуксом нарежьте на SD карте два раздела:

1. primary, 16MB, type 0x0b (fat16)

2. primary, все остальное пространство (под будущую рутовую), type 0x83

потом клавишей "a" выставить аттрибут активности первого раздела (звездочка * в поле boot)

потом выйти с записью и отформатировать первый раздел утилитой mkfs.vfat

потом прямо в корень раздела копируете MLO и u-boot.img

замыкаете перемычкой J5 и не отпуская включаете питание платы - вместо CCC должен загрузиться u-boot

(кстати по приглашению CCC можно из терминалки через xmodem попробовать залить MLO)

 

вот тут похожая шпаргалка:

https://code.google.com/p/beagleboard/wiki/...xBootDiskFormat

но внимательно думайте, что набираете в командах..

 

если опыта по линуксу и нарезке флешки мало - лучше попросите/проконсультируйтесь у кого-нить, иначе можно неловким движением снести безвозвратно содержимое винчестера..

или, если под винды, поищите продвинутую утилиту, которая умеет разметить часть SD (винда из-коробки делает единый раздел)

 

 

или даже еще проще эксперимент - берете SD размечаете в fat16/fat32 и в корень (не в каталог) копируете все те же MLO и u-boot.img

 

Партицию на SD поставить как Active - не удалось. Но вообще говоря, в доке на AM3359 указано:

я на эти грабли наступал - было весело, коллеги потом глумились еще неделю:

 

"When acting as hard-drive-like, an MBR is present in the first sector of the card. This MBR holds a

table of partitions, one of which must be FAT12/16/32, primary and active"

т.е. первая партиция должна иметь аттрибут "*"

Edited by Jury093

Share this post


Link to post
Share on other sites
или даже еще проще эксперимент - берете SD размечаете в fat16/fat32 и в корень (не в каталог) копируете все те же MLO и u-boot.img

Собственно, они и так в корне SD-шки лежат. Я их брал из папки linux/image на диске с платой.

 

Насчет Active - попробую обязательно. Я тупанул немного: надо было попробовать Partition Magic, а не стандартными средствами винды. Он ведь должен уметь работать с SD...

 

По Active меня смутило то, что в SD есть "floppy-like file system", который не требует MBR. Но, возможно я неверно понял доку. Такое бывает.

 

 

(кстати по приглашению CCC можно из терминалки через xmodem попробовать залить MLO)

 

Вот это чрезвычайно интересно. А как это можно сделать ? Есть какие-то специальные утилиты ?

 

 

 

Спасибо огромное за ответы! Сегодня вечером попробую - отпишусь.

Share this post


Link to post
Share on other sites
Собственно, они и так в корне SD-шки лежат. Я их брал из папки linux/image на диске с платой.

Насчет Active - попробую обязательно. Я тупанул немного: надо было попробовать Partition Magic, а не стандартными средствами винды. Он ведь должен уметь работать с SD...

возьмите SD на 2-8ГБ (с разделами больше 32Мб для загрузки я не пробовал, возможно тут есть ограничитель)..

 

По Active меня смутило то, что в SD есть "floppy-like file system", который не требует MBR. Но, возможно я неверно понял доку. Такое бывает.

врядли вам удастся штатными средствами сделать floppy-like fs на флешке.. я давно не лазил в эту тематику, но подозреваю, что это случай для fat12, где нет MBR

 

Вот это чрезвычайно интересно. А как это можно сделать ? Есть какие-то специальные утилиты ?

тут все просто - запускаете терминалку, через которую вы управляете вашей платой через последовательный порт (там где бегают CCC) и ищете пункт "отправить/переслать файл" и там же выбор протокола "xmodem"

включаете питание, видите CCC и быстренько отправляете файл MLO в порт

если все пройдет успешно, загрузчик запустится и можно будет по ymodem заслать уже u-boot..

Share this post


Link to post
Share on other sites

Получилось !!!

Сделал SD активной - и всё запустилось. Спасибо огромное !

 

И тогда последний вопрос: если меня устроит новое ядро - как заменить им старое? Просто заменить файл ?

 

Share this post


Link to post
Share on other sites
Получилось !!!

Сделал SD активной - и всё запустилось. Спасибо огромное !

 

И тогда последний вопрос: если меня устроит новое ядро - как заменить им старое? Просто заменить файл ?

поздравляю!

да просто заменить.. это для SD карточки, а для нанда надо следить чтобы новое ядро, допустим большего размера, не затерло что-нить жизненно важное для системы..

рекомендую старое не стирать, а переименовать, тогда если зависнет "новое" ядро, то можно не дергая карточку в картридер, загрузить из юбута "старое "ядро", а затем прямо на системе заменить дефектное ядро..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now