главная->Тион-Про-270->Прошивание 
    

Прошивание Тиона-Про-270

Клонирование прошивок через копирование mtd-разделов

Процесс прошивания сводится к обновлению трёх областей флешь-памяти: области U-Boot-a, области образа ядра Linux и области образа КФС - естественно, не обязательно каждый раз обновлять все три, если что-то не менялось, то это и не трогаем. В поставляемом с завода компьютере есть 3 mtd раздела: /dev/mtdblock0, /dev/mtdblock1 и /dev/mtdblock2.
Отвечают они соответственно за U-Boot, Linux kernel и образ файловой системы.
Очень простой способ сохранения существующего образа U-Boot-a следующий:
Подключаемся по COM-порту к Тиону, весь дальнейший ввод рассмотрен относительно этой консоли. Вид не соответствует в точности тому, что должен быть, т.к. это я пишу по памяти.
root@tion_pro270:# mount -t vfat /dev/mmcblk0p1 /mnt/
root@tion_pro270:# dd if=/dev/mtdblock0 of=/mnt/mtdblock0.bin
8192 records in
8192 records out
root@tion_pro270:# 

первой командой (mount) мы подмонтировали флешь-карту (она должна быть куплена отдельно, в комплект поставки не входит).
второй командой мы скопировали файл, соответствующий образу U-Boot-a на флешь-карту.
Для того, чтоб этот образ прошить на другую плату, нужно сделать следующее:
root@tion_pro270:# mount -t vfat /dev/mmcblk0p1 /mnt/
root@tion_pro270:# dd if=/mnt/mtdblock0.bin of=/dev/mtdblock0
8192 records in
8192 records out
root@tion_pro270:# 

Все то же самое, только имена файлов поменялись местами.

Аналогичным образом можно копировать образ ядра (он находится в /dev/mtdblock1)
Категорически не рекомендуется копировать так образ КФС, если она у вас не RAMFS!(однако же, т.к. по умолчанию с завода идут компьютеры с RAMFS, то такой способ тиражирования JFFS2 тоже подходит).

Загрузка прошивок через U-Boot

Здесь я (покамест) опишу только тот способ, которым загружал прошивки сам. В реальности же, у U-Boot-а очень много возможностей, которые я не использовал и даже не знаю о них.
Для продолжения работы нам потребуется tftp сервер. Проще всего установить его на PC-шном Linux-е.

Установка tftp:

1)Запускаем менеджер пакетов Synaptic.
2)Выбираем Поиск.
3)Ищем в названии пакета подстроку "tftp"
4)Выбираем для установки пакеты tftpd-hpa и tftp-hpa
5)Из под суперпользователя редактируем файл inetd.conf:
timur-tion@timur-ibm:~$ su
Password: 
root@timur-ibm:/home/timur-tion# cd /etc/
root@timur-ibm:/etc# gedit inetd.conf

в строчке
tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
то, что после -s заменяем на свой путь, где у нас zImage и uImage, у меня эта строка после редактирования целиком выглядит так:
tftp        dgram   udp wait    root    /usr/sbin/in.tftpd -s /home/timur-tion/Proj/release/tion_pro_270_images/
теперь нужно (пере)запустить inetd.
timur-tion@timur-ibm:~$ killall -9 inetd
timur-tion@timur-ibm:~$ inetd &

Теперь на стороне компьютер мы готовы к тому, чтоб отдавать прошивки U-Boot-у.

Работа с U-Boot-ом

Возвращаемся к терминалу, через который работаем с Тионом, перезагружаем Тион, нажимаем любую клавишу в начале загрузки, чтоб зайти в командную строку U-Boot-а.
U-Boot 1.3.3 (Jun 28 2009 - 14:59:57)

DRAM:  64 MB
Flash: 32 MB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 

Настройка переменных окружения u-boot:

$ setenv serverip 192.168.1.125
$ setenv gatewayip 192.168.1.1
$ setenv ipaddr 192.168.1.3
$ saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...
. done
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors

Прошивание ядра:

$ ping 192.168.1.125
dm9000 i/o: 0x8000000, id: 0x90000a46 
MAC: 80:81:82:83:84:85
operating at 100M full duplex mode
host 192.168.1.125 is alive
$ tftpboot A0000000 uImage
dm9000 i/o: 0x8000000, id: 0x90000a46 
MAC: 80:81:82:83:84:85
operating at 100M full duplex mode
TFTP from server 192.168.1.125; our IP address is 192.168.1.3
Filename 'uImage'
Load address: 0xa0000000
Loading: |
done
Bytes transferred = 1497376 (16d920 hex)
$ erase 00080000 +$filesize

...... done
Erased 6 sectors
$ cp.b A0000000 00080000 $filesize
Copy to Flash... done

