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 клиенты используются в сетевых и встроенных системах для | и компактен, что TFTP клиенты используются в сетевых и встроенных системах для | ||||||
| получения загрузочных образов с сетевых серверов. | получения загрузочных образов с сетевых серверов. | ||||||
| 
 | 
 | ||||||
| #### Если на вашем компьютере Linux | #### Если на вашем компьютере Linux. | ||||||
| 
 | 
 | ||||||
| Если на вашем компьютере установлен Linux, то здесь всё просто. Скомпилированный | Если на вашем компьютере установлен Linux, то здесь всё просто. Скомпилированный | ||||||
| и готовый к использованию пакет сервера TFTP уже лежит в репозитории, и вам | и готовый к использованию пакет сервера TFTP уже лежит в репозитории, и вам | ||||||
|  | @ -44,7 +44,7 @@ sudo systemctl restart tftpd-hpa.service | ||||||
| sudo tar -C /srv/tftp/ -xvf openipc.*.tgz | sudo tar -C /srv/tftp/ -xvf openipc.*.tgz | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### Шаг 4. Подключение к порту UART. | ### Шаг 4. Подключитесь к порту UART камеры. | ||||||
| 
 | 
 | ||||||
| Для подключения к камере через порт UART вам понадобится [адаптер][ftdi] для | Для подключения к камере через порт UART вам понадобится [адаптер][ftdi] для | ||||||
| создания подключения с серийного порта вашего компьютера. | создания подключения с серийного порта вашего компьютера. | ||||||
|  | @ -76,7 +76,7 @@ __Прежде чем подключать адаптер к камере, уб | ||||||
| подключать питание камеры через `VCC` порт UART, а использовать для этого | подключать питание камеры через `VCC` порт UART, а использовать для этого | ||||||
| штатный разъем питания. | штатный разъем питания. | ||||||
| 
 | 
 | ||||||
| ### Шаг 5. Загрузчик. | ### Шаг 5. Получите доступ к консоли загрузчика. | ||||||
| 
 | 
 | ||||||
| Перегрузите камеру и постарайтесь получить доступ к консоли загрузчика нажав | Перегрузите камеру и постарайтесь получить доступ к консоли загрузчика нажав | ||||||
| требуемую комбинацию клавиш между моментом начала загрузки и до старта ядра | требуемую комбинацию клавиш между моментом начала загрузки и до старта ядра | ||||||
|  | @ -91,27 +91,34 @@ __Прежде чем подключать адаптер к камере, уб | ||||||
| еще большей надежности создайте текстовый файл на вашем компьютере и заносите в | еще большей надежности создайте текстовый файл на вашем компьютере и заносите в | ||||||
| него все выполняемые команды и ответы системы. | него все выполняемые команды и ответы системы. | ||||||
| 
 | 
 | ||||||
| После того как вы получили доступ в консоль загрузчика, наберите `help` и | ### Шаг 6. Сохраните заводскую прошивку. | ||||||
| проверьте список доступных вам команд. Убедитесь, что в списке команд | 
 | ||||||
| присутствует `tftp`. | После того как вы получили доступ в консоль загрузчика, наберите `help`, чтобы | ||||||
|  | вывести список доступных вам команд. Убедитесь, что в списке команд присутствует | ||||||
|  | `tftp`. Если такая команда есть, то сохранение оригинальной прошивки не должно | ||||||
|  | доставить проблем. Надо только настроить подключение камеры к вашему серверу | ||||||
|  | TFTP. | ||||||
|  | 
 | ||||||
|  | NB! Если в вашем загрузчике нет tftp, вы всё ещё можете получить копию | ||||||
|  | оригинальной прошивки. [Подробности здесь](help-uboot.md). | ||||||
| 
 | 
 | ||||||
| Проверьте настройки системного окружения командой `printenv`. Вас интересуют | Проверьте настройки системного окружения командой `printenv`. Вас интересуют | ||||||
| настройки сетевого подключения: `ipaddr`, `netmask` и  `serverip`. Первые два | настройки сетевого подключения: `ipaddr`, `netmask`, `gatewayip` и `serverip`. | ||||||
| параметра задают IP адрес и сетевую маску вашей камеры для подключения в | Первые три параметра задают IP адрес и сетевую маску вашей камеры, IP адрес | ||||||
| локальную сеть. Третий параметр -- IP адрес сервера TFTP, с которого и на | сетевого шлюза для подключения в локальную сеть. Четвёртый параметр -- IP адрес | ||||||
| который будут передаваться файлы командой tftp. Установите нужные значения | сервера TFTP, с которого и на который будут передаваться файлы командой `tftp`. | ||||||
| командой `setenv` (используйте IP адреса и сетевую маску соответствующие вашей | Установите нужные значения командой `setenv` (используйте IP адреса и сетевую | ||||||
| сети). Сохраните установленные значения командой `saveenv`. | маску соответствующие вашей сети). Сохраните установленные значения командой | ||||||
|  | `saveenv`. | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| setenv ipaddr 192.168.1.253 | setenv ipaddr 192.168.1.253 | ||||||
| setenv netmask 255.255.255.0 | setenv netmask 255.255.255.0 | ||||||
|  | setenv gatewayip 192.168.1.1 | ||||||
| setenv serverip 192.168.1.254 | setenv serverip 192.168.1.254 | ||||||
| saveenv | saveenv | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### Шаг 6. Сохранение заводской прошивки. |  | ||||||
| 
 |  | ||||||
| Большинство IP камер сегодня комплектуются чипами Nor или Nand флэш-памяти | Большинство IP камер сегодня комплектуются чипами Nor или Nand флэш-памяти | ||||||
| объемом 8 или 16 мегабайтов. Вы можете увидеть тип и размер установленной на | объемом 8 или 16 мегабайтов. Вы можете увидеть тип и размер установленной на | ||||||
| вашей камере микросхемы в выводе лога загрузчика. Там будет что-то вроде этого: | вашей камере микросхемы в выводе лога загрузчика. Там будет что-то вроде этого: | ||||||
|  | @ -146,6 +153,375 @@ sf read 0x82000000 0x0 0x1000000 | ||||||
| tftp 0x82000000 firmware-full.bin 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._ | _...to be continued._ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue