스크립팅은 처음이고, 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
한 줄에서 at 3
으로 변경하려면 다음을 수행하십시오 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 = 20480 } ;
constexpr static const VENC_H265_VBR_S defH265Vbr =
{
.u32Gop = 50,
.u32StatTime = 5,
.u32SrcFrameRate = 25,
.fr32DstFrameRate = 25,
.u32MaxBitRate = 20480
특정 파일에서 정확한 라인 항목을 검색하려면 bash 스크립트를 만들어야 합니까? 아니면 bash를 작성하여 .u32MaxBitRate를 편집할 수 있습니까?