Replace commands with a link to installation instruction constructor.

pull/46/head
Paul Philippov 2022-08-18 01:13:25 -04:00 committed by GitHub
parent 0634f240e8
commit a0d1a27647
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 311 deletions

View File

@ -197,21 +197,13 @@ SPI Nor total size: 16MB
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
how you do that. Initialize the Flash memory. Clean a region of RAM of 0x1000000
bytes long starting from address 0x82000000*. Read contents of the Flash from
address 0x0 0x1000000 bytes long and place it into the prepared region or RAM.
Now, you only have to export it to a file on the TFTP server.
how you do that. Initialize the Flash memory. Clean a region of RAM large enough to
fit whole content of flash memory chip. Read contents of the flash from into that
region, then export it to a file on the TFTP server.
```
sf probe 0
mw.b 0x82000000 ff 0x1000000
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].
Please note, that flash type, size and starting address differ for different cameras!
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
### 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.
Connect to the camera via the UART port and access the bootloader console.
Set the component parameters to the appropriate environment variables:
```
setenv soc hi3518ev100
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
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,
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,
`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.
```
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
```
Save updated values to flash memory.
```
saveenv
```
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
##### Installation.
First, clear the memory region at address 0x82000000, 0x1000000 bytes long, by
writing 0xff to it. Then retrieve kernel file for the camera from the TFTP
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}
```
For exact commands please use [automatically generated instructions](https://openipc.org/supported-hardware/)
for your hardware, consult data sheets, or seek help on [our Telegram channel][telegram].
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,
do not continue the procedure until all previous commands succeed. Otherwise,
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.
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
```
### 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
[FTDI]: https://www.google.com/search?q=ftdi+usb+ttl
[TLLC]: https://google.com/search?q=logic+level+converter+3.3v+5v