闲鱼上看到一个配置不错、带金属外壳和POE供电的Hi3516DV300摄像头,价格超级便宜,只要50块,于是买了回来打算破解掉自己用。
先上个整机和拆机图片。
先备份固件
hitool加tftp上传,备件整个镜像。
uboot分析:
查看emmc和内存大小,参考https://whycan.com/t_4145.html
破解linux登录密码:
参考https://blog.csdn.net/coderwuqiang/article/details/50354270
分析启动过程和固件内容:
B分区改成可读写的,A分区保留只读,随便作。
跑sample程序:
报错,更新内核,由于有双分区,这里先更新B分区,A分区作为保险措施,搞挂了从A分区恢复,自己编译个内核和拷贝对应的ko文件到板子上,用原来的加载脚本进行加载。640M,不合法。
重启问题
没跑应用时,总是会隔一段时间重启一次,然而lsmod查看,却没发现有加载看门狗,而且奇怪的时,在uboot命令上也会重启,说明可能用了外部硬件看门狗,或是外接了MCU进行保活复位之类的。
考虑到这个板子软硬件水平确实一般,还是先排除掉外部看门狗。
先统计重启间隔,发现很有规律,总是5分钟重启一次,不管是uboot下还是正常运行,reboot复位一次,重启时间不累加,会重新开始5分钟计时,从这里可以排除掉外部硬件看门狗。
于是猜测是祼写了看门狗寄存器,查看Hi3516DV300芯片手册,找到看门狗寄存器描述,用挂载的himd.l查看0x12050000和0x12051000这两段寄存器,发现寄存器果然是有值的,这就清楚了,是uboot的应用程序直接操作的看门狗寄存器。怪不得板子上有个himm应用程序,但是却没有himd,估计应用也是直接调的himm来操作寄存器吧。
几点感想:
记录:
bootargs=mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 ro init=/linuxrc rootw bootargsA=mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 ro init=/linuxrc rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user) bootargsB=mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p5 rootfstype=ext4 ro init=/linuxrc rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user) setenv bootargs 'mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 ro init=/bin/sh rootw' setenv bootargsA 'mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 ro init=/linuxrc rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user)' setenv bootargsA 'mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 ro init=/bin/sh rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user)' setenv bootargsB 'mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p5 rootfstype=ext4 rw init=/linuxrc rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user)' setenv bootargsB 'mem=640M mac=ee:bb:03:01:32:36 console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p5 rootfstype=ext4 rw init=/bin/sh rootwait blkdevparts=mmcblk0:1M(boot),12M(kernelA),32M(rootfsA),12M(kernelB),32M(rootfsB),-(user)' port=10008 [2023/4/29 22:49:53:588] default_username=admin [2023/4/29 22:49:53:588] default_password=bianlifeng666 |