roboforum.ru

Технический форум по робототехнике.

mini2440 подготовка и размещение rootfs

Re: mini2440 подготовка и размещение rootfs

Сообщение =DeaD= » 26 окт 2010, 00:26

Ага, видел уже, завтра попробую начать осваивать :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: mini2440 подготовка и размещение rootfs

Сообщение nagos » 30 окт 2010, 10:17

По поводу загрузки rootfs по частям.
Если на флешке нет bad блоков, то будет работать как описано в первом сообщении.
Однако если bad блоки есть, то nand write.e пишет больше данных, чем его просишь (из за пропуска bad блоков). И тогда на следующем шаге получается неправильное смещение, его нужно пересчитать.
Пример:

Запись первой части.
Сначала стираем
Код: Выделить всёРазвернуть
MINI2440 # nand erase rootfs

NAND erase: device 0 offset 0x560000, size 0x3aa0000
Skipping bad block at  0x01260000                                           
Skipping bad block at  0x01fc8000                                           
Skipping bad block at  0x03ff0000                                           
Skipping bad block at  0x03ff4000                                           
Skipping bad block at  0x03ff8000                                           
Skipping bad block at  0x03ffc000                                           

OK

Потом записываем в самое начало раздела rootfs (у меня так называется). ${filesize} - размер файла, полученного по tftp.
Код: Выделить всёРазвернуть
MINI2440 # nand write.e 0x32000000 rootfs ${filesize}

NAND write: device 0 offset 0x560000, size 0x1800000

Bad block at 0x1260000 in erase block from 0x1260000 will be skipped
Writing data at 0x1d63e00 -- 100% complete.
25165824 bytes written: OK

Тут интересное место 0x1d63e00 - адрес последнего занятого блока, значит следующий свободный - 0x1d64000.
Пишем вторую часть (предварительно получив по tftp)
Код: Выделить всёРазвернуть
MINI2440 # nand write.e 0x32000000 1D64000 ${filesize}

NAND write: device 0 offset 0x1d64000, size 0x10d0000

Bad block at 0x1fc8000 in erase block from 0x1fc8000 will be skipped
Writing data at 0x2e37e00 -- 100% complete.
17629184 bytes written: OK
nagos
 
Сообщения: 3
Зарегистрирован: 30 окт 2010, 10:06

Re: mini2440 подготовка и размещение rootfs

Сообщение setar » 01 ноя 2010, 11:27

Абсолютно верное замечание!
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 подготовка и размещение rootfs

Сообщение nagos » 03 ноя 2010, 17:59

А саму файловую систему я создаю не руками, а через дистрибутив openembedded.
Нужно иметь только gcc компилятор для x86 и openembedded. Он сам все скачает, откомпилирует кросс-компилятор, соберет систему (там тысячи разных программ), соберет .jffs2 файл, ядро и загрузчик.
nagos
 
Сообщения: 3
Зарегистрирован: 30 окт 2010, 10:06

Re: mini2440 подготовка и размещение rootfs

Сообщение setar » 03 ноя 2010, 18:18

:) вот только не понятно дистрибутив чего оно соберет
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 подготовка и размещение rootfs

Сообщение nagos » 05 ноя 2010, 23:07

