По умолчанию плата Mini2440 содержит загрузчик vivi от компани samsung.
Обычно имеет смысл его заменить - он достаточно древний и не обладает достаточным количеством функций которые присутствуют в современных загрузчиках, таких как u-boot.
Что нам потребуется
1.разумеется сама плата mini2440 (c дисплеем или даже без него)
2.некий внешний линукс (x86).
в качестве готовой системы можно использовать Calculate Linux Roboforum Build (forum10/topic8216.html)
с этого образа производится загрузка виртуальной машины (например VirtualBox)
и делается установка линукса на виртуальную систему
3.нам потребуется последовательный порт на компьютере это может быть встроенный порт либо порт через переходник. При использовании переходника разумеется в хостовой системе (родительской, в которой запущена виртуалка) должны быть установлены соответствующие драйвера.
Для виртуальной системы создается связь с внешним портом
4.образ загрузчика u-boot (можно взять с диска комплекта платы mini2440 /OpenSourceBootloader/u-boot.bin) или загрузить из этого поста
5.прямой кабель RS232 и кабель A-B USB (оба кабеля из комплекта платы)
6.USB аплоадер - из этой статьи (скомпилирован i686) или с родного сайта
Установка соединения с контроллером
Подключаем к mini2440 кабели rs232 и USB
Запускаем имеющийся у нас линукс на виртуальной машине.
Для линукса всегда рекомендуется работать рядовым пользователем, но привилегии суперпользователя (root) нам всё же потребуются, для этого убедимся что рядовой пользователь имеет право использовать повышение привилегий:
из под пользователя root даем следующую команду
# usermod -G wheel user
что позволит пользователю «user» в случае надобности использовать команду sudo
входим в систему рядовым пользователем.
Для подключения к последовательной консоли управления из под линукса будем использовать команду minicom, но прежде нужно определить с каким портом в виртуальной машине нам предстоит работать.
Выполним команду
$ ls /dev/tty*
в выводе нас интересуют устройства типа ttyS0 , ttyS1 (последовательные порты) или ttyUSB0 , tty.usbserial (для конверторов usb-serial)
Запоминаем название устройства, учитывая что регистр важен!
Далее настроим миником для работы с требуемым устройством:
$ minicom -s
в появившемся окошке переходим на пункт «serial port setup», нажимаем клавишу «a» и меняем название порта с которым предстоит работать на требуемый, у меня это /dev/ttyUSB0.
Так же нужно удостовериться что в пункте «е» параметры скорости соответствуют значению «115200 8N1»
Аппаратное управление потоком «F» и Програмное управление потоком «G» отключаем!
выходим из этого меню (Esc) и сохраняем изменения «Save setup as dfl».
Далее делаем «Exit» и попадаем в режим обмена с выбранным портом.
Мы готовы к подключению микроконтроллера.
Переводим переключатель режимов работы в положение NOR (на выключенном устройстве !) и включаем питание.
Если всё прошло правильно, то наслаждаемся отобразившимся текстовым меню загрузчика vivi
Альтернативно консоль управления можно открыть командой screen :
$ screen /dev/ttyUSB0 115200
результат абсолютно аналогичный
клавиши screen:
временный выход без сброса — Ctrl+a;d (серия нажатий сначала две одновременно, затем одна клавиша)
вернуться — из консоли $ screen -r
прервать соединение — выходим а затем из консоли $ killall -9 screen
USB аплоадер
Ещё нам потребуется линуксовая программка usbpush
для этого переключаемся во вторую консоль (alt+f2)
входим рядовым пользователем
и далее производим закачку и сборку утилиты
$ cd ~/mini2440
$ mkdir usbpush
$ cd usbpush
$ wget {здесь подставить адрес архива из приложения}
$ tar -xvzf ./usbpush.tar.gz
$ make
удостоверимся что сборка прошла без ошибок и у нас имеется рабочая утилита:
$ ~/mini2440/usbpush/usbpush
в ответ утилита должна показать пример использования.
Сборка u-boot
На самом деле этот раздел можно пропустить и взять готовый бинарник,
рассказываю из любви к искусству
$ cd ~/mini2440
$ mkdir uboot ; cd uboot
$ git clone
$ export CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi-
$ cd mini2440
вроде не требуется ибо то же самое :
$ mcedit include/configs/mini2440.h
проверить ремарку CONFIG_USE_IRQ
было
#define USE_920T_MMU
//#define CONFIG_USE_IRQ 1 /* Needed for USB device! */
стало
#define USE_920T_MMU
#define CONFIG_USE_IRQ 0 /* Needed for USB device! */
$ make mini2440_config
$ make all
на выходе получаем u-boot.bin и размещаем его копию в каталоге ~/mini2440/images
Так же, из подготовительных мероприятий поместим бинарный образ загрузчика u-boot.bin
в папку mini2440/images домашнего каталога пользователя.
Не буду подробно останавливаться как скопировать файлы с хостового компьютера на виртуальный линукс,
подскажу лишь что использование файловой оболочки mc сильно облегчит задачу. Так же нужно помнить что расшареные для виртуальной машины диски хостовой системы скорее всего будут доступны в папке /media
Если всё хорошо — продолжаем:
возвращаемся в первую консоль (alt+f1)
и если успели закрыть — открываем консоль на контроллер и наблюдаем меню загрузчика vivi
На данный момент есть два варианта загрузки бинарного кода u-boot.bin
первый из них через загрузку в NOR (load) запуск u-boot в ram (go) с последующим копированием в NAND (nand write)
второй через подмену подмену бинарником u-boot ожидаемого к загрузке supervivi
Первый метод установки (load / go / nand write)
Загрузив контроллер в режиме NOR и получив консольное управление к vivi переходим в командный режим нажатием клавиши "q"
далее :
Supervivi> load ram 0x31000000 239016 u
здесь меняем размер бинарного файла на свой (вместо выделенного красным)
USB host is connected. Waiting a download.
Теперь из второй консоли (alt+f2) производим отправку загрузчика uboot
$ cd ~/mini2440/usbpush
$ ./usbpush ~/images/u-boot.bin
csum = 0xd542
send_file: addr = 0x33f80000, len = 0x0003a5a8
возвращаемся в vivi (alt+f1)
и наблюдаем похожее:
Now, Downloading [ADDRESS:31000000h,TOTAL:239026]
RECEIVED FILE SIZE: 239026 (233KB/S, 1S)
Downloaded file at 0x31000000, size = 239016 bytes
далее:
Supervivi> go 0x31000000
и наблюдаем
go to 0x31000000
argument 0 = 0x00000000
argument 1 = 0x00000000
argument 2 = 0x00000000
argument 3 = 0x00000000
U-Boot 1.3.2-dirty-moko12 (Apr 16 2009 - 18:14:52)
I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: Bad block table not found for chip 0
Bad block table not found for chip 0
64 MiB
Found Environment offset in OOB..
USB: S3C2410 USB Deviced
In: serial
Out: serial
Err: serial
MAC: 08:08:11:18:12:27
Hit any key to stop autoboot: 0
здесь нужно нажать любую клавишу чтобы прервать процесс автозапуска
Если надпись "U-Boot 1.3.2 ... " не появляется то переходим ко второму методу установки (ниже)
При удачной загрузке мы попадаем в консоль загрузчика u-boot, о чем свидетельствует приглашение MINI2440 #
далее произведем очистку NAND , создание таблицы сбойных блоков
MINI2440 # nand scrub
MINI2440 # nand createbbt
(обе команды потребуют подтверждения - "y","Enter")
поиск сбойных блоков может быть длительным, мин около двух
создадим таблицу разделов по умолчанию
MINI2440 # mtdparts
перепишем код u-boot из ram в NAND
MINI2440 # nand write.e 0x31000000 u-boot
обращаю внимание .e позволяет делать обход bad блоков
и сохраним переменные окружения загрузчика
MINI2440 # saveenv
Процесс завершен, можно выключить устройство, вернуться в режим нормальной загрузки NAND
и посредством консоли убедиться что запускаемся непосредственно в u-boot
В случае успешной установки проходить второй метод не требуется !
Ну а если при выполнении инструкций по первому методу дальше команды go продвинуться не удалось
то переходим ко второму методу установки:
Описываемый способ работоспособен но в результате экспериментов может привести к тому что микроконтроллер
перестанет принимать новые файлы прошивок - примет состояние кирпича (brick).
Нам это не сильно страшно поскольку у нас в комплекте имеется волшебная платка JTAG - низкоуровневый программатор
(удостоверьтесь в его наличии прежде чем приступать !).
Указанное состояние может произойти потому что при загрузке u-boot через "v" его часть меняет родной для vivi функционал загрузки через USB и мы не сможем передать файл ни через usbpush (аналог win DNW) ни через родную утилиту u-boot`а dfu-tool.
в итоге если мы загрузим u-boot с переписыванием его в NAND а затем он там поломается (ясное дело поломать его можно только ручками самостоятельно ), то второй возможности загрузить его не будет
Нажимаем «v» и попадаем в режим ожидания загрузчика vivi
но мы схитрим и вместо vivi подложим u-boot.bin
Теперь из второй консоли (alt+f2) производим отправку загрузчика uboot
$ cd ~/mini2440/usbpush
$ ./usbpush ~/images/u-boot.bin
вернувшись в первую консоль наблюдаем:
Enter your selection: v
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:30000000h,TOTAL:243178]
RECEIVED FILE SIZE: 243178 (39KB/S, 6S)
Downloaded file at 0x30000000, size = 243168 bytes
Found block size = 0x00040000
Erasing... ... done
Writing... ... done
Written 243168 bytes
выключаем контроллер и переключаемся в режим NAND
включаемся
U-Boot 1.3.2-mini2440 (Jul 5 2010 - 18:12:58)
I2C: ready
DRAM: 64 MB
NOR Flash not found. Use hardware switch and 'flinit'
Flash: 0 kB
NAND: Bad block table not found for chip 0
Bad block table not found for chip 0
128 MiB
*** Warning - bad CRC or NAND, using default environment
USB: S3C2410 USB Deviced
In: serial
Out: serial
Err: serial
MAC: 08:08:11:18:12:27
Hit any key to stop autoboot: 0
MINI2440 #
на ошибки внимание не обращаем
далее в консоли (для подтверждения нажимаем «y» и «Enter»)
MINI2440 # nand scrub
NAND scrub: device 0 whole chip
Warning: scrub option will erase all factory set bad blocks!
There is no reliable way to recover them.
Use this command only for testing purposes if you
are sure of what you are doing!
Really scrub this NAND flash? <y/N>
Erasing at 0x4cc0000 -- 60% complete.
NAND 128MiB 3,3V 8-bit: MTD Erase failure: -5
Erasing at 0x7fe0000 -- 100% complete.
Bad block table not found for chip 0
Bad block table not found for chip 0
OK
MINI2440 # nand createbbt
Create BBT and erase everything ? <y/N>
Skipping bad block at 0x04d20000
Skipping bad block at 0x07f80000
Skipping bad block at 0x07fa0000
Skipping bad block at 0x07fc0000
Skipping bad block at 0x07fe0000
Creating BBT. Please wait …
переключаемся в режим NOR и повторяем заливку u-boot.bin по клавише «v»
Enter your selection: v
USB host is not connected yet.
USB host is connected. Waiting a download.
Now, Downloading [ADDRESS:30000000h,TOTAL:243178]
RECEIVED FILE SIZE: 243178 (39KB/S, 6S)
Downloaded file at 0x30000000, size = 243168 bytes
Found block size = 0x00040000
Erasing... ... done
Writing... ... done
Written 243168 bytes
переключаемся в NAND и после загрузки последовательно выполняем команды:
MINI2440# dynpart
MINI2440# dynenv set u-boot_env
MINI2440# saveenv
MINI2440 # dynpart
mtdparts mtdparts=mini2440-nand:0x00040000(u-boot),0x00020000(u-boot_env),0x00500000(kernel),0x07aa0000(rootfs)
MINI2440 # dynenv set u-boot_env
device 0 offset 0x40000, size 0x20000
45 4e 56 30 - 00 00 04 00
MINI2440 # saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
Поздравляю, теперь загрузка микроконтроллера в режиме NAND начинается с загрузчика u-boot
#U-Boot 1.3.2-mini2440 (Jul 5 2010 - 18:12:58)
I2C: ready
DRAM: 64 MB
NOR Flash not found. Use hardware switch and 'flinit'
Flash: 0 kB
NAND: 128 MiB
Found Environment offset in OOB..
USB: S3C2410 USB Deviced
In: serial
Out: serial
Err: serial
MAC: 08:08:11:18:12:27
Hit any key to stop autoboot: 0
MINI2440
ссылки :