12322
- 收藏
- 点赞
- 分享
- 举报
记录一次Hi3518E新添sensor的过程
本帖最后由 jasongol 于 2017-12-14 11:29 编辑
使用的sensor是海思列表没有支持的SC2235,主要需要了解到这个sensor的配置已经地址(需要向sensor原厂要驱动sc2235_cmos.c sc2235_sensor_ctl.c sc2235_1080p_line.ini vpss_attr_2235.c)编译为.so .a以供测试代码调用。
首先在ko加载时就要添加自己的sensor,./load3518e -a -sensor sc2235 -osmem 32 -total 64
在load3518e 脚本中的函数insert_sns()中添加自己sensor对应的地址。
否则会报错“Invalid sensor type”
问题1:
Unknown symbol in module, or unknown parameter(rmmod 执行失败,请忽视错误,开机第一次加载ko,会先删除rmmode,为空肯定报错)
operation not permitted
load3518e执行失败,ko插入失败
第一反应肯定是linux版本不匹配,嗯,事实上并不是,很可能是OS和MMZ的地址重叠了。
需要看你DDR内存大小,海思教程中的DDR是128MB的,如果你一样,那就跟着教程走就ok
不幸的是,我们的DDR是64MB,那么你可以参照下面的修改
setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
saveenv
上面的修改就够了,以后的都按照默认走,我也顺带贴出来
SNS_TYPE=ar0230 # sensor type
mem_total=64; # 64M, total mem
mem_start=0x80000000; # phy mem start
os_mem_size=32; # 32M, os mem
mmz_start=0x82000000; # mmz start addr
mmz_size=32M; # 32M, mmz size
MMZ地址肯定是从82000000开始的,OS最开始是从bootm 0x82000000启动的,但是启动后会回盖到0x80000000的 ,所以不用担心0x82000000重叠,正如文档所述,正常运行后的地址分配如图:
DDR:
-----|-------| 0x80000000 # Memory managed by OS.
32M | OS |
| |
-----|-------| 0x82000000 # Memory managed by MMZ block anonymous.
32 M | MMZ |
| |
-----|-------| 0x84000000 # Memory managed by MMZ block jpeg.
一切顺利的话,lsmod会有如下显示:
Module Size Used by Tainted: P
hi_mipi 22587 0
hi3518e_adec 6546 0
hi3518e_aenc 46989 0
hi3518e_ao 105952 0
hi3518e_ai 109706 1 hi3518e_aenc
hi3518e_aio 28363 0
acodec 8242 0
piris 3220 0
pwm 2471 0
sensor_i2c 1501 0
hi3518e_ive 76660 0
hi3518e_jpege 51824 0
hi3518e_h264e 172210 0
hi3518e_chnl 33659 0
hi3518e_venc 216283 2 hi3518e_jpege,hi3518e_h264e
hi3518e_rc 62388 0
hifb 72068 0
hi3518e_vou 168985 1 hifb
hi3518e_vpss 261330 0
hi3518e_viu 246389 1 hi3518e_vpss
hi3518e_isp 105606 4 piris,sensor_i2c,hi3518e_vpss,hi3518e_viu
hi3518e_vgs 127198 0
hi3518e_region 66722 0
hi3518e_tde 121855 2 hifb,hi3518e_region
hi3518e_sys 62048 2 hi3518e_vpss,hi3518e_viu
hi3518e_base 58109 21 hi3518e_adec,hi3518e_aenc,hi3518e_ao,hi3518e_ai,hi3518e_aio,acodec,hi3518e_ive,hi3518e_jpege,hi3518e_h264e,hi3518e_chnl,hi3518e_venc,hi3518e_rc,hifb,hi3518e_vou,hi3518e_vpss,hi3518e_viu,hi3518e_isp,hi3518e_vgs,hi3518e_region,hi3518e_tde,hi3518e_sys
hi_media 5801 6 hi_mipi,acodec,pwm,hifb,hi3518e_tde,hi3518e_base
mmz 22400 6 hi3518e_ao,hi3518e_jpege,hi3518e_h264e,hi3518e_tde,hi3518e_sys,hi3518e_base
rtl8188eu 692341 0
问题1:
由于是新sensor,跑海思自带的测试代码肯定会提示“This sensor type is not surpport!”
解决方案:
添加新sensor的枚举类型 到typedef enum sample_vi_mode_e {}SAMPLE_VI_MODE_E;
并根据自己sensor的参数正确命名。
问题2:
最棘手的问题,get venc stream time out, exit thread
既然是新添加sensor,那么能出现这个超时问题一定就是视频摄入有问题了,最主要的结构在sample_common_vi.c 的combo_dev_attr_t结构体。
你要对照sensor厂商给的ini配置,参照其他厂商的形式为你的sensor写一个此结构体的初始化代码。当然我们的是CMOS3V3的,直接使用如下初始化结构:
combo_dev_attr_t MIPI_CMOS3V3_ATTR =
{
/* input mode */
.input_mode = INPUT_MODE_CMOS_33V,
{
}
};
执行sample_venc之后,选择一个选项,h264的流就出现在执行目录下了,直接用vlc打开。
如果想要转为网络的rtsp流,那需要改sample代码将这些流重新打包,并使用rtsp流发布出来。
最后贴一张成像图,但是泛紫,现在正准备在ISP调试下,帖子继续更新。
使用的sensor是海思列表没有支持的SC2235,主要需要了解到这个sensor的配置已经地址(需要向sensor原厂要驱动sc2235_cmos.c sc2235_sensor_ctl.c sc2235_1080p_line.ini vpss_attr_2235.c)编译为.so .a以供测试代码调用。
首先在ko加载时就要添加自己的sensor,./load3518e -a -sensor sc2235 -osmem 32 -total 64
在load3518e 脚本中的函数insert_sns()中添加自己sensor对应的地址。
否则会报错“Invalid sensor type”
问题1:
Unknown symbol in module, or unknown parameter(rmmod 执行失败,请忽视错误,开机第一次加载ko,会先删除rmmode,为空肯定报错)
operation not permitted
load3518e执行失败,ko插入失败
第一反应肯定是linux版本不匹配,嗯,事实上并不是,很可能是OS和MMZ的地址重叠了。
需要看你DDR内存大小,海思教程中的DDR是128MB的,如果你一样,那就跟着教程走就ok
不幸的是,我们的DDR是64MB,那么你可以参照下面的修改
setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
saveenv
上面的修改就够了,以后的都按照默认走,我也顺带贴出来
SNS_TYPE=ar0230 # sensor type
mem_total=64; # 64M, total mem
mem_start=0x80000000; # phy mem start
os_mem_size=32; # 32M, os mem
mmz_start=0x82000000; # mmz start addr
mmz_size=32M; # 32M, mmz size
MMZ地址肯定是从82000000开始的,OS最开始是从bootm 0x82000000启动的,但是启动后会回盖到0x80000000的 ,所以不用担心0x82000000重叠,正如文档所述,正常运行后的地址分配如图:
DDR:
-----|-------| 0x80000000 # Memory managed by OS.
32M | OS |
| |
-----|-------| 0x82000000 # Memory managed by MMZ block anonymous.
32 M | MMZ |
| |
-----|-------| 0x84000000 # Memory managed by MMZ block jpeg.
一切顺利的话,lsmod会有如下显示:
Module Size Used by Tainted: P
hi_mipi 22587 0
hi3518e_adec 6546 0
hi3518e_aenc 46989 0
hi3518e_ao 105952 0
hi3518e_ai 109706 1 hi3518e_aenc
hi3518e_aio 28363 0
acodec 8242 0
piris 3220 0
pwm 2471 0
sensor_i2c 1501 0
hi3518e_ive 76660 0
hi3518e_jpege 51824 0
hi3518e_h264e 172210 0
hi3518e_chnl 33659 0
hi3518e_venc 216283 2 hi3518e_jpege,hi3518e_h264e
hi3518e_rc 62388 0
hifb 72068 0
hi3518e_vou 168985 1 hifb
hi3518e_vpss 261330 0
hi3518e_viu 246389 1 hi3518e_vpss
hi3518e_isp 105606 4 piris,sensor_i2c,hi3518e_vpss,hi3518e_viu
hi3518e_vgs 127198 0
hi3518e_region 66722 0
hi3518e_tde 121855 2 hifb,hi3518e_region
hi3518e_sys 62048 2 hi3518e_vpss,hi3518e_viu
hi3518e_base 58109 21 hi3518e_adec,hi3518e_aenc,hi3518e_ao,hi3518e_ai,hi3518e_aio,acodec,hi3518e_ive,hi3518e_jpege,hi3518e_h264e,hi3518e_chnl,hi3518e_venc,hi3518e_rc,hifb,hi3518e_vou,hi3518e_vpss,hi3518e_viu,hi3518e_isp,hi3518e_vgs,hi3518e_region,hi3518e_tde,hi3518e_sys
hi_media 5801 6 hi_mipi,acodec,pwm,hifb,hi3518e_tde,hi3518e_base
mmz 22400 6 hi3518e_ao,hi3518e_jpege,hi3518e_h264e,hi3518e_tde,hi3518e_sys,hi3518e_base
rtl8188eu 692341 0
问题1:
由于是新sensor,跑海思自带的测试代码肯定会提示“This sensor type is not surpport!”
解决方案:
添加新sensor的枚举类型 到typedef enum sample_vi_mode_e {}SAMPLE_VI_MODE_E;
并根据自己sensor的参数正确命名。
问题2:
最棘手的问题,get venc stream time out, exit thread
既然是新添加sensor,那么能出现这个超时问题一定就是视频摄入有问题了,最主要的结构在sample_common_vi.c 的combo_dev_attr_t结构体。
你要对照sensor厂商给的ini配置,参照其他厂商的形式为你的sensor写一个此结构体的初始化代码。当然我们的是CMOS3V3的,直接使用如下初始化结构:
combo_dev_attr_t MIPI_CMOS3V3_ATTR =
{
/* input mode */
.input_mode = INPUT_MODE_CMOS_33V,
{
}
};
执行sample_venc之后,选择一个选项,h264的流就出现在执行目录下了,直接用vlc打开。
如果想要转为网络的rtsp流,那需要改sample代码将这些流重新打包,并使用rtsp流发布出来。
最后贴一张成像图,但是泛紫,现在正准备在ISP调试下,帖子继续更新。
我来回答
回答30个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
认可0
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2017-08-11 14:28:18
-
2018-04-18 22:24:02
-
12016-01-07 14:03:07
-
2017-06-08 09:06:54
-
2016-04-22 11:29:40
-
2016-07-25 11:45:24
-
2015-07-22 09:55:25
-
2015-01-27 23:46:40
-
2016-05-06 18:15:45
-
2016-08-07 12:29:14
-
2015-05-06 22:25:07
-
2017-01-06 18:04:00
-
2019-08-22 11:25:59
-
2016-03-01 17:00:49
-
12020-04-06 22:23:07
-
12017-12-31 01:52:58
-
22013-09-13 16:27:26
-
22013-09-11 19:53:07
-
12013-11-03 19:46:05
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认