Дистрибутив Angstrom (http://www.angstrom-distribution.org/).
nagos
 
Сообщения: 3
Зарегистрирован: 30 окт 2010, 10:06

Re: mini2440 подготовка и размещение rootfs

Сообщение Weekend » 17 фев 2011, 15:46

Поделюсь своим методом установки rootfs, понадобится только NFS и все!!!

По порядку:
1.Загружаемся в u-boot (читать тут

2.Смотрим разделы:
MINI2440 # mtdparts
device nand0 <mini2440-nand>, # parts = 4
#: name size offset mask_flags
0: u-boot 0x00040000 0x00000000 0
1: u-boot_env 0x00020000 0x00040000 0
2: kernel 0x00500000 0x00060000 0
3: rootfs 0x3faa0000 0x00560000 0
Нас интересует rootfs, раздел N 3. Запомните адрес 0x3faa0000 и номер раздела!!!

3.Настраиваем NFS server (в кратце):
3.1.Правим /etc/exports, добавляем в него следующее:
/opt/arm/rootfs 192.168.1.100(rw,no_root_squash,sync,no_subtree_check,nohide,crossmnt,insecure_locks)
Где /opt/arm/rootfs - каталог, в который мы положим файлы рут системы нашей mini2440
192.168.1.100 - IP платы
3.2.Перечитываем настройки NFS: exportfs -ra

4.Настраиваем IP и опции загрузки u-boot:
MINI2440 # setenv ipaddr 192.168.1.100
MINI2440 # setenv serverip 192.168.1.12
MINI2440 # setenv bootargs console=ttySAC0,115200 noinitrd init=/sbin/init mini2440=0tbc nfsroot=192.168.1.12:/opt/arm/rootfs root=/dev/nfs ip=192.168.1.100
По последней строке малость разъяснений:
nfsroot=192.168.1.12:/opt/arm/rootfs - Здесь 192.168.1.12 - IP nfs сервера, а /opt/arm/rootfs - каталог с рут системой, который мы ранее задавали в настройках NFS сервера. ip=192.168.1.100 - IP, который получит плата.
MINI2440 # saveenv ---- Сохраняем настройки
(В этом месте можно не сохранять настройки, а сделать вот так:
MINI2440 # setenv root_nfs /opt/arm/rootfs
MINI2440 # boot
)

5.Копируем рут файл систему в каталог /opt/arm/rootfs, делается это проще всего в mc. Я использовал root_qtopia-20100108.tar.gz идущий на DVD. В конечном итоге содержимое каталога /opt/arm/rootfs должно выглядеть примерно так:
> ls /opt/arm/rootfs
bin dev etc home lib linuxrc mnt opt proc root sbin sys tmp usr var www

6.Перегружаем плату, если все сделали удачно, то борда загрузится, а в сериально консоле будет примерно следующее:
Please press Enter to activate this console.
[root@FriendlyARM /]#

7.Смотрим в консоли на имеющиеся разделы:
[root@FriendlyARM /]# cat /proc/partitions
major minor #blocks name
31 0 256 mtdblock0
31 1 128 mtdblock1
31 2 5120 mtdblock2
31 3 1043072 mtdblock3
31 4 1048576 mtdblock4

Вспоминаем сохраненный адрес (это надо, что бы не ошибиться используемым разделом), в моем случае: 0x3faa0000 == 1.068.105.728 / 1024 == 1043072 - размер в блоках соответствует разделу номер 3 (такой же номер мы видели в u-boot), значит нужный нам раздел для рута будет: mtdblock3

8.Создаем точку монтирования для раздела и монтируем в нее наш раздел:
[root@FriendlyARM /]# mkdir /tmp/ROOT_FS
[root@FriendlyARM /]# mount /dev/mtdblock3 /tmp/ROOT_FS
yaffs: dev is 32505859 name is "mtdblock3"
Тут /dev/mtdblock3 == /dev/ + полученное нами выше имя устройства.

Проверяем, все ли подмонтировалось:
[root@FriendlyARM /]# mount
В выводе должна присутствовать строка примерно такого вида:
/dev/mtdblock3 on /tmp/ROOT_FS type yaffs (rw,relatime)

Теперь копируем рут систему на наш новый рут (список каталогов NFS рута смотрим при помощи ls /), копировать надо все каталоги, кроме: /proc, /sys, /tmp
[root@FriendlyARM /]# cp -a /bin /lib /sbin /usr /dev /linuxrc /opt /var /etc /www /home /mnt /root /tmp/ROOT_FS/
Далее создадим не достающие каталоги:
[root@FriendlyARM /]# mkdir /tmp/ROOT_FS/proc /tmp/ROOT_FS/sys /tmp/ROOT_FS/tmp

Отключаем новый рут:
[root@FriendlyARM /]# umount /tmp/ROOT_FS/

Проверяем, отключился ли:
[root@FriendlyARM /]# mount
В выводе не должно быть строки с /tmp/ROOT_FS/

Перегружаем железку:
[root@FriendlyARM /]# reboot

9.Заходим в u-boot и правим загрузочную строку:
MINI2440 # setenv bootargs console=ttySAC0,115200 noinitrd init=/sbin/init mini2440=0tbc root=/dev/mtdblock3
MINI2440 # saveen
Тут /dev/mtdblock3 - это то устройство, которое у нас и является рут системой. mini2440=0tbc - сию строку правим под параметры имеющейся у Вас железяки:
0 = 0 - 7" A70 (3.5" T35)
t = точскрин
b = подсветка дисплея (backlight)
c = CMOS камера (опционально)

Перегружаем железку и радуемся жизни!
Последний раз редактировалось Weekend 22 фев 2011, 20:11, всего редактировалось 2 раз(а).
Аватара пользователя
Weekend
 
Сообщения: 15
Зарегистрирован: 16 фев 2011, 13:30
Откуда: Minsk
прог. языки: C/C++, Perl, Tcl/Sh, Python, Ruby, Pascal, Asm...

Re: mini2440 подготовка и размещение rootfs

Сообщение setar » 17 фев 2011, 23:38

Спасибо, действительно хороший вариант.
В двух словах Вы описываете загрузку в линукс с корнем по NFS и заполнение rootfs в NAND штатными средствами из под линукса.
Весьма разумно и изящно :Bravo:
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 подготовка и размещение rootfs

Сообщение alien » 22 фев 2011, 01:37

копируем и разворачиваем архив linux/arm-qtopia-20100108.tar.gz с диска контроллера (или подготавливаем свою сборку):
# tar -xvzf ./arm-qtopia-20100108.tar.gz -C /tftproot/root_qtopia

Тут у вас наверно ошибка. Надо наверно root_qtopia-20100108.tar.gz ??
alien
 
Сообщения: 31
Зарегистрирован: 01 фев 2011, 20:47

Re: mini2440 подготовка и размещение rootfs

Сообщение Weekend » 22 фев 2011, 03:50

Да архивы бывают разные, у кого какой рут попался:)
Аватара пользователя
Weekend
 
