mirror of https://github.com/OpenIPC/wiki.git
				
				
				
			
							parent
							
								
									7b1c74a357
								
							
						
					
					
						commit
						2f0a104fcf
					
				|  | @ -0,0 +1,48 @@ | |||
| Помощь: U-boot | ||||
| ------------ | ||||
| 
 | ||||
| ### Переменные окружения | ||||
| 
 | ||||
| Если при попытке сохранения переменной вы получаете ошибку `Too many args`, | ||||
| попробуйте повторить операцию из среды линукс, заменив `setenv` на `fw_setenv`. | ||||
| 
 | ||||
| __U-boot console:__ | ||||
| ``` | ||||
| hisilicon # setenv uk 'mw.b 0x82000000 ff 1000000; tftp 0x82000000 uImage.${soc}; sf probe 0; sf erase 0x50000 0x200000; sf write 0x82000000 0x50000 ${filesize}' | ||||
| ** Too many args (max. 16) ** | ||||
| ``` | ||||
| 
 | ||||
| __OpenIPC Linux:__ | ||||
| ``` | ||||
| root@openipc-hi3518ev100:~# fw_setenv uk 'mw.b 0x82000000 ff 1000000; tftp 0x82000000 uImage.${soc}; sf probe 0; sf erase 0x50000 0x200000; sf write 0x82000000 0x50000 ${filesize}' | ||||
| root@openipc-hi3518ev100:~# | ||||
| ``` | ||||
| 
 | ||||
| ### Сохранение заводской прошивки без tftp. | ||||
| 
 | ||||
| В программе-терминале, используемой для подключения к порту UART, установите | ||||
| сохранение лога сессии. После чего в консоли загрузчика запустите команду чтения | ||||
| данных из памяти длиной в объем флэш-памяти начиная с нулевого адреса. | ||||
| 
 | ||||
| Используйте шестнадцатеричное представление для адресов памяти. Так 0 в | ||||
| шестнадцатеричной записи выглядит как 0x0, 8 мегабайтов (8 * 1024 * 1024 = | ||||
| 8,388,608 байтов) выглядят как 0x800000, 16 мегабайтов (16 * 1024 * 1024 = | ||||
| или 16,777,216 байтов) - как 0x1000000. | ||||
| 
 | ||||
| Чтение 8МБ флэш-памяти: | ||||
| 
 | ||||
| ``` | ||||
| md.b 0x0 0x800000 | ||||
| ``` | ||||
| 
 | ||||
| Чтение 16МБ флэш-памяти: | ||||
| 
 | ||||
| ``` | ||||
| md.b 0x0 0x1000000 | ||||
| ``` | ||||
| 
 | ||||
