roboforum.ru

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

mini2440 сборка и установка ядра

mini2440 сборка и установка ядра

Сообщение setar » 08 июл 2010, 18:33

Mini2440 Установка ядра linux

Эта статья рассчитана на то что вы имеете плату mini2440 c уже установленным загрузчиком u-boot
Если вы до сих пор его не установили то рекомендую ознакомиться со статьями
mini2440 Установка загрузчика u-boot в NAND
mini2440 смена загрузчика в NOR флеше

Приступаем

производим загрузку в режиме NAND (этот режим мы используем практически всегда когда не указано обратного, режим NOR загрузки требуется обычно для исправления ошибочных секторов в NAND флешке)

сначала мы потренируемся запускать готовое ядро которое можно найти на диске комплекта mini2440 по пути images/linux/zImage_T35

Особенность заключается в том что u-boot хранит запускаемые образы в специальных контейнерах которые содержат запись о том что за содержимое в нем находится и контрольную сумму для защиты от сбойных блоков в NAND.
Именно поэтому мы берём утилиту mkimage из каталога tools дистрибутива u-boot
(если у вас его ещё нету то получим : $ cd ~/mini2440;mkdir u-boot;cd u-boot; git clone git://repo.or.cz/u-boot-openmoko/mini2440.git )

исходим из того что ядро в формате zImage (zImage_T35) лежит у нас к каталоге ./images
делаем из него контейнер u-boot:
calculate mini2440 # ./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d ./images/zImage_T35 ./images/uImage_T35
Image Name:
Created: Wed Jul 7 01:45:30 2010
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2517028 Bytes = 2458.04 kB = 2.40 MB
Load Address: 30008000
Entry Point: 30008000


теперь файл ./images/uImage_T35 готов к отправке на mini2440

отправляем его:

calculate mini2440 # dfu-util -a 0 -D ./images/uImage_T35 -R
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface...
Determining device status: state = appIDLE, status = 0
Device really in Runtime Mode, send DFU detach request...
Resetting USB...
Opening USB Device...
Found Runtime: [0x1457:0x511b] devnum=119, cfg=0, intf=0, alt=0, name="RAM 0x32000000"
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x1000
bytes_per_hash=50341
Starting download: [##################################################] finished!
state(2) = dfuIDLE, status(0) = No error condition is present
Done!
Resetting USB to switch back to runtime mode


теперь ядро у нас находится в RAM mini2440 по адресу 0x32000000
его нужно поместить в свой раздел:

MINI2440 # nand erase kernel
NAND erase: device 0 offset 0x60000, size 0x500000
Erasing at 0x540000 -- 100% complete.
OK


MINI2440 # nand write.e 0x32000000 kernel 0x300000
обращаю внимение здесь .e - признак обхода bad блоков

NAND write: device 0 offset 0x60000, size 0x300000
3145728 bytes written: OK


Всё ядро расположено на своем месте
осталось сделать его автоматически запускаемым:

MINI2440 # run set_bootargs_nand
MINI2440 # setenv bootcmd 'nboot.e kernel ; bootm'
MINI2440 # saveenv

можно перезапускать устройство и наблюдать в консоли примерно следующее:

Loading from NAND 128MiB 3,3V 8-bit, offset 0x60000
Image Name:
Created: 2010-07-06 21:45:30 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2517028 Bytes = 2.4 MB
Load Address: 30008000
Entry Point: 30008000
## Booting kernel from Legacy Image at 32000000 ...
Image Name:
Created: 2010-07-06 21:45:30 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2517028 Bytes = 2.4 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux................................................................................................................................................................... done, booting the kernel.



Теперь опишу как самостоятельно собрать ядро

исходим из соображения что у нас уже собран пакет для кросс компиляции armv4tl-softfloat-linux-gnueabi
сборка которого будет описана в разделе подготовки рабочего места на линуксе для разработчика

Вожможно это лишнее, но уточню что все нижеследующие операции производятся на x86 системе

cd ~/mini2440
mkdir kernel ; cd kernel
git clone git://repo.or.cz/linux-2.6/mini2440.git sources
cd sources
mkdir -p ../kernel-bin
mkdir -p ../modules

[создадим базовую конфигурацию ядра
CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=../modules/ mini2440_defconfig

Базовая конфигурация не оптимальна, рекомендую взять соответствующий вашей конфигурации файл с диска комплекта , каталог linux
внутри архива linux-2.6.32.2-mini2440-20100113.tgz лежат оптимизированные конфиги например config_mini2440_n35
я их вытащил сюда:
kernel_configs_mini2440.zip
(53.66 КиБ) Скачиваний: 0


для чего мы вообще затеяли сборку ? возможно хотели что то изменить в стандартном конфиге, делаем это и выходим с сохранением
CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=../modules/ menuconfig

далее собираем ядро и и модули копируем в отдельное расположение ( каталог modules уровнем выше ):
CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=../modules/
CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=../modules/ modules_install

готово само ядро мы отлавливаем каталогом выше : kernel-bin/arch/arm/boot/zImage
ну и модули там же в каталоге modules (их нужно скопировать в корень рутовой файловой системы mini2440)

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

Re: mini2440 сборка и установка ядра

Сообщение Andrey37 » 08 июл 2010, 19:06

А если попробовать с ноля собрать ядро. Например взять 2.6.34 или 2.6.35 и полность настроить его под миньку. mach-mini2440.c там есть. Наверное будет интереснее если все устройства, конфигурацию gpio прописать и т.д. Потом будет понятнее все самим делать ;). Заодно описать меню ,хотя там вроде все понятно, но для начинающих полезно.

Добавлено спустя 1 минуту 29 секунд:
Не надо будет китайский мануал переводить. :) Там как раз все об этом, но с картинками. :)
Andrey37
 
