スクリプトは初めて、bashは初めて、ファームウェアの修正は初めてですが…情熱が真っ最中です。
これは協会私のカメラのファームウェアに。
このカメラに特別に記録されたビットレート値を編集して交換しようとするのに役立ちます。ビットレート値を見つけるために16進エディタを使用しましたが、まだ見つかりませんでした。私はまだ探しています...これまでスクリプトを使用してファームウェアバージョンの値を変更できるかどうかをテストし、実際に動作していることを確認したいと思います。
このファイルにはファームウェアのバージョン情報が保存されているようですparamdef
。 16進数で開いてファームウェアバージョンを検索すると、D0B0(16進数の下部)にあります。 bashファイルの3値を4に変更し、bashスクリプトを使用してカメラを起動したときにカメラで動作することを確認したいと思いますtest.sh
。
- Bashスクリプトで16進行を参照する方法を知る必要があります。
- Bashスクリプトを使用して16進行の値を変更する方法を知る必要があります。
私はこのスクリプトで肯定的な牽引力を得ることができれば、最終的にカメラのビットレート値を編集できると思います。
また、同じファームウェアをカメラにフラッシュすることはできません。新しいバージョンのみが更新されます。これがファームウェアファイルの先頭のシステムスクリプトに関連しているかどうか疑問に思います。
から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コマンドで見つけることができると思います。構成ファイルには、Linuxコマンド構造から読み取ることができるsetenvコマンドがあります。 ? ?起動時に動作することを確認したかったので、次の内容で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
または、16進データを使用するのと同じです。
# helper output
$ printf 'V2.1.2.3-B' | xxd -p
56322e312e322e332d42
$ xxd -r -p <<<'56322e312e322e332d42' | dd of=paramdef bs=1 seek=53417 conv=notrunc
1行からat3
に変更するには、次のようにします4
。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 =
constexpr static const VENC_H265_VBR_S defH265Vbr =
{
.u32Gop = 50,
.u32StatTime = 5,
.u32SrcFrameRate = 25,
.fr32DstFrameRate = 25,
.u32MaxBitRate = 20480
特定のファイルから正確な行エントリを取得するには、bashスクリプトを作成する必要がありますか?それとも、bashを作成して.u32MaxBitRateを編集できますか?