Прошивание КФС

$ tftpboot A0000000 root.telnet.ftp.ntp.jffs2
dm9000 i/o: 0x8000000, id: 0x90000a46 
MAC: 80:81:82:83:84:85
operating at 100M full duplex mode
TFTP from server 192.168.1.125; our IP address is 192.168.1.3
Filename 'root.telnet.ftp.ntp.jffs2'
Load address: 0xa0000000
Loading: \
done
Bytes transferred = 8890948 (87aa44 hex)
$ erase 00480000 01FFFFFF

.............................................................................................................. done
Erased 110 sectors
$ cp.b A0000000 00480000 $filesize
Copy to Flash... done

Смена U-boot-a

$ tftpboot A0000000 u-boot-changed.bin
dm9000 i/o: 0x8000000, id: 0x90000a46 
MAC: 80:81:82:83:84:85
operating at 100M full duplex mode
TFTP from server 192.168.1.125; our IP address is 192.168.1.3
Filename 'u-boot-changed.bin'
Load address: 0xa0000000
Loading: |
done
Bytes transferred = 116520 (1c728 hex)
$ protect off bank 1
Un-Protect Flash Bank # 1
$ erase 00000000 +$filesize

. done
Erased 1 sectors
$ cp.b A0000000 00000000 $filesize
Copy to Flash... done
$ 

Выключил и включил питание. ПОЛУЧИЛОСЬ.

Прошивание через JTAG

В случае затирания U-Boot-a или прошивания неработающей версии придется его перепрошивать с помощью JTAGa.
Для этого вам понадобится машина, с установленной Windows. В моем случае это была ЛИЦЕНЗИОННАЯ Windows XP, проапдейченная до самых последних обновлений.
Вот пошаговое описание процедуры:
1) Купил в "мегаэлектронике" такой вот JTAG-адаптер

Обращаю внимание на то, что нужно покупать именно JTAG-ARM. Есть большое количество других похожих адаптеров, похожих даже по схеме, но не совсем таких, и с ними может не заработать. Подробнее смотрите http://www.olimex.com/dev/arm-jtag.html
2) Спаял переходник согласно схеме: http://www.zao-zeo.ru/media/files/adapters/jtag-adapter_circuit.pdf
3) Скачал OpenOCD отсюда: http://www.freddiechopin.info/index.php/en/download/category/4-openocd?download=8%3Aopenocd-010
4) Установил из zip-архива скачанного OpenOCD .msi файл (установился он сам, без подсказок в C:\Program Files\OpenOCD\0.1.0\ ) 5) Скачал файл http://www.zao-zeo.ru/media/files/openocd/win/parport и сохранил его под именем C:\Program Files\OpenOCD\0.1.0\interface\parport.cfg
6) Скачал файл http://www.zao-zeo.ru/media/files/openocd/win/tion-pro270 и сохранил его под именем C:\Program Files\OpenOCD\0.1.0\target\tion-pro270.cfg
7) Скачал файл http://www.zao-zeo.ru/media/files/openocd/xscale/debug_handler.bin и сохранил его в каталог C:\Program Files\OpenOCD\0.1.0\xscale (для этого каталог xscale пришлось создать вручную).
8) Выключил машину с Windows-ом и стенд с Тионом-Про270 и подключил программатор (возможно это не обязательно, но 2 раза я уже сжигал LPT-порт, теперь на воду дую).
9) Включил Windows-машину и Тион-Про270.
10) На Windows-машине запустил: C:\Program Files\OpenOCD\0.1.0\drivers\giveio\remove_giveio.bat
11) Затем запустил: C:\Program Files\OpenOCD\0.1.0\drivers\giveio\install_giveio.bat
12) Затем запустил: openocd.exe -f "C:\ProgramFiles\OpenOCD\0.1.0\interface\parport.cfg" -f "C:\Program Files\OpenOCD\0.1.0\target\tion-pro270.cfg"
13) При этом (насколько я понимаю) запустился этот отладчик, который представляет из себя (в одной из ипостасей) телнет-сервер, слушающий порт 4444. (зачем так было сделано - не знаю, но наверно должно быть удобно - можно отладчик запускать на одной машине, а командовать им с другой, хотя в нашем случае это и избыточно).
14) из под другой консоли (меню пуск-> выполнить -> cmd) запустил ipconfig, узнал, что мой IP адрес 192.168.1.145
15) затем запустил telnet 192.168.1.145
16) на диск С в корневой каталог положил скомпилированный на Linux-машине образ u-boot-a под именем u-boot.bin
17) в сеансе телнета набрал
flash erase_sector 0 0 127
flash probe 0
flash write_image c:\\u-boot.bin

18) Выключил Тион-Про270. Отсоединил от него JTAG.
u-boot работает!

Используются технологии uCoz