| Будьте готовы к тому, что процесс передачи данных через серийное подключение | ||||
| займет несколько часов. Зато в результате у вас будет полная копия оригинальной | ||||
| прошивки, которую можно конвертировать в бинарный файл с помощью программы | ||||
| [binwalk](https://github.com/ReFirmLabs/binwalk) и использовать для дальнейшего | ||||
| изучения или для восстановления камеры в её оригинальный вид. | ||||
|  | @ -25,7 +25,7 @@ TFTP расшифровывается как Trivial File Transfer Protocol. К | |||
| и компактен, что TFTP клиенты используются в сетевых и встроенных системах для | ||||
| получения загрузочных образов с сетевых серверов. | ||||
| 
 | ||||
| #### Если на вашем компьютере Linux | ||||
| #### Если на вашем компьютере Linux. | ||||
| 
 | ||||
| Если на вашем компьютере установлен Linux, то здесь всё просто. Скомпилированный | ||||
| и готовый к использованию пакет сервера TFTP уже лежит в репозитории, и вам | ||||
|  | @ -44,7 +44,7 @@ sudo systemctl restart tftpd-hpa.service | |||
| sudo tar -C /srv/tftp/ -xvf openipc.*.tgz | ||||
| ``` | ||||
| 
 | ||||
| ### Шаг 4. Подключение к порту UART. | ||||
| ### Шаг 4. Подключитесь к порту UART камеры. | ||||
| 
 | ||||
| Для подключения к камере через порт UART вам понадобится [адаптер][ftdi] для | ||||
| создания подключения с серийного порта вашего компьютера. | ||||
|  | @ -76,7 +76,7 @@ __Прежде чем подключать адаптер к камере, уб | |||
| подключать питание камеры через `VCC` порт UART, а использовать для этого | ||||
| штатный разъем питания. | ||||
| 
 | ||||
| ### Шаг 5. Загрузчик. | ||||
| ### Шаг 5. Получите доступ к консоли загрузчика. | ||||
| 
 | ||||
| Перегрузите камеру и постарайтесь получить доступ к консоли загрузчика нажав | ||||
| требуемую комбинацию клавиш между моментом начала загрузки и до старта ядра | ||||
|  | @ -91,27 +91,34 @@ __Прежде чем подключать адаптер к камере, уб | |||
| еще большей надежности создайте текстовый файл на вашем компьютере и заносите в | ||||
| него все выполняемые команды и ответы системы. | ||||
| 
 | ||||
| После того как вы получили доступ в консоль загрузчика, наберите `help` и | ||||
| проверьте список доступных вам команд. Убедитесь, что в списке команд | ||||
| присутствует `tftp`. | ||||
| ### Шаг 6. Сохраните заводскую прошивку. | ||||
| 
 | ||||
| После того как вы получили доступ в консоль загрузчика, наберите `help`, чтобы | ||||
| вывести список доступных вам команд. Убедитесь, что в списке команд присутствует | ||||
| `tftp`. Если такая команда есть, то сохранение оригинальной прошивки не должно | ||||
| доставить проблем. Надо только настроить подключение камеры к вашему серверу | ||||
| TFTP. | ||||
| 
 | ||||
| NB! Если в вашем загрузчике нет tftp, вы всё ещё можете получить копию | ||||
| оригинальной прошивки. [Подробности здесь](help-uboot.md). | ||||
| 
 | ||||
| Проверьте настройки системного окружения командой `printenv`. Вас интересуют | ||||
| настройки сетевого подключения: `ipaddr`, `netmask` и  `serverip`. Первые два | ||||
| параметра задают IP адрес и сетевую маску вашей камеры для подключения в | ||||
| локальную сеть. Третий параметр -- IP адрес сервера TFTP, с которого и на | ||||
| который будут передаваться файлы командой tftp. Установите нужные значения | ||||
| командой `setenv` (используйте IP адреса и сетевую маску соответствующие вашей | ||||
| сети). Сохраните установленные значения командой `saveenv`. | ||||
| настройки сетевого подключения: `ipaddr`, `netmask`, `gatewayip` и `serverip`. | ||||
| Первые три параметра задают IP адрес и сетевую маску вашей камеры, IP адрес | ||||
| сетевого шлюза для подключения в локальную сеть. Четвёртый параметр -- IP адрес | ||||
| сервера TFTP, с которого и на который будут передаваться файлы командой `tftp`. | ||||
| Установите нужные значения командой `setenv` (используйте IP адреса и сетевую | ||||
| маску соответствующие вашей сети). Сохраните установленные значения командой | ||||
| `saveenv`. | ||||
| 
 | ||||
| ``` | ||||
| setenv ipaddr 192.168.1.253 | ||||
| setenv netmask 255.255.255.0 | ||||
| setenv gatewayip 192.168.1.1 | ||||
| setenv serverip 192.168.1.254 | ||||
| saveenv | ||||
| ``` | ||||
| 
 | ||||
| ### Шаг 6. Сохранение заводской прошивки. | ||||
| 
 | ||||
| Большинство IP камер сегодня комплектуются чипами Nor или Nand флэш-памяти | ||||
| объемом 8 или 16 мегабайтов. Вы можете увидеть тип и размер установленной на | ||||
| вашей камере микросхемы в выводе лога загрузчика. Там будет что-то вроде этого: | ||||
|  | @ -146,6 +153,375 @@ sf read 0x82000000 0x0 0x1000000 | |||
| tftp 0x82000000 firmware-full.bin 0x1000000 | ||||
| ``` | ||||
| 
 | ||||
| ### Шаг 7. Установите прошивку OpenIPC. | ||||
| 
 | ||||
| Разные модели камер имеют разные наборы компонентов. Самые значимые из них -- | ||||
| процессор и сенсор, -- напрямую влияют на качество изображения и набор функций, | ||||
| присущих той или иной камере. Но и казалось бы менее значимые детали могут | ||||
| устанавливать ограничения на возможности камеры и её прошивки. Например, у | ||||
| разных камер могут отличаться установленные микросхемы флэш-памяти. Одни камеры | ||||
| могут иметь флэш-память объемом 16 МБ, в то время как другие - 16 МБ, то и | ||||
| больше. В больший объем флэш-памяти можно поместить большее количество | ||||
| программного кода, позволить камере запускать дополнительные сервисы, которые | ||||
| недоступны на камерах с меньшим объёмом флэш-памяти. Поэтому мы решили | ||||
| собирать два варианта нашей прошивки: базовую версию (_Lite_) для камер с | ||||
| объемом флэш-памяти 8 МБ и расширенную версию (_Ultimate_) с дополнительными | ||||
| возможностями для камер с увеличенным объемом флэш-памяти. | ||||
| 
 | ||||
| Процедура установка прошивки на разные модели камер отличается используемыми | ||||
| адресами памяти и разными параметрами, устанавливаемыми в переменные окружения, | ||||
| поэтому прежде чем продолжить, определите, какой именно тип процессора, какая | ||||
| модель сенсора, какой объем памяти установлены на вашей камере. | ||||
| 
 | ||||
| Дальше мы описываем процедуру установки прошивки 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 0x42000000 0x50000 0x200000; bootm 0x42000000' | ||||
| ``` | ||||
| 
 | ||||
| Установите переменные окружения для доступа камеры в сеть, где `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 | ||||
| ``` | ||||
| 
 | ||||
| Дальше идет собственно сама процедура установки прошивки. | ||||
| 
 | ||||
| Сначала очистите регион памяти с адреса 0x42000000 длиной 1000000 бит, записав | ||||
| в него шестнадцатеричное значение ff. | ||||
| 
 | ||||
| ``` | ||||
| mw.b 0x42000000 ff 1000000 | ||||
| ``` | ||||
| 
 | ||||
| Затем получите с сервера TFTP файл с ядром для камеры и поместите его в память | ||||
| начиная с адреса 0x42000000. | ||||
| 
 | ||||
| ``` | ||||
| tftp 0x42000000 uImage.${soc} | ||||
| ``` | ||||
| 
 | ||||
| Значение `$soc` в имени запрашиваемого файла подставляется из переменных | ||||
| окружения, созданных выше по тексту. В нашем примере с сервера должен скачаться | ||||
| файл с именем `uImage.hi3518ev100`. | ||||
| 
 | ||||
| Внимательно читайте сообщения на экране терминала! Если какая-то из команд | ||||
| завершилась ошибкой, выясните, что именно пошло не так. Может вы допустили | ||||
| опечатку? В любом случае не продолжайте процедуру, пока все предыдущие команды | ||||
| не отработают безошибочно. В противном случае вы можете остаться с неработающей | ||||
| камерой! | ||||
| 
 | ||||
| Итак, вы убедились, что файл скачан и размещен в оперативной памяти камеры. | ||||
| Теперь вам необходимо записать его во флэш-память. Для этого надо открыть доступ | ||||
| к флэш-памяти: | ||||
| 
 | ||||
| ``` | ||||
| sf probe 0 | ||||
| ``` | ||||
| 
 | ||||
| ...затем стереть содержимое раздела с адреса 0x50000 длиной 0x200000 байтов: | ||||
| 
 | ||||
| ``` | ||||
| sf erase 0x50000 0x200000 | ||||
| ``` | ||||
| 
 | ||||
| ...и записать в раздел флэш-памяти, начинающийся с адреса 0x50000, содержимое | ||||
| оперативной памяти с адреса 0x42000000 длиною в размер файла ядра: | ||||
| 
 | ||||
| ``` | ||||
| sf write 0x42000000 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=$(osmem) 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 0x80007fc 0x250000 ${filesize} | ||||
| 
 | ||||
| reset | ||||
| ``` | ||||
| 
 | ||||
| ### Шаг 8. Первая загрузка. | ||||
| 
 | ||||
| Если все предыдущие шаги выполнены правильно, ваша камера должна стартовать уже | ||||
| с новой прошивкой. Добро пожаловать в OpenIPC! | ||||
| 
 | ||||
| После первой загрузки с новой прошивкой вам нужно очистить перекрывающий раздел, | ||||
| запустив для этого программу | ||||
| 
 | ||||
| ``` | ||||
| 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._ | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue