Dron_Gus 2 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Партишны для нанд-флеша задаются в специфичном для вашей платы файле. В виде такой вот структуры static struct mtd_partition __initdata ek_nand_partition[] = { { .name = "Linux Kernel", .offset = 0, .size = SZ_16M, }, { .name = "Root FS", .offset = MTDPART_OFS_NXTBLK, .size = 120 * SZ_1M, }, { .name = "FS", .offset = MTDPART_OFS_NXTBLK, .size = 120 * SZ_1M, } }; Это я привел код из презентации http://free-electrons.com/doc/flash-filesystems.odp Загрузиться с другого носителя и создать файловую систему можно. Еще можно сделать минимальный образ рам-диска. Но проще загрузиться с усб-флешки (например) и сделать все операции оттуда. Потом просто поменять root= в строке ядра и все. Теоретиески с ubifs умеет работать u-boot. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Я на своих железках делаю именно так, как сказал Dron_Gus, управляя загрузкой параметрами среды U-boot: - гружусь с usb-флэшки, естесственно указывая set bootargs root=/dev/sda1 rootwait ro и предварительно загрузив ядров ОЗУ - у меня ubifs разбит на mtd1 и mtd2, один для ядра, второй для rootfs - после загрузки с usb-флэшки делаю flashcp -v /uImage /dev/mtd1 , чтобы зашить ядро в mtd1 - для продключения раздела встроенной флэш выполняю ubiattach /dev/ubi_ctrl -m 2 - создаю том ubimkvol /dev/ubi0 -m -N rootfs - монтирую mount -t ubifs ubi:rootfs /mnt/root - потом копирую в смонтированное место все, что требуется - перегружаюсь и меняю параметры окружения u-boot set bootargs ubi.mtd=2 root=ubi:rootfs rootfstype=ubifs Что у Вас не получилось с ubiattach? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба one_man_show, раз уж защел разговор в это русло. Небольшой оффтоп вопрос к Вам. Я особо с у-бутом не разбирался, но может можно сделать, чтобы у-бут автоматом грузился с флешки (или ммс-карты), если она присутствует. В противном случае - nand. Очень удобно было бы для апдейста системы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Насколько я понимаю, u-boot производит некоторую настройку оборудования. bootstrap (в 9260) очень маленький и инициализирует только память, не инициализируя SPI и другое. Поэтому не понятно, кто и как должен инициализировать эту периферию и передавать управление и загружать с флэш или mmc-карты u-boot. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Не тосно выразился. Имел ввиду, что у-бут то один. Просто он, при наличии усб-флешки грузит ядро с нее и передает соответственно одну строку ядру. А при отсутствии - грузит ядро из нанда и передает соответственно другую строку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 27 февраля, 2010 Опубликовано 27 февраля, 2010 · Жалоба Спасибо всем большое за советы и ответы)) Похоже наметились позитивные сдвиги. ДЕлаю так: 1) Разрешаю в ядре опцию Command line partition table parcing, чтобы можно было делить nandflash на разделы с помощью параметров, передаваемых ядру. 2) Записываю в nandflash по адресу 0x400000 образ файловой системы jffs2. Загружаюсь, передав ядру следующие параметры: set bootargs 'console=ttyS0,115200 mtdparts=atmel_nand:4096k(MyRootfs),40960k(Ubifs) root=/dev/mtdblock1 rw rootfstype=jffs2' где MyRootfs - это раздел, куда записан мой образ файловой системы, Ubifs - раздел, который я отвожу под будущую систему ubifs. 3) Загружаюсь в свою файловую систему. Чтобы убедиться в правильности создания разделов: cat /proc/mtd dev: size erasesize name mtd0: 00400000 00020000 "MyRootfs" mtd1: 02800000 00020000 "Ubifs" mtd2: 00840000 00000420 "spi0.0-AT45DB642x" Таким образом, продолжать работать будем с /dev/mtd1. 4)Указываем путь до ubi-utils, скомпилированных под ARM и скопированных на флешку: export PATH=/media/sda1/home/root/ubi-utils 5)Далее следующая последовательность действий: Форматируем нужный раздел под ubifs ubiformat /dev/mtd1 ubiattach /dev/ubi_ctrl -m 1 Создаем том на отформатированном разделе ubimkvol /dev/ubi0 --name=rootfs -m Эти данные (ubi0 и rootfs мы потом будем использовать для указания ядру, откуда монтировать файловую систему) Монтируем наш раздел на /mnt/ubifs mount -t ubifs ubi0:rootfs /mnt/ubifs/ Заходим в папку /mnt/ubifs и распаковываем туда за'tar'енный архив файловой системы, предварительно созданный на ПК и скопированный на флешку cd /mnt/ubifs tar xvf /media/sda1/home/root/myfs.rootfs.tar 6) Перезагружаемся и передаем ядру новые параметры: set bootargs 'console=ttyS0,115200 mtdparts=atmel_nand:4096k(MyRootfs),40960k(Ubifs) ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs rw' Пока исследования остановились на этом...KErnel Panic уже нет, что очень радует))) В понедельник продолжу) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 4 марта, 2010 Опубликовано 4 марта, 2010 · Жалоба ZAA, где продолжение? У Вас получилось классное развернутое описание шагов. Dron_Gus, сам был бы раз запустить u-boot в озу, чтобы он оттуда смог загрузить ядро. Сейчас столкнулся с тем, что на плате флэш с доп.защитой, для которой нет описания, но известно, что линуксовая утилита flashcp умеет с такими работать. А начальный загрузчик не изменишь, так как неизвестны параметры флэш. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба ZAA, где продолжение? У Вас получилось классное развернутое описание шагов. Прошу прощения, сегодня вечером отпишусь обязательно. Возникли другие неотложные дела))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZAA 0 19 марта, 2010 Опубликовано 19 марта, 2010 · Жалоба 1.Записываем в Dataflash файл образа первичного загрузчика Bootstrap, скомпилированного для загрузки из dataflash по адресу 0x00000000. 2.Записываем в Dataflash файл образа вторичного загрузчика U-Boot по адресу 0x00008400. 3.Записываем в Dataflash файл образа ядра linux по адресу 0x00042000. 4.Во вкладке sam-ba выбираем nandflash и выполняем скрипты Enable Nandflash->EraseAll. 5.На съемном носителе (flash-карта памяти) создаем файловую систему из собранного с помощью Openembedded образа: cd /media/disk tar -xvf Angstrom-x11-gpe-image-glibc-ipk-2009.X-stable-at91sam9263ek.rootfs.tar 6.Включаем питание платы. Устанавливаем значение переменной окружения U-Boot: set bootargs 'console=ttyS0,115200 root=/dev/sda1 rw rootdelay=10 mtdparts=atmel_nand:2048k(Unused), 2048k(Kernel),-(rootfs)' где root=/dev/sda1 — указание ядру, откуда монтировать файловую систему; mtdparts=atmel_nand:2048k(Unused),2048k(Kernel),-(rootfs) — это указание ядру создать на устройстве atmel_nand три раздела со следующими названиями — Unused (неиспользуемое пространство на nandflash от адреса 0х00000000 до адреса 0х00200000), Kernel (пространство на nandflash, отведенное для ядра, начинающееся с адреса 0x00200000, заканчивающееся адресом 0х00400000), rootfs (все оставшееся пространство, начинающееся адресом 0х00400000). 7.Загружаемся, передав U-Boot команду boot. 8.Зайдя в систему под логином root, начинаем создание файловой системы UBIFS. 9.Чтобы убедиться в правильности создания ядром разделов на nandflash, в консоли набираем cat /proc/mtd: dev: size erasesize name mtd0: 00200000 00020000 "Unused" mtd1: 00200000 00020000 "Kernel" mtd2: 0fc00000 00020000 "rootfs" mtd3: 00840000 00000420 "spi0.0-AT45DB642x" 10.В папку на флешке предварительно были скопированы инструменты для работы с UBIFS, скомпилированные под ARM-платформу. Указываем путь до них. export PATH=/home/root/ubi-utils/:$PATH 11.Форматируем раздел, отведенный для файловой системы (rootfs): ubiformat /dev/mtd2 12.Присоединяем: ubiattach /dev/ubi_ctrl -m 2 13.Создаем логический том: ubimkvol /dev/ubi0 --name=rootfs -m 14.Создаем папку для монтирования будущей UBIFS-файловой системы: mkdir /mnt/ubifs 15.Монтируем еще пока пустую файловую систему: mount -t ubifs ubi0:rootfs /mnt/ubifs/ 16.Переходим в папку /mnt/ubifs: cd /mnt/ubifs 17.Разархивируем в эту папку tar-архив файловой системы, предвартельно скопированный на флешку: tar xvf /home/root/x11.rootfs.tar 18.Отмонтируем файловую систему: umount /mnt/ubifs 19.Выключаем питание платы. 20.Включаем плату и через sam-ba записываем в Dataflash образ первичного загрузчика Bootstrap, скомпилированного для загрузки из nandflash, по адресу 0x00000000. 21.В nandflash записываем образ ядра по адресу 0х00200000. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться