您尚未登录。

楼主 #1 2020-03-31 14:35:41

KeyMove
会员
注册时间: 2019-11-15
已发帖子: 7
积分: 7

F1c100s逆向了一下melis的TVD.DRV

不废话直接上图
TIM图片20200331141457.jpg
D2.png

初始化部分

#define TVD_BASE 0x01C0B000
        ENABLE_BUSCLK(CCU_BUS_CLK_GATING_TVD_GATING);//BUS
	SETBIT(CCU->DRAM_CLK_GATE,BIT3);//DRAM
	
	CCU->PLL_VIDEO_CTRL=(1<<31);//VIDEO PLL
	while(!(CCU->PLL_VIDEO_CTRL&(1<<28)));//297MHz
	
	CCU->TVD_CLK=(1<<31)|(9);	//SEL VIDEO PLL
	
	mem32(TVD_BASE+0x0088)=0x4000000;
	
	mem32(TVD_BASE+0x0088)&=0xFEFFFFFF&0xFFFFFFEF;
	
	mem32(TVD_BASE+0x0E04) = 0x8002AAA8;
	mem32(TVD_BASE+0x0000) = 0x1F00;
	mem32(TVD_BASE+0x0F70) = 0x2010;
	mem32(TVD_BASE+0x0F0C) = 0x10;
	mem32(TVD_BASE+0x000C) = 0x202080;
	
	mem32(TVD_BASE+0x0F6C)=0xFFFA0A;
	mem32(TVD_BASE+0x0F44)=0x50823925;
	mem32(TVD_BASE+0x0F24)=0x682810A;
	mem32(TVD_BASE+0x0F28)=0x6440;
	mem32(TVD_BASE+0x0014)=0x20000000;
	mem32(TVD_BASE+0x0F4C)=0xE70106C;
	mem32(TVD_BASE+0x0010)=0x2310080;
	
	mem32(TVD_BASE+0x0008)=0x1101001;
	mem32(TVD_BASE+0x0F08)=0x11590902;
	mem32(TVD_BASE+0x0F0C)=0x40;
	mem32(TVD_BASE+0x0F10)=0x8A32EC;
	mem32(TVD_BASE+0x0F14)=0x800000A0;
	mem32(TVD_BASE+0x000C)=0x2080;
	mem32(TVD_BASE+0x0F1C)=0xDC0000;
	mem32(TVD_BASE+0x0F24)=0x682810A;
	mem32(TVD_BASE+0x0F28)=0x6440;
	mem32(TVD_BASE+0x0014)=0x20000000;
	mem32(TVD_BASE+0x0F44)=0x4632;
	mem32(TVD_BASE+0x0F4C)=0xE70106C;
	mem32(TVD_BASE+0x0F54)=0;
	mem32(TVD_BASE+0x0F58)=0x82;
	mem32(TVD_BASE+0x0F6C)=0xFFFA0A;
	mem32(TVD_BASE+0x0F80)=0x500000;
	mem32(TVD_BASE+0x0F84)=0xC10000;
	mem32(TVD_BASE+0x001C)=0x870026;
	mem32(TVD_BASE+0x0018)=0x2A098ACB;
	mem32(TVD_BASE+0x0F2C)=0xD74;
	mem32(TVD_BASE+0x0F74)=0x343;
	mem32(TVD_BASE+0x0E04)=0x8002AAA8;
	mem32(TVD_BASE+0x0040)=0x4000310;
	mem32(TVD_BASE+0x0000)=0x11;
	
	mem32(TVD_BASE+0x008C)=(mem32(TVD_BASE+0x008C)&(0xF800F000))|720|((576/2)<<16);
	
	mem32(TVD_BASE+0x0E2C)=0x110000;
	mem32(TVD_BASE+0x0000)=0x1F2F;
	mem32(TVD_BASE+0x0F20)=0x2C0607;
	mem32(TVD_BASE+0x0E28)=0x10026;
	mem32(TVD_BASE+0x0FE0)=0;

	mem32(TVD_BASE+0x0E04)&=~1;
	
	mem32(TVD_BASE+0x0080)=0x80000000;
	mem32(TVD_BASE+0x0088)|=0x10000000u;
	
	mem32(TVD_BASE+0x0084)=0x80000000+1000000;
	mem32(TVD_BASE+0x0088)|=0x10000000u;
	
	SETBIT(mem32(TVD_BASE+0x0088),BIT0);

参考了之前A20 TVD的DRV的写法去猜寄存器的地址以及功能
好几个参数都是蒙对的
只能说这次有很大的运气成分
通过IDA逆向分析使用0xF1C0B000(不知道为什么是0xF1C0B000而不是0x01C0B000)作为基址的寄存器操作。然后根据现有的头文件去猜功能。
不过依然操作全是黑箱,不知道寄存器代表啥只能靠逆向出来的寄存器操作去初始化。也有一定的局限性。
之前不了解CVBS需要27MHz时钟用,24MHz调试了半天都没出来效果。偶然间才看见CVBS需要27MHz时钟。

驱动文件
tvd.zip

离线

#2 2020-03-31 14:40:16

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: F1c100s逆向了一下melis的TVD.DRV

是0xF1C0B000还是0x01C0B000 这个是开了mmu和没开mmu的区别吧?

离线

#3 2020-03-31 14:56:11

LinjieGuo
Moderator
注册时间: 2019-07-24
已发帖子: 583
积分: 587
个人网站

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#4 2020-03-31 15:19:34

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#5 2020-03-31 15:34:18

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 464
积分: 331.5
个人网站

Re: F1c100s逆向了一下melis的TVD.DRV

楼主V587

离线

#6 2020-03-31 15:48:10

路人乙
会员
注册时间: 2017-09-26
已发帖子: 57
积分: 57

Re: F1c100s逆向了一下melis的TVD.DRV

感谢大佬分享,再预约一篇IDA插件反向成c代码的教程。

离线

#7 2020-03-31 16:06:41

有梦的地方
会员
注册时间: 2020-03-17
已发帖子: 284
积分: 284

Re: F1c100s逆向了一下melis的TVD.DRV

围观,楼主不但逆向, 还能逆天!

离线

#8 2020-03-31 16:07:45

awfans
会员
注册时间: 2018-04-03
已发帖子: 264
积分: 264

Re: F1c100s逆向了一下melis的TVD.DRV

在楼主和IDA面前,全志的底裤已经慢慢开始透明。

离线

#9 2020-03-31 16:08:43

wujique
会员
注册时间: 2018-10-30
已发帖子: 178
积分: 172

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#10 2020-03-31 16:17:49

gddddd
会员
注册时间: 2020-03-27
已发帖子: 30
积分: 30

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#11 2020-03-31 20:18:46

fane
会员
注册时间: 2020-03-20
已发帖子: 22
积分: 1

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#12 2020-03-31 21:00:36

ybbrdfxk0922
会员
所在地: 石家庄
注册时间: 2018-04-27
已发帖子: 23
积分: 18

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#13 2020-03-31 21:47:42

zzm24
会员
注册时间: 2018-05-07
已发帖子: 120
积分: 107

Re: F1c100s逆向了一下melis的TVD.DRV

逆向牛了,开源精神更牛

离线

#14 2020-04-01 07:34:49

TivonLiu
会员
注册时间: 2019-12-27
已发帖子: 46
积分: 36

Re: F1c100s逆向了一下melis的TVD.DRV

这个比较牛X了,要有相当的功底,还要熟知大量同类资料

离线

#15 2020-04-01 08:19:11

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 288
积分: 222

Re: F1c100s逆向了一下melis的TVD.DRV

请问下楼主,一楼这个是不是在Linux下使用呢?还是在裸机下使用?那段代码应该插入什么位置呢?是把CVBS的信号显示到LCD上面吗?

