mirror of https://github.com/OpenIPC/wiki.git
Replace commands with a link to installation instruction constructor.
parent
0634f240e8
commit
a0d1a27647
|
@ -197,21 +197,13 @@ SPI Nor total size: 16MB
|
||||||
|
|
||||||
To dump the original firmware, you need to save the contents of camera's flash
|
To dump the original firmware, you need to save the contents of camera's flash
|
||||||
memory to a file. For that, you must first load the contents into RAM. Here's
|
memory to a file. For that, you must first load the contents into RAM. Here's
|
||||||
how you do that. Initialize the Flash memory. Clean a region of RAM of 0x1000000
|
how you do that. Initialize the Flash memory. Clean a region of RAM large enough to
|
||||||
bytes long starting from address 0x82000000*. Read contents of the Flash from
|
fit whole content of flash memory chip. Read contents of the flash from into that
|
||||||
address 0x0 0x1000000 bytes long and place it into the prepared region or RAM.
|
region, then export it to a file on the TFTP server.
|
||||||
Now, you only have to export it to a file on the TFTP server.
|
|
||||||
|
|
||||||
```
|
Please note, that flash type, size and starting address differ for different cameras!
|
||||||
sf probe 0
|
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
|
||||||
mw.b 0x82000000 ff 0x1000000
|
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
|
||||||
sf read 0x82000000 0x0 0x1000000
|
|
||||||
tftp 0x82000000 firmware-full.bin 0x1000000
|
|
||||||
```
|
|
||||||
|
|
||||||
NB! Please note, that the starting address and length will be different for
|
|
||||||
different cameras with different Flash memory chips. Consult data sheets or
|
|
||||||
seek help on [our Telegram channel][telegram].
|
|
||||||
|
|
||||||
### Step 7. Install OpenIPC firmware.
|
### Step 7. Install OpenIPC firmware.
|
||||||
|
|
||||||
|
@ -251,257 +243,27 @@ So, we have a guinea pig, a camera with hi3518ev100 SoC, equipped with a OV9712
|
||||||
sensor and 64 MB of RAM.
|
sensor and 64 MB of RAM.
|
||||||
|
|
||||||
Connect to the camera via the UART port and access the bootloader console.
|
Connect to the camera via the UART port and access the bootloader console.
|
||||||
Set the component parameters to the appropriate environment variables:
|
Set the component parameters to the appropriate environment variables. Set
|
||||||
|
environment variables for loading the Linux kernel and the root file system
|
||||||
```
|
of the new firmware. Set environment variables for the camera to access local network,
|
||||||
setenv soc hi3518ev100
|
where `ethaddr` is the original camera MAC address, `ipaddr` is camera's IP address
|
||||||
setenv sensor ov9712
|
|
||||||
setenv totalmem 64M
|
|
||||||
```
|
|
||||||
|
|
||||||
Set environment variables for loading the Linux kernel and the root file system
|
|
||||||
of the new firmware:
|
|
||||||
|
|
||||||
```
|
|
||||||
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'
|
|
||||||
```
|
|
||||||
|
|
||||||
Set environment variables for the camera to access local network, where
|
|
||||||
`ethaddr` is the original camera MAC address, `ipaddr` is camera's IP address
|
|
||||||
on the network, `gatewayip` is the IP address of a router to access the network,
|
on the network, `gatewayip` is the IP address of a router to access the network,
|
||||||
`netmask` is the subnet mask, and `serverip` is am IP address of the TFTP server
|
`netmask` is the subnet mask, and `serverip` is am IP address of the TFTP server
|
||||||
from step 3.
|
from step 3. Save updated values to flash memory.
|
||||||
|
|
||||||
```
|
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
|
||||||
setenv ethaddr 00:12:16:00:00:00
|
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
|
||||||
setenv ipaddr 192.168.1.10
|
|
||||||
setenv netmask 255.255.255.0
|
|
||||||
setenv gatewayip 192.168.1.1
|
|
||||||
setenv serverip 192.168.1.254
|
|
||||||
```
|
|
||||||
|
|
||||||
Save updated values to flash memory.
|
|
||||||
|
|
||||||
```
|
|
||||||
saveenv
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Installation.
|
##### Installation.
|
||||||
|
|
||||||
First, clear the memory region at address 0x82000000, 0x1000000 bytes long, by
|
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
|
||||||
writing 0xff to it. Then retrieve kernel file for the camera from the TFTP
|
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
|
||||||
server and place it into memory starting with address 0x82000000.
|
|
||||||
|
|
||||||
The `$soc` variable in the name of the requested file is substituted with its
|
|
||||||
value from the environment variables created earlier. In this example, the file
|
|
||||||
named `uImage.hi3518ev100` will be requested from the server.
|
|
||||||
|
|
||||||
```
|
|
||||||
mw.b 0x82000000 ff 1000000
|
|
||||||
tftp 0x82000000 uImage.${soc}
|
|
||||||
```
|
|
||||||
|
|
||||||
NB! Pay attention to the messages on the terminal screen! If any of the commands
|
NB! Pay attention to the messages on the terminal screen! If any of the commands
|
||||||
throws an error, find out what went wrong. Maybe you made a typo? In any case,
|
throws an error, find out what went wrong. Maybe you made a typo? In any case,
|
||||||
do not continue the procedure until all previous commands succeed. Otherwise,
|
do not continue the procedure until all previous commands succeed. Otherwise,
|
||||||
you might end up with a bricked camera!
|
you might end up with a bricked camera!
|
||||||
|
|
||||||
So, you've made sure that the file is downloaded and placed in the camera's RAM.
|
|
||||||
Now you need to write it down to the flash memory. To do that, you need to get
|
|
||||||
access to the flash memory, then clean erase the region from address 0x50000
|
|
||||||
that is 0x200000 bytes long, and copy the contents of camera's RAM from address
|
|
||||||
0x82000000 and the size of the kernel file to the flash memory starting at
|
|
||||||
address 0x50000.
|
|
||||||
|
|
||||||
```
|
|
||||||
sf probe 0
|
|
||||||
sf erase 0x50000 0x200000
|
|
||||||
sf write 0x82000000 0x50000 ${filesize}
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, you need to repeat the process for the root file system, saving it to the
|
|
||||||
next region starting from address 0x250000 of 0x500000 bytes long.
|
|
||||||
|
|
||||||
NB! 0x500000 bytes is a hexadecimal equivalent of 5242880 bytes in decimal
|
|
||||||
system, and equals 5120 kilobytes, exactly what we have prepared for rootfs
|
|
||||||
in `bootargs` parameter.
|
|
||||||
|
|
||||||
It is easy to memorize the sequence if you give it a little thought:
|
|
||||||
clean RAM, download file there, unlock flash chip, wipe the target region in
|
|
||||||
flash memory, write file from memory into there.
|
|
||||||
|
|
||||||
```
|
|
||||||
mw.b 0x82000000 ff 1000000
|
|
||||||
tftp 0x82000000 rootfs.squashfs.${soc}
|
|
||||||
sf probe 0
|
|
||||||
sf erase 0x250000 0x500000
|
|
||||||
sf write 0x82000000 0x250000 ${filesize}
|
|
||||||
```
|
|
||||||
|
|
||||||
After both partitions have been successfully written to the flash memory and all
|
|
||||||
necessary changes have been made to the bootloader to prepare it for starting
|
|
||||||
the new firmware, it is time to reboot the camera. To do that, type this command
|
|
||||||
in the console:
|
|
||||||
|
|
||||||
```
|
|
||||||
reset
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Part two.
|
|
||||||
|
|
||||||
If you have read the first part of this section (if not - go read it), then you
|
|
||||||
already know what manipulations and why you need to do to install the OpenIPC
|
|
||||||
firmware. And all you need are the commands suitable for your particular camera.
|
|
||||||
|
|
||||||
Below are samples of such commands for cameras equipped with [Goke](#goke),
|
|
||||||
[HiSilicon](#hisilicon), [SigmaStar/MStar](#sigmastarmstar), [XM](#xm) SoCs.
|
|
||||||
|
|
||||||
##### Goke
|
|
||||||
|
|
||||||
SoC: 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
|
|
||||||
|
|
||||||
SoC: 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
|
|
||||||
|
|
||||||
SoC: 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
|
|
||||||
|
|
||||||
SoC: 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
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 8. First boot.
|
### Step 8. First boot.
|
||||||
|
|
||||||
If all previous steps are done correctly, your camera should start with the new
|
If all previous steps are done correctly, your camera should start with the new
|
||||||
|
@ -514,64 +276,6 @@ partition. Run this in your terminal window:
|
||||||
firstboot
|
firstboot
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step aside.
|
|
||||||
|
|
||||||
To facilitate subsequent firmware upgrades directly from the bootloader console,
|
|
||||||
create two macros with sequences of commands needed to boot from the TFTP server
|
|
||||||
and write kernel and root file system for your camera model into flash memory.
|
|
||||||
|
|
||||||
We will use `uk` and `ur` for macro names, which can be decoded as `update kernel`
|
|
||||||
and `update rootfs`. Easy to remember.
|
|
||||||
|
|
||||||
As you remember, in the example above we used the following commands to install the kernel:
|
|
||||||
|
|
||||||
```
|
|
||||||
mw.b 0x42000000 ff 1000000
|
|
||||||
tftp 0x42000000 uImage.${soc}
|
|
||||||
sf probe 0
|
|
||||||
sf erase 0x50000 0x200000
|
|
||||||
sf write 0x42000000 0x50000 ${filesize}
|
|
||||||
```
|
|
||||||
|
|
||||||
To create the `uk` macro, join all the above commands into one line, alternating
|
|
||||||
them with semicolons. For added protection against writing invalid data to flash
|
|
||||||
memory in case file downloading from TFTP server fails, replace semicolon before
|
|
||||||
`sf probe 0` with logical AND operator (`&&`). It will make macro to abort if
|
|
||||||
file fails to download.
|
|
||||||
```
|
|
||||||
fw_setenv uk 'mw.b 0x42000000 ff 1000000; tftp 0x42000000 uImage.${soc} && sf probe 0; sf erase 0x50000 0x200000; sf write 0x42000000 0x50000 ${filesize}'
|
|
||||||
```
|
|
||||||
|
|
||||||
Do the same with the root file system commands:
|
|
||||||
```
|
|
||||||
mw.b 0x82000000 ff 1000000
|
|
||||||
tftp 0x82000000 rootfs.squashfs.${soc}
|
|
||||||
sf probe 0
|
|
||||||
sf erase 0x250000 0x500000
|
|
||||||
sf write 0x82000000 0x250000 ${filesize}
|
|
||||||
```
|
|
||||||
|
|
||||||
saving result as `ur` macro:
|
|
||||||
```
|
|
||||||
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}'
|
|
||||||
```
|
|
||||||
|
|
||||||
Naturally, to create your own macro, you should use the commands suitable for
|
|
||||||
your specific camera, not mindlessly copying the above lines, but using them as
|
|
||||||
an example and understanding the actions to be taken.
|
|
||||||
|
|
||||||
NB! Although these commands create a macro to run in the bootloader console,
|
|
||||||
they must be executed inside Linux environment. This way we avoid the
|
|
||||||
restrictions on the number of arguments in the `setenv` command existing in
|
|
||||||
some older versions of the bootloader.
|
|
||||||
|
|
||||||
You will now be able to flash both kernel and root file system followed by
|
|
||||||
rebooting the camera directly from the bootloader console. It's as easy as that!
|
|
||||||
|
|
||||||
```
|
|
||||||
run uk; run ur; reset
|
|
||||||
```
|
|
||||||
|
|
||||||
[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