Сообщения: 15
Зарегистрирован: 16 фев 2011, 13:30
Откуда: Minsk
прог. языки: C/C++, Perl, Tcl/Sh, Python, Ruby, Pascal, Asm...

Re: mini2440 подготовка и размещение rootfs

Сообщение alien » 22 фев 2011, 18:12

В чем может быть проблема?
eth0: link down
IP-Config: Complete:
device=eth0, addr=192.168.1.11, mask=255.255.255.0, gw=192.168.1.1,
host=192.168.1.11, domain=, nis-domain=(none),
bootserver=192.168.1.74, rootserver=192.168.1.74, rootpath=
Looking up port of RPC 100003/2 on 192.168.1.74
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
Looking up port of RPC 100005/1 on 192.168.1.74
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)

setenv bootargs console=ttySAC0,115200 noinitrd init=/sbin/init mini2440=0tb nfsroot=192.168.1.74:/tftproot/root_qtopia.jffs2 root=/dev/nfs rw rootfstype=jffs2 ip=192.168.1.11:192.168.1.74:192.168.1.1:255.255.255.0

192.168.1.74 - ip на котором поднят gentoo c NFS
192.168.1.11 - типа ip мини
192.168.1.1 - IP роутера
alien
 
Сообщения: 31
Зарегистрирован: 01 фев 2011, 20:47

Re: mini2440 подготовка и размещение rootfs

Сообщение Weekend » 22 фев 2011, 20:10

nfsroot=192.168.1.74:/tftproot/root_qtopia.jffs2 - вот в этом, я не совсем понимаю, как ядро замонтирует loop файл... Для правильной работы, просто создайте каталог, в который выложите содержимое root директории и тогда строка загрузки будет примерно такой:
setenv bootargs console=ttySAC0,115200 noinitrd init=/sbin/init mini2440=0tbc nfsroot=192.168.1.74:/tftproot root=/dev/nfs ip=192.168.1.11
Аватара пользователя
Weekend
 
Сообщения: 15
Зарегистрирован: 16 фев 2011, 13:30
Откуда: Minsk
прог. языки: C/C++, Perl, Tcl/Sh, Python, Ruby, Pascal, Asm...

Re: mini2440 подготовка и размещение rootfs

Сообщение alien » 22 фев 2011, 20:16

ясно спс. просто делал все по тому как описанно в первом посте )
alien
 
Сообщения: 31
Зарегистрирован: 01 фев 2011, 20:47

Re: mini2440 подготовка и размещение rootfs

Сообщение Weekend » 22 фев 2011, 21:25

alien писал(а):ясно спс. просто делал все по тому как описанно в первом посте )

Сделайте по описанному мной посту, на 6й странице, проще и быстрее.
Аватара пользователя
Weekend
 
Сообщения: 15
Зарегистрирован: 16 фев 2011, 13:30
Откуда: Minsk
прог. языки: C/C++, Perl, Tcl/Sh, Python, Ruby, Pascal, Asm...

Re: mini2440 подготовка и размещение rootfs

Сообщение setar » 22 фев 2011, 22:46

Проблема проста: в ядре нет вкомпиленного jffs2 (это видно из логов, точнее не видно загрузки JSSF2 обработчика)
то как опиано в первом посте работает
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Пред.След.

Вернуться в mini2440

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1