用于编辑运动相机固件值的 Bash 脚本

用于编辑运动相机固件值的 Bash 脚本

脚本编写新手,bash 新手,固件修改新手,但是……热情如火如荼。

这是关联到我相机的固件。

我正在尝试编辑和替换特定于此相机上录制的比特率值,我需要一些帮助。我已经使用十六进制编辑器来查找比特率值,但我还没有找到它们。仍在寻找...与此同时,我想看看是否可以使用脚本更改固件版本的值,只是为了测试它并看看它是否真的有效。

我相信固件版本信息存储在该paramdef文件中。如果您以十六进制打开它并搜索固件版本,您将在 D0B0(位于十六进制底部)中找到它。我想将 bash 文件中的 3 值更改为 4,并查看当我使用 bash 脚本启动相机时它是否可以在相机中工作test.sh

  1. 我需要知道如何在 bash 脚本中引用十六进制行
  2. 我需要知道如何用 bash 脚本替换十六进制行中的值

我在想,如果我能在这个脚本上获得一些积极的牵引力,我最终将能够编辑我的相机的比特率值。

我也无法一遍又一遍地将相同的固件刷新到我的相机上。它只会刷新一个新版本。我想知道这是否与固件文件开头的系统脚本有关:

config.file

setenv bootargs 'mem=96M quiet console=ttyAMA0,115200 clk_ignore_unused rw root=/dev/mtdblock5 rootfstype=jffs2 mtdparts=hi_sfc:384K(u-boot-GR01V2_2_2GDDR3.bin),64K(rawparam),64K(rawparambak),2944K(media_app_zip.bin),2560K(uImage),1920K(rootfs.jffs2),8064K(appfs.jffs2)'
setenv bootcmd 'sf probe 0;sf read 0x84000000 0x60000 0x10000;sf read 0x84100000 0x70000 0x10000;cread 0x84000000 0x84100000 0x10000 0x80100000;go_cpu1 0x80200000 0x89000000 0x80000 0x2e0000;sf read 0x84000000 0x360000 0x280000;bootm 0x84000000'
setenv swverv2 'S2_GR01V2_2_2GDDR3_0303111844'

编辑:我仍然没有找到我要找的东西(u2 ...)...我开始认为它可能会在 U-boot 命令中找到?配置文件有 setenv 命令,我相信它是由 Linux 命令结构读取的???我想看看它是否能在启动时工作,我创建了一个 bash.sh 文件,内容如下: ''' echo 'This is a test' > foo.txt '''

答案1

使用xxd,ddprintf:

版本号V2.1.0.3-A可以在这里找到(第 3339-3340 行):

$ xxd paramdef
...
0000d0a0: 0000 0000 0000 0000 0056 322e 312e 322e  .........V2.1.2.
0000d0b0: 332d 4200 0000 0000 0000 0000 0000 0000  3-B.............
...

并且字符串从d0a9hex = 53417dec 开始(使用 转换printf '%d' 0xd0a9)。

让我们用以下内容覆盖版本字符串V2.1.2.3-B

printf 'V2.1.2.3-B' | dd of=paramdef bs=1 seek=53417 conv=notrunc

或使用十六进制数据的等效内容:

# helper output
$ printf 'V2.1.2.3-B' | xxd -p
56322e312e322e332d42

$ xxd -r -p <<<'56322e312e322e332d42' | dd of=paramdef bs=1 seek=53417 conv=notrunc

要在一行中更改34at :d0b0

printf '4' | dd of=paramdef bs=1 seek=$(printf '%d' 0xd0b0) conv=notrunc

答案2

所以我仍在努力:

我正在尝试编辑固件加载文件,这没有任何意义......所以我需要实际编辑运动相机内的可执行文件......

所以我做了一些研究,并提出了以下代码: constexpr static const VENC_H265_CBR_S defH265Cbr = { .u32Gop = 50, .u32StatTime = 5, .u32SrcFrameRate = 25, .fr32DstFrameRate = 25, .u32BitRate = 20480 } ;

constexpr static const VENC_H265_VBR_S defH265Vbr =
{
    .u32Gop                 = 50,
    .u32StatTime            = 5,
    .u32SrcFrameRate        = 25,
    .fr32DstFrameRate       = 25,
    .u32MaxBitRate          = 20480

我是否需要创建一个 bash 脚本来在特定文件中搜索这个确切的行项目,或者我可以以某种方式编写 bash 来编辑 .u32MaxBitRate 吗?

相关内容