脚本编写新手,bash 新手,固件修改新手,但是……热情如火如荼。
这是关联到我相机的固件。
我正在尝试编辑和替换特定于此相机上录制的比特率值,我需要一些帮助。我已经使用十六进制编辑器来查找比特率值,但我还没有找到它们。仍在寻找...与此同时,我想看看是否可以使用脚本更改固件版本的值,只是为了测试它并看看它是否真的有效。
我相信固件版本信息存储在该paramdef
文件中。如果您以十六进制打开它并搜索固件版本,您将在 D0B0(位于十六进制底部)中找到它。我想将 bash 文件中的 3 值更改为 4,并查看当我使用 bash 脚本启动相机时它是否可以在相机中工作test.sh
。
- 我需要知道如何在 bash 脚本中引用十六进制行
- 我需要知道如何用 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
,dd
和printf
:
版本号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.............
...
并且字符串从d0a9
hex = 53417
dec 开始(使用 转换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
要在一行中更改3
为4
at :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 吗?