mirror of https://github.com/OpenIPC/wiki.git
Replace commands with a link to constructor.
parent
a0d1a27647
commit
9eb47c5f3d
|
@ -134,24 +134,15 @@ SPI Nor total size: 16MB
|
||||||
```
|
```
|
||||||
|
|
||||||
Чтобы сохранить содержимое флэш-памяти в файл, необходимо сначала загрузить это
|
Чтобы сохранить содержимое флэш-памяти в файл, необходимо сначала загрузить это
|
||||||
содержимое в оперативную память.
|
содержимое в оперативную память. Очистите содержимое региона оперативной памяти
|
||||||
|
достаточно большое чтобы вместить содержимое флэш-памяти, затем считайте содержимое
|
||||||
|
флэш-памяти в подготовленный участок оперативной памяти, и выгрузите считанные
|
||||||
|
данные из оперативной памяти в виде файла на сервер TFTP.
|
||||||
|
|
||||||
```
|
Разные процессоры, разные размеры микросхем памяти, разные адреса загрузки не позволяют
|
||||||
sf probe 0
|
привести здесь универсальный набор комманд. Для получения списка комманд, подходящих для
|
||||||
mw.b 0x82000000 ff 0x1000000
|
вашей конкретной конфиругации, воспользуйтесь [автомитическим генератором инструкций](https://openipc.org/supported-hardware/)
|
||||||
sf read 0x82000000 0x0 0x1000000
|
на нашем сайте.
|
||||||
```
|
|
||||||
|
|
||||||
Первая из приведенных выше команд инициализирует флэш-память, вторая очищает
|
|
||||||
содержимое региона оперативной памяти с адреса 0x82000000 длиной 0x1000000
|
|
||||||
байтов, подготавливая его для загрузки содержимого флэш-памяти, а затем третья
|
|
||||||
считывает содержимое флэш-памяти начиная с адреса 0x0 и помещает его в
|
|
||||||
подготовленный участок оперативной памяти. Остается только выгрузить данные из
|
|
||||||
оперативной памяти в виде файла на сервер TFTP.
|
|
||||||
|
|
||||||
```
|
|
||||||
tftp 0x82000000 firmware-full.bin 0x1000000
|
|
||||||
```
|
|
||||||
|
|
||||||
### Шаг 7. Установите прошивку OpenIPC.
|
### Шаг 7. Установите прошивку OpenIPC.
|
||||||
|
|
||||||
|
@ -173,279 +164,9 @@ tftp 0x82000000 firmware-full.bin 0x1000000
|
||||||
поэтому прежде чем продолжить, определите, какой именно тип процессора, какая
|
поэтому прежде чем продолжить, определите, какой именно тип процессора, какая
|
||||||
модель сенсора, какой объем памяти установлены на вашей камере.
|
модель сенсора, какой объем памяти установлены на вашей камере.
|
||||||
|
|
||||||
Дальше мы описываем процедуру установки прошивки OpenIPC Lite на примере камеры
|
Для получения списка комманд, подходящих для вашей конкретной конфиругации,
|
||||||
c 8 МБ флэш-памяти. Даже если ваша камера имеет больший объем флэш-памяти, не
|
воспользуйтесь [автомитическим генератором инструкций](https://openipc.org/supported-hardware/)
|
||||||
перелистывайте это текст. Прочитайте его внимательно, чтобы понять принцип и
|
на нашем сайте.
|
||||||
последовательность действий. Конкретные команды, подходящие для вашей камеры,
|
|
||||||
мы дадим во второй части этого раздела.
|
|
||||||
|
|
||||||
##### Часть первая. Пример.
|
|
||||||
|
|
||||||
Для примера мы взяли камеру на процессоре 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
|
|
||||||
```
|
|
||||||
|
|
||||||
### Шаг 8. Первая загрузка.
|
### Шаг 8. Первая загрузка.
|
||||||
|
|
||||||
|
@ -459,76 +180,6 @@ reset
|
||||||
firstboot
|
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
|
[logo]: ../images/logo_openipc.png
|
||||||
[ftdi]: https://www.google.com/search?q=ftdi+usb+ttl
|
[ftdi]: https://www.google.com/search?q=ftdi+usb+ttl
|
||||||
[tllc]: https://google.com/search?q=logic+level+converter+3.3v+5v
|
[tllc]: https://google.com/search?q=logic+level+converter+3.3v+5v
|
||||||
|
|
Loading…
Reference in New Issue