Сообщения: 89
Зарегистрирован: 13 апр 2009, 09:29
Откуда: Иваново
Skype: b_andrey_37

Re: mini2440 сборка и установка ядра

Сообщение Resident » 08 июл 2010, 19:08

Andrey37 писал(а):А если попробовать с ноля собрать ядро.
Попробуй ;)
Базовая статья уже есть. :)
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 сборка и установка ядра

Сообщение Andrey37 » 08 июл 2010, 19:13

Я сейчас глядя на вас в qt уткнулся. :))) Сижу жду когда скомпилится.
Andrey37
 
Сообщения: 89
Зарегистрирован: 13 апр 2009, 09:29
Откуда: Иваново
Skype: b_andrey_37

Re: mini2440 сборка и установка ядра

Сообщение Resident » 08 июл 2010, 20:13

Andrey37 писал(а):Я сейчас глядя на вас в qt уткнулся. :))) Сижу жду когда скомпилится.
не спешил бы ты поперед батьки... хотя мож у тя сразу все на ура скомпилится :)
Есть компилишь all-included то часа 4 будет))
мне один мануальчик понравился на эту тему:
Вот и всё, можно компилировать Qt! Команда незамысловата:
make
… и вот тут можно пить пиво/курить/спать/заниматься сексом нужное ПОДЧЕРКНУТЬ
Особенно мне нравится когда после 2-3 часов ожидания вываливается пару ерроров и все начинаешь сначала :crazy:
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 сборка и установка ядра

Сообщение setar » 08 июл 2010, 20:41

:) а действительно, не спешили бы вы, появился бы шанс не ждать часами а использовать такую замечательную штуку как распределённая компиляция.
например я могу поставить кросс компилятор на двух узлах кластера на котором форум лежит, они всё равно бамбук курят.
это как никак 16 потоков сразу
правда мелкие пакеты так собирать не удобно - даже дольше получится, а вот для Qt и аналогичных - самое то
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 сборка и установка ядра

Сообщение Resident » 08 июл 2010, 20:43

setar писал(а):например я могу поставить кросс компилятор на двух узлах кластера на котором форум лежит, они всё равно бамбук курят
Так что же ты раньше молчал!!!
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 сборка и установка ядра

Сообщение setar » 08 июл 2010, 20:49

Andrey37 писал(а):А если попробовать с ноля собрать ядро. Например взять 2.6.34 или 2.6.35 и полность настроить его под миньку. mach-mini2440.c там есть. Наверное будет интереснее если все устройства, конфигурацию gpio прописать и т.д. Потом будет понятнее все самим делать ;)

