Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузка НЕ из NAND Flash.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Atridies
Опять потревожу уважаемое сообщество.

Есть проблема: пересобрал ядро и хочу им заменить старое ядро (в нем неправильно сделана настройка одного пина - 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.
aaarrr
Ядро надо запускать не через go, а через bootm.
Atridies
Попробовал сделать 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, а еще что-то?
Jury093
Цитата(Atridies @ Aug 2 2015, 20:57) *
В документации на борду написано: форматнуть 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 как в "стандартных" системах)
aaarrr
Цитата(Atridies @ Aug 3 2015, 00:02) *
Может быть надо грузить с tftp не только uImage, а еще что-то?

Покажите вывод u-boot по команде pri.
Atridies
Переменные окружения 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.
Jury093
Цитата(Atridies @ Aug 3 2015, 19:52) *
Файлы на 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"
т.е. первая партиция должна иметь аттрибут "*"
Atridies
Цитата
или даже еще проще эксперимент - берете SD размечаете в fat16/fat32 и в корень (не в каталог) копируете все те же MLO и u-boot.img

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

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

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


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


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



Спасибо огромное за ответы! Сегодня вечером попробую - отпишусь.
Jury093
Цитата(Atridies @ Aug 4 2015, 11:23) *
Собственно, они и так в корне 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..
Atridies
Получилось !!!
Сделал SD активной - и всё запустилось. Спасибо огромное !

И тогда последний вопрос: если меня устроит новое ядро - как заменить им старое? Просто заменить файл ?
Jury093
Цитата(Atridies @ Aug 4 2015, 21:43) *
Получилось !!!
Сделал SD активной - и всё запустилось. Спасибо огромное !

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

поздравляю!
да просто заменить.. это для SD карточки, а для нанда надо следить чтобы новое ядро, допустим большего размера, не затерло что-нить жизненно важное для системы..
рекомендую старое не стирать, а переименовать, тогда если зависнет "новое" ядро, то можно не дергая карточку в картридер, загрузить из юбута "старое "ядро", а затем прямо на системе заменить дефектное ядро..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.