реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вопрос про nandflash и UBIFS
Dron_Gus
сообщение Feb 27 2010, 07:54
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Партишны для нанд-флеша задаются в специфичном для вашей платы файле. В виде такой вот структуры
Код
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.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Feb 27 2010, 10:06
Сообщение #17


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



Я на своих железках делаю именно так, как сказал 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?


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 27 2010, 10:53
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



one_man_show, раз уж защел разговор в это русло. Небольшой оффтоп вопрос к Вам. Я особо с у-бутом не разбирался, но может можно сделать, чтобы у-бут автоматом грузился с флешки (или ммс-карты), если она присутствует. В противном случае - nand. Очень удобно было бы для апдейста системы.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Feb 27 2010, 13:53
Сообщение #19


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Насколько я понимаю, u-boot производит некоторую настройку оборудования. bootstrap (в 9260) очень маленький и инициализирует только память, не инициализируя SPI и другое. Поэтому не понятно, кто и как должен инициализировать эту периферию и передавать управление и загружать с флэш или mmc-карты u-boot.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 27 2010, 15:18
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Не тосно выразился. Имел ввиду, что у-бут то один. Просто он, при наличии усб-флешки грузит ядро с нее и передает соответственно одну строку ядру. А при отсутствии - грузит ядро из нанда и передает соответственно другую строку.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
ZAA
сообщение Feb 27 2010, 19:29
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



Спасибо всем большое за советы и ответы)) Похоже наметились позитивные сдвиги.
ДЕлаю так:
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 уже нет, что очень радует))) В понедельник продолжу)
Go to the top of the page
 
+Quote Post
one_man_show
сообщение Mar 4 2010, 15:10
Сообщение #22


Помогу, чем смогу
******

Группа: Админы
Сообщений: 2 786
Регистрация: 28-05-04
Из: Москва
Пользователь №: 25



ZAA, где продолжение? У Вас получилось классное развернутое описание шагов.

Dron_Gus, сам был бы раз запустить u-boot в озу, чтобы он оттуда смог загрузить ядро. Сейчас столкнулся с тем, что на плате флэш с доп.защитой, для которой нет описания, но известно, что линуксовая утилита flashcp умеет с такими работать. А начальный загрузчик не изменишь, так как неизвестны параметры флэш.


--------------------
С уважением,
Ваган Саруханов
Проекты|Форум|Facebook|Linkedin
Go to the top of the page
 
+Quote Post
ZAA
сообщение Mar 19 2010, 11:34
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



Цитата(one_man_show @ Mar 4 2010, 18:10) *
ZAA, где продолжение? У Вас получилось классное развернутое описание шагов.


Прошу прощения, сегодня вечером отпишусь обязательно. Возникли другие неотложные дела)))
Go to the top of the page
 
+Quote Post
ZAA
сообщение Mar 19 2010, 18:56
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 141
Регистрация: 10-02-08
Из: Екб
Пользователь №: 34 906



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.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 01:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016