А в чем тайный смысл? есть коллеги зарубежные, которые ведут репозитарий этих самых патчей к ядру, чтобы нам с вами проще было.
Понятное дело это понадобилось бы если чего то в ядре не хватает, но даже в этом случае правильнее написать патч и отправить его этим ребятам (repo.or.cz) чтобы он всем доступен был.
Заодно описать меню ,хотя там вроде все понятно, но для начинающих полезно.

а в ядре описать всё практически не реально, во первых там древовидная структура с перекрёстными зависимостями в открывающихся пунктах
во вторых нужно досканально знать все существовавшие, существующие и ожидаемые методы работы ОС, файловые системы, устройства, шины и т.д.
я, уж насколько постоянно занимаюсь компиляцией ядер, всё равно не могу правильно и полностью собрать требуемое ядро, всё равно приходится пару- тройку раз добавлять нужные опции.

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

Re: mini2440 сборка и установка ядра

Сообщение br0x » 09 июл 2010, 00:09

Кроме того, "свежее" ядро вовсе не означает "лучшее".
Скажем, 35-е на форуме friendlyarm людям так и не удалось подружить с железкой
Here I am, brain the size of a planet, and they ask me to take you to the bridge!
Аватара пользователя
br0x
 
Сообщения: 59
Зарегистрирован: 18 май 2010, 00:32
Откуда: Харьков
прог. языки: C, Haskell

Re: mini2440 сборка и установка ядра

Сообщение Resident » 09 июл 2010, 00:14

br0x писал(а):Скажем, 35-е на форуме friendlyarm людям так и не удалось подружить с железкой
А нам пока и не надо))
Нам бы нормальную ФС на 32м собрать, да со всей переферией (порты там всякие, вай-вай, камеры разные), да с Qt :friends:
А то на одном ядре далеко не уедешь ;)
ЗЫ (про то, что переферию нужно включать в ядре, можете не говорить, знаю)
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 сборка и установка ядра

Сообщение setar » 15 июл 2010, 16:57

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

Re: mini2440 сборка и установка ядра

Сообщение Bull » 18 авг 2010, 21:22

setar писал(а):внутри архива linux-2.6.32.2-mini2440-20100113.tgz лежат оптимизированные конфиги например config_mini2440_n35
я их вытащил сюда:
kernel_configs_mini2440.zip


А что означают добавки в конце имени файла - a70, t35 итд?
Bull
 
Сообщения: 3
Зарегистрирован: 08 июл 2010, 23:08

Re: mini2440 сборка и установка ядра

Сообщение setar » 19 авг 2010, 10:27

это тип видеосистемы
A70 = 7"
T35 = 3.5" нового типа (забыл название, не NEC)
N35 = 3.5" старого типа NEC (у наших вроде ни у кого нету)

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

Re: mini2440 сборка и установка ядра

Сообщение Palachzzz » 19 авг 2010, 11:57

T35 = 3.5" нового типа (забыл название, не NEC)

Toppoly, что то мне кажется что он просто дешевле, поэтому сейчас и суется во все миньки, а зная что NEC обычно делает все достаточно хорошего качества, но при достаточно высокой цене, смею предположить, что NEC покруче будет)
Palachzzz
 
Сообщения: 73
Зарегистрирован: 13 июн 2010, 13:34
Skype: Z_Z_Z-77
прог. языки: С++, Delphi
ФИО: Павел Новиков

Re: mini2440 сборка и установка ядра

Сообщение rotax » 27 авг 2010, 15:44

Есть ли смысл качать ядро из репозитария?
setar писал(а):git clone git://repo.or.cz/linux-2.6/mini2440.git sources

какая там версия лежит? какой объем трафика?
Может целесообразнее собрать из исходников на диске?
Аватара пользователя
rotax
 
Сообщения: 43
Зарегистрирован: 10 июн 2010, 23:31
Откуда: Краснодар
Skype: rotaxb
прог. языки: C
ФИО: Александр

След.

Вернуться в mini2440

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

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