Replace commands with a link to constructor.

pull/46/head
Paul Philippov 2022-08-18 01:29:45 -04:00 committed by GitHub
parent a0d1a27647
commit 9eb47c5f3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 360 deletions

View File

@ -134,24 +134,15 @@ SPI Nor total size: 16MB
```
Чтобы сохранить содержимое флэш-памяти в файл, необходимо сначала загрузить это
содержимое в оперативную память.
содержимое в оперативную память. Очистите содержимое региона оперативной памяти
достаточно большое чтобы вместить содержимое флэш-памяти, затем считайте содержимое
флэш-памяти в подготовленный участок оперативной памяти, и выгрузите считанные
данные из оперативной памяти в виде файла на сервер TFTP.
```
sf probe 0
mw.b 0x82000000 ff 0x1000000
sf read 0x82000000 0x0 0x1000000
```
Первая из приведенных выше команд инициализирует флэш-память, вторая очищает
содержимое региона оперативной памяти с адреса 0x82000000 длиной 0x1000000
байтов, подготавливая его для загрузки содержимого флэш-памяти, а затем третья
считывает содержимое флэш-памяти начиная с адреса 0x0 и помещает его в
подготовленный участок оперативной памяти. Остается только выгрузить данные из
оперативной памяти в виде файла на сервер TFTP.
```
tftp 0x82000000 firmware-full.bin 0x1000000
```
Разные процессоры, разные размеры микросхем памяти, разные адреса загрузки не позволяют
привести здесь универсальный набор комманд. Для получения списка комманд, подходящих для
вашей конкретной конфиругации, воспользуйтесь [автомитическим генератором инструкций](https://openipc.org/supported-hardware/)
на нашем сайте.
### Шаг 7. Установите прошивку OpenIPC.
@ -173,279 +164,9 @@ tftp 0x82000000 firmware-full.bin 0x1000000
поэтому прежде чем продолжить, определите, какой именно тип процессора, какая
модель сенсора, какой объем памяти установлены на вашей камере.
Дальше мы описываем процедуру установки прошивки OpenIPC Lite на примере камеры
c 8 МБ флэш-памяти. Даже если ваша камера имеет больший объем флэш-памяти, не
перелистывайте это текст. Прочитайте его внимательно, чтобы понять принцип и
последовательность действий. Конкретные команды, подходящие для вашей камеры,
мы дадим во второй части этого раздела.
##### Часть первая. Пример.
Для примера мы взяли камеру на процессоре hi3518ev100 с матрицей ov9712 и
64 мегабайтами памяти. Подключитесь к камере через порт UART и получите
доступ к консоли загрузчика. Установите параметры компонентов в соответствующие
переменные окружения:
```
setenv soc hi3518ev100
setenv sensor ov9712
setenv totalmem 64M
```
Установите переменные окружения для загрузки ядра и корневой файловой системы
новой прошивки:
```
setenv osmem 32M
setenv bootargs 'mem=${osmem:-32M} console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'setenv setargs setenv bootargs ${bootargs}; run setargs; sf probe 0; sf read 0x82000000 0x50000 0x200000; bootm 0x82000000'
```
Установите переменные окружения для доступа камеры в сеть, где `ethaddr` --
оригинальный MAC адрес вашей камеры, `ipaddr` -- IP адрес камеры в локальной
сети, `netmask` -- сетевая маска локальной сети, `gatewayip` -- IP адрес
маршрутизатора для доступа в сеть, `serverip` -- IP адрес сервера TFTP в
локальной сети.
```
setenv ethaddr 00:12:16:00:00:00
setenv ipaddr 192.168.1.10
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.254
```
Сохраните сделанные изменения во флэш-память.
```
saveenv
```
Дальше идет собственно сама процедура установки прошивки.
Сначала очистите регион памяти с адреса 0x82000000 длиной 0x1000000 байтов,
записав в него шестнадцатеричное значение 0xff.
```
mw.b 0x82000000 ff 1000000
```
Затем получите с сервера TFTP файл с ядром для камеры и поместите его в память
начиная с адреса 0x82000000.
```
tftp 0x82000000 uImage.${soc}
```
Значение `$soc` в имени запрашиваемого файла подставляется из переменных
окружения, созданных выше по тексту. В нашем примере с сервера должен скачаться
файл с именем `uImage.hi3518ev100`.
Внимательно читайте сообщения на экране терминала! Если какая-то из команд
завершилась ошибкой, выясните, что именно пошло не так. Может вы допустили
опечатку? В любом случае не продолжайте процедуру, пока все предыдущие команды
не отработают безошибочно. В противном случае вы можете остаться с неработающей
камерой!
Итак, вы убедились, что файл скачан и размещен в оперативной памяти камеры.
Теперь вам необходимо записать его во флэш-память. Для этого надо открыть доступ
к флэш-памяти:
```
sf probe 0
```
...затем стереть содержимое раздела с адреса 0x50000 длиной 0x200000 байтов:
```
sf erase 0x50000 0x200000
```
...и записать в раздел флэш-памяти, начинающийся с адреса 0x50000, содержимое
оперативной памяти с адреса 0x82000000 длиною в размер файла ядра:
```
sf write 0x82000000 0x50000 ${filesize}
```
Далее, надо проделать такую же манипуляцию с образом корневой файловой системы,
записав его в следующий раздел флэш-памяти, начинающийся с адреса 0x250000 и
имеющий длину 0x500000 байтов (5242880 байтов в десятеричной системе, что
соответствует 5120 килобайтов, именно столько мы отвели под раздел rootfs в
параметрах bootargs). Порядок действий прост, и его довольно легко запомнить,
если понимать, какие именно действия вы производите и зачем: очистить память,
скачать файл, открыть доступ к флэш-памяти, стереть содержимое раздела,
записать скачанный файл.
```
mw.b 0x82000000 ff 1000000
tftp 0x82000000 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x82000000 0x250000 ${filesize}
```
После того как оба раздела успешно записаны во флэш-память и сделана необходимые
изменения в загрузчике для старта новой прошивки, наступило время перезагрузить
камеру. Для этого наберите в консоли следующую команду:
```
reset
```
##### Часть вторая.
Если вы прочитали первую часть этого раздела (если нет -- идите и прочитайте),
то вы уже знаете, какие манипуляции и почему вам необходимо сделать, чтобы
установить прошивку OpenIPC. И всё, что вам нужно -- это команды, подходящие
для вашей конкретной камеры.
Вот примеры команд для камер на процессорах [Goke](#goke),
[HiSilicon](#hisilicon), [SigmaStar/MStar](#sigmastarmstar), [XM](#xm).
###### Goke
Процессоры gk7202v300, gk7205v200, gk7205v300.
```
setenv soc <processor> # gk7202v300, gk7205v200, or gk7205v300.
setenv sensor <sensor> #
setenv totalmem <memory> # 64M for gk7202v300, gk7205v200, 128M for gk7205v300.
setenv osmem 32M
setenv bootargs 'mem=${osmem:-32M} console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'setenv setargs setenv bootargs ${bootargs}; run setargs; sf probe 0; sf read 0x42000000 0x50000 0x200000; bootm 0x42000000'
setenv ethaddr 00:00:00:00:00:00
setenv ipaddr 192.168.1.10
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.254
saveenv
mw.b 0x42000000 ff 1000000
tftp 0x42000000 uImage.${soc}
sf probe 0
sf erase 0x50000 0x200000
sf write 0x42000000 0x50000 ${filesize}
mw.b 0x42000000 ff 1000000
tftp 0x42000000 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x42000000 0x250000 ${filesize}
reset
```
###### HiSilicon
Процессоры hi3516ev200, hi3516ev300, hi3518ev300.
```
setenv soc <processor> # hi3516ev200, hi3516ev300, or hi3518ev300.
setenv sensor <sensor> #
setenv totalmem <memory> # 64M for hi3516ev200, hi3518ev300, 128M for hi3516ev300.
setenv osmem 32M
setenv bootargs 'mem=${osmem:-32M} console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'setenv setargs setenv bootargs ${bootargs}; run setargs; sf probe 0; sf read 0x42000000 0x50000 0x200000; bootm 0x42000000'
setenv ethaddr 00:00:00:00:00:00
setenv ipaddr 192.168.1.10
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.254
saveenv
mw.b 0x42000000 ff 1000000
tftp 0x42000000 uImage.${soc}
sf probe 0
sf erase 0x50000 0x200000
sf write 0x42000000 0x50000 ${filesize}
mw.b 0x42000000 ff 1000000
tftp 0x42000000 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x42000000 0x250000 ${filesize}
reset
```
##### SigmaStar/MStar
Процессоры ssc325, ssc335, ssc337.
```
setenv soc <processor> # ssc325, ssc335, or ssc337.
setenv sensor <sensor> # gc2053, imx307, or sc3335.
setenv totalmem 64M
setenv osmem 32M
setenv bootargs 'mem=${osmem:-32M} console=ttyS0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init LX_MEM=0x3fe0000 mma_heap=mma_heap_name0,miu=0,sz=0x1C00000 mma_memblock_remove=1 mtdparts=NOR_FLASH:256k(boot),64k(tech),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'setenv setargs setenv bootargs ${bootargs}; run setargs; sf probe 0; sf read 0x21000000 0x50000 0x200000; bootm 0x21000000'
setenv ethaddr 00:00:00:00:00:00
setenv ipaddr 192.168.1.10
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.254
saveenv
mw.b 0x21000000 ff 1000000
tftpboot 0x21000000 uImage.${soc}
sf probe 0
sf erase 0x50000 0x200000
sf write 0x21000000 0x50000 ${filesize}
mw.b 0x21000000 ff 1000000
tftpboot 0x21000000 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x21000000 0x250000 ${filesize}
reset
```
##### XM
Процессоры xm510, xm530, xm550.
```
setenv soc <processor> # xm510 for xm510, xm530 for both xm530 and xm550.
setenv sensor <sensor> #
setenv totalmem <memory> # 32M for xm510, 64M for xm530, 128M for xm550.
setenv osmem <osmemory> # 18M for xm510, 35M for xm530, 64M for xm550.
setenv bootargs 'mem=35M console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=xm_sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
setenv bootcmd 'sf probe 0; sf read 0x80007fc0 0x50000 0x200000; bootm 0x80007fc0'
setenv ethaddr 00:00:00:00:00:00
setenv ipaddr 192.168.1.10
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.254
saveenv
mw.b 0x80007fc0 ff 1000000
tftp 0x80007fc0 uImage.${soc}
sf probe 0
sf erase 0x50000 0x200000
sf write 0x80007fc0 0x50000 ${filesize}
mw.b 0x80007fc0 ff 1000000
tftp 0x80007fc0 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x80007fc0 0x250000 ${filesize}
reset
```
Для получения списка комманд, подходящих для вашей конкретной конфиругации,
воспользуйтесь [автомитическим генератором инструкций](https://openipc.org/supported-hardware/)
на нашем сайте.
### Шаг 8. Первая загрузка.
@ -459,76 +180,6 @@ reset
firstboot
```
### Шаг в сторону.
Для облегчения последующих процедур обновления прошивки из консоли загрузчика,
создайте два макро, записав в них последовательности команд, необходимых для
загрузки с сервера TFTP и записи во флэш-память ядра и корневой файловой системы
для вашей модели камеры.
Мы будем использовать `uk` и `ur` для имен макро, что можно расшифровать как
`update kernel` и `update rootfs`. Легко запомнить.
Вы помните, что в примере с установкой прошивки на камеру с hi3518ev100 мы
использовали следующие команды для установки ядра:
```
mw.b 0x42000000 ff 1000000
tftp 0x42000000 uImage.${soc}
sf probe 0
sf erase 0x50000 0x200000
sf write 0x42000000 0x50000 ${filesize}
```
Чтобы создать макро `uk`, соберите все команды в одну строку, чередуя их
точками-с-запятой. Для дополнительной защиты от записи неверных данных во
флэш-память в том случае, когда не удалось скачать файл с сервера TFTP,
замените точку-с-запятой перед командой `sf probe 0` на оператор логической И
(`&&`). В таком случае выполнение макро прервется, если скачивании файла
завершилось с ошибкой.
```
fw_setenv uk 'mw.b 0x42000000 ff 1000000; tftp 0x42000000 uImage.${soc} && sf probe 0; sf erase 0x50000 0x200000; sf write 0x42000000 0x50000 ${filesize}'
```
Проделайте то же с командами установки корневой файловой системы
```
mw.b 0x82000000 ff 1000000
tftp 0x82000000 rootfs.squashfs.${soc}
sf probe 0
sf erase 0x250000 0x500000
sf write 0x82000000 0x250000 ${filesize}
```
..., записав результат в макро `ur`:
```
fw_setenv ur 'mw.b 0x42000000 ff 1000000; tftp 0x42000000 rootfs.squashfs.${soc} && sf probe 0; sf erase 0x250000 0x500000; sf write 0x42000000 0x250000 ${filesize}'
```
Естественно, для создания своих собственных макро, вы должны использовать
команды для вашей конкретной камеры, не бездумно копируя вышеприведенные строки,
но используя их как пример и понимая суть совершаемых действий.
Обратите внимание, что хоть эти команды и создают макро для запуска в консоли
загрузчика, выполнить их надо в среде линукса. Таким образом мы избегаем
ограничений на количество аргументов в команде `setenv` в некоторых старых
версиях загрузчиков.
Теперь вы сможете запускать прошивку ядра и корневой файловой системы из
консоли загрузчика с последующей перезагрузкой камеры командой
```
run uk; run ur; reset
```
_...to be continued._
** ПРОВЕРИТЬ ВСЕ КОМАНДЫ НА ЖИВОЙ СИСТЕМЕ!***
[logo]: ../images/logo_openipc.png
[ftdi]: https://www.google.com/search?q=ftdi+usb+ttl
[tllc]: https://google.com/search?q=logic+level+converter+3.3v+5v