不好意思,萌新的问题有点多。

离线

#16 2020-04-01 09:13:18

光头程序员
会员
注册时间: 2020-03-03
已发帖子: 14
积分: 14

Re: F1c100s逆向了一下melis的TVD.DRV

逸俊晨晖 说:

是0xF1C0B000还是0x01C0B000 这个是开了mmu和没开mmu的区别吧?

这个是正解!就是mmu把地址重映射了。

离线

#17 2020-04-01 09:20:25

k455619
会员
注册时间: 2018-07-29
已发帖子: 151
积分: 80

Re: F1c100s逆向了一下melis的TVD.DRV

厉害 厉害

离线

#18 2020-04-01 09:50:36

村民
会员
注册时间: 2019-03-06
已发帖子: 42
积分: 12

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!

离线

#19 2020-04-01 10:03:00

ntmusic
会员
注册时间: 2020-02-24
已发帖子: 43
积分: 33

Re: F1c100s逆向了一下melis的TVD.DRV

膜拜大神!!

离线

楼主 #20 2020-04-01 20:12:52

KeyMove
会员
注册时间: 2019-11-15
已发帖子: 7
积分: 7

Re: F1c100s逆向了一下melis的TVD.DRV

拉轰的脚踏车 说:

请问下楼主,一楼这个是不是在Linux下使用呢?还是在裸机下使用?那段代码应该插入什么位置呢?是把CVBS的信号显示到LCD上面吗?

不好意思,萌新的问题有点多。

裸机下使用的
采集到的图像会存在0x80000000地址
可以通过下面这个函数判断是否检测到CVBS信号

static __u32 BSP_TVD_get_status(__u32 id)
{
	__u32 reg_val = 0;
	__u32 det = 0;
	__u32 system = 0;
	reg_val = REG_RD32(TVD_REGS_BASE+0x0e40);
	if(reg_val&1)
	{
		det = 0;// no signal detect
	}
	else
	{
		det = 1;// detect tv signal
	}
	if(reg_val&(1<<18))
	{
		system = 1;//get system = pal
	}
	else{
		system = 0;//get system = ntsc
	}

    __wrn("reg_val:0x%x, det:%d, system:%d\n", reg_val, det, system);
    
	return ((det<<0)+(system<<4));//bit0=det bit4=system
}

离线

#21 2020-04-01 23:24:40

忙着折腾
会员
注册时间: 2019-02-20
已发帖子: 30
积分: 19

Re: F1c100s逆向了一下melis的TVD.DRV

厉害了

离线

#22 2020-04-01 23:29:05

忙着折腾
会员
注册时间: 2019-02-20
已发帖子: 30
积分: 19

Re: F1c100s逆向了一下melis的TVD.DRV

下载下来只有tvd.drv文件,裸机用不了吧?

离线

#23 2020-04-01 23:33:03

忙着折腾
会员
注册时间: 2019-02-20
已发帖子: 30
积分: 19

Re: F1c100s逆向了一下melis的TVD.DRV

忙着折腾 说:

下载下来只有tvd.drv文件,裸机用不了吧?

明白了,楼主发的是寄存器初始化代码。

离线

#24 2020-04-02 10:19:56

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 630
积分: 525
个人网站

Re: F1c100s逆向了一下melis的TVD.DRV

感谢楼主分享,之前我也搞了一下,黑白显示ok,但是彩色显示时候颜色不大对。有空调下再分享

离线

#25 2020-04-02 14:29:25

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: F1c100s逆向了一下melis的TVD.DRV

先赞为敬!
太牛了,至少是看到图像了!!!
目前为此看到的C100 TVD最先进的..

离线

#26 2024-10-03 22:36:10

lidaliang
会员
注册时间: 2024-09-27
已发帖子: 7
积分: 2

Re: F1c100s逆向了一下melis的TVD.DRV

厉害,感谢分析 刚好最近研究F1C100S采集CVBS摄像头数据与存储,可以参考下了

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn