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 запаковать как было описано выше :)

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

Andrey37 » 08 июл 2010, 19:06

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

Добавлено спустя 1 минуту 29 секунд:
Не надо будет китайский мануал переводить. :) Там как раз все об этом, но с картинками. :)

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

Resident » 08 июл 2010, 19:08

Andrey37 писал(а):А если попробовать с ноля собрать ядро.
Попробуй ;)
Базовая статья уже есть. :)

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

Andrey37 » 08 июл 2010, 19:13

Я сейчас глядя на вас в qt уткнулся. :))) Сижу жду когда скомпилится.

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

Resident » 08 июл 2010, 20:13

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

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

setar » 08 июл 2010, 20:41

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

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

Resident » 08 июл 2010, 20:43

setar писал(а):например я могу поставить кросс компилятор на двух узлах кластера на котором форум лежит, они всё равно бамбук курят
Так что же ты раньше молчал!!!

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

setar » 08 июл 2010, 20:49

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

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

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

так что рекомендую ценить коллективный опыт, и пользоваться результатами общественно полезного труда (я про открытые репозитарии)

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

br0x » 09 июл 2010, 00:09

Кроме того, "свежее" ядро вовсе не означает "лучшее".
Скажем, 35-е на форуме friendlyarm людям так и не удалось подружить с железкой

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

Resident » 09 июл 2010, 00:14

br0x писал(а):Скажем, 35-е на форуме friendlyarm людям так и не удалось подружить с железкой
А нам пока и не надо))
Нам бы нормальную ФС на 32м собрать, да со всей переферией (порты там всякие, вай-вай, камеры разные), да с Qt :friends:
А то на одном ядре далеко не уедешь ;)
ЗЫ (про то, что переферию нужно включать в ядре, можете не говорить, знаю)

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

setar » 15 июл 2010, 16:57

изменил часть про конфигурацию своего ядра для компиляции

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 итд?

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

setar » 19 авг 2010, 10:27

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

неправильный выбор параметра даст нецентрированную картинку на дисплее, или её кусок если промахнулись с дюймами

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

Palachzzz » 19 авг 2010, 11:57

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

Toppoly, что то мне кажется что он просто дешевле, поэтому сейчас и суется во все миньки, а зная что NEC обычно делает все достаточно хорошего качества, но при достаточно высокой цене, смею предположить, что NEC покруче будет)

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

rotax » 27 авг 2010, 15:44

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

какая там версия лежит? какой объем трафика?
Может целесообразнее собрать из исходников на диске?


Rambler\'s Top100 Mail.ru counter