海思3516A开发板调试整理(一)
第一部分 概述
硬件部分:调试所用的开发板是从外面买的海思3516A的成品。卖家提供的开发板是在海思提供的DEMO板的基础上改的,据说是改动了网卡phy芯片、DDR和flash,使用的是16MMX25L128XX spi flash,DDR据说是一片512M的,phy应该是100M芯片,型号暂时未知。
SDK部分:卖家首次提供的是Hi3516AV100R001C01SPC020版本的SDK,与我司购买的SDK属于同一版本,该版本是Hi3516A芯片的第二个SDK发布版本,发布日期大概是2014年12月。卖家第二次提供的是Hi3516AV100R001C01SPC030 版本的SDK。
软件部分:可以说基本无任何卖家提供的demo程序。
在此基础上开始进行相关的功能调试。
第二部分 文件系统
调试文件系统时,使用NFS文件系统挂载的方式是最利于调试的,做NFS文件系统时,首先使用海思SDK中提供的busybox进行文件系统编译,该过程在SPC020版本的SDK下执行,制作过程中,并未找到文档《Hi3516A/Hi3516D Linux开发环境用户指南.pdf》中说提及的busybox_cfg_hi3516a_XXX 的配置文件,因此尝试使用busybox中现有的几个配置文件进行制作测试,发现没有一个文件系统能正常加载起来。
尝试使用SDK中提供的文件系统进行挂载,在目录HI3516A_SDK_V1020\package 中有一个文件系统的压缩包:rootfs_uclibc.tgz,对其进行解压,然后使用NFS文件系统进行挂载,这次很顺利,文件系统正常挂载起来了,并成功进入系统。
到此,就有了便于调试程序的NFS文件系统。
后续,我在拿到 V100R001C01SPC030版本的SDK之后,同样,将package目录中的文件系统加压出来进行挂载,发现NFS居然挂载不起来,依然是提示“Kernel panic - not syncing: No init found. Try passing init= option to kernel”。所以,这就遗留了一个全新制作或者定制文件系统的问题。
第三部分 芯片初始化
进入文件系统之后,如果需要打开海思方案的视频功能,需要对芯片进行初始化工作,芯片的初始化会做一些配置pinmux、配置时钟、打开sensor读写总线等基础的操作。
第一节 操作命令
配置芯片使用的工具是脚本load3516a, 关于load3516a脚本的使用方案,在海思的文档里面有如下的介绍:
1) 在单板linux系统下,进入mpp/ko目录,加载KO
cd mpp/ko
2) default online
./load3516a -a -sensor mn34220 -osmem 64
3) vi_vpss offline
./load3516a -a -sensor mn34220 -osmem 64 –offline
从以上的命令来看,命令2)中有三个option: -a, -sensor, -osmem。
-a操作是没有对应的参数的,表示移除旧的ko再重新加载必要的ko文件;
-sensor 操作就是针对sensor类型做一些配置了,demo提供的参数是mn34220的sensor,针对这块开发板,那就必定需要改成imx178了;
-osmem 这个参数是配置操作系统的内存大小的,关于这个内存的大小,文档中有如下介绍:
1)所有DDR内存中,一部分由操作系统管理,称为OS内存;另一部分由MMZ模块管理,供媒体业务单独使用,称为MMZ内存。
2) OS内存起始地址为0x80000000,内存大小可通过bootargs进行配置,例如第三章中的setenv bootargs 'mem=64M ... ',表示分配给操作系统内存为64M,您可以根据实际情况进行调整。
3) MMZ内存由MMZ内核模块管理(mpp/ko_hi35xx目录下的mmz.ko),加载mmz模块时,通过模块参数指定其起始地址及大小,load脚本中根据osmem大小来进行计算,例如:
./load3516a -a -sensor mn34220 -osmem 64
您也可以通过修改mpp/ko目录下load3536a脚本中的mmz模块参数,来修改其起始地址和总大小。
4)请注意MMZ内存地址范围不能与OS内存重叠。
从这段说明文字来看,osmem的参数我配置的是265M。
-offline 参数,这个参数设置的是vpss的在线和离线模式的,两种模式的区别在于是否使用vpss模块。所以,综合以上分析,我们需要使用的加载mpp的命令如下:
./load3516a-a -sensor imx178 -osmem 256
第二节 获取文件
关于mpp/ko这个目录,想必海思提供的demo板里面是有匹配的文件的,但是在我的NFS文件系统里面是没有这些文件的,所以需要获取这个文件夹里面的所有文件,获取文件途径有两种:
- 从开发板的flash里面获取。
- 从SDK里面获取。
首先我从开发板里面提取了所有的文件,提取之前,使用开发板做了一个实验,开发板中有两个路径下有这些文件,分别在/komod 和/usr/komod,我依此进入两个文件夹运行了上述的load3516a命令,发现运行到最后脚本居然堵死在那里了,从堵死的打印来看,是在等待I2C数据的回应,进一步跟了一下,是在加载sil9024.ko的时候堵住了,查阅文档,发现sil9024这个ic确实是使用的I2C2通道进行数据通讯的,所以有可能就是板上根本没有也不需要这个ic,因此在load3516中屏蔽了insmodsil9024.ko 这行。
那么问题就来了,既然手动执行这条命令会导致系统堵死,那么开发板的/usr/start业务程序是怎么跑起来的呢?然后我再跟了一下,发现start业务进程并不是直接使用运行load3516a这个脚本的方式来加载的,而且从程序起来之后的lsmod来看,根本没有加载到sil9024.ko,所以,我们屏蔽它是对的。
第三节 加载文件
获取到文件之后,把整个文件夹放到NFS文件系统中,执行前面标红的那条load3516a的命令,一跑就段错误,定位之后发现出现段错误的地方是在执行脚本pinmux_hi3516a.sh的时候,这个脚本是用来设置3516a芯片pinmux的,使用的设置pinmux的工具是一个叫做himm的工具,我查了下文件系统,himm是链接的一个叫做btools的工具,也就是说btools这个工具执行的时候会出现段错误。那么就有了第一个问题:
问题一:himm操作段错误的问题:
解决这个问题做了如下几个操作:
首先,确认himm这个程序的连接的动态库是否全部都有,这个需要使用readelf工具来读一下,找到himm所连接的动态库有哪些,找到后依此确认这些动态库是否存在,不存在的从交叉工具链中拷贝过来;
其次,确认一下工具编译时所使用的编译工具是否匹配,海思方案针对不同的libc库使用了不同的编译工具,文档中的说的是glibc库对应的编译器arm-hisiv400-linux,uclibc对应的编译器是arm-hisiv300-linux,我们的编译环境使用的是arm-hisiv400-linux,使用正确的编译器对btools进行编译即可。源代码路径位于:$(SDK_PATH)\osdrv\tools\board\reg-tools-1.0.0\source\tools,编译完成之后拷贝到文件系统的/bin 目录下。
问题二:DDR内存时钟的配置
在clkcfg_hi3516a.sh文件中脚本针对所有的时钟进行配置,其中DDR时钟是在0x20030030寄存器中进行配置的,卖家针对DDR做过修改,所以我们需要将DDR时钟配置成297M,若配置成250M,会导致系统挂死。也就是需要将”himm 0x200300300x00004025”改为” himm0x20030030 0x00004005”。
综合上述记录来看,修改上述两点,load3516a系统加载就能正常完成了,当然,这个仅限于我们调试的开发板,如果使用海思的demo板,应该是不需要做这些修改的。加载完成之后,我们查看系统所有安装的ko文件信息如下表所示:
Module Size Used by Tainted: G
hi_mipi 23493 0
hi3516a_adec 15046 0
hi3516a_aenc 51562 0
hi3516a_ao 79030 0
hi3516a_ai 82126 1 hi3516a_aenc
hi3516a_aio 27250 0
acodec 10846 0
pwm 2837 0
sensor_i2c 1441 0
hi3516a_ive 77633 0
hi3516a_vda 191247 0
hi3516a_jpege 54539 0
hi3516a_h265e 142869 0
hi3516a_h264e 160945 0
hi3516a_chnl 32415 0
hi3516a_venc 236377 3 hi3516a_jpege,hi3516a_h265e,hi3516a_h264e
hi3516a_rc 69619 0
hifb 78599 0
hi3516a_vou 186651 4 hifb
hi3516a_vpss 301509 6
hi3516a_viu 240306 7 hi3516a_vpss
hi3516a_isp 75942 9 sensor_i2c,hi3516a_vpss,hi3516a_viu
hi3516a_vgs 161509 0
hi3516a_region 69025 0
hi3516a_tde 155453 2 hifb,hi3516a_region
hi3516a_sys 39531 5 hi3516a_vpss,hi3516a_viu
hi3516a_base 58535 26 hi3516a_adec,hi3516a_aenc,hi3516a_ao,hi3516a_ai,hi3516a_aio,acodec,hi3516a_ive,hi3516a_vda,hi3516a_jpege,hi3516a_h265e,hi3516a_h264e,hi3516a_chnl,hi3516a_venc,hi3516a_rc,hifb,hi3516a_vou,hi3516a_vpss,hi3516a_viu,hi3516a_isp,hi3516a_vgs,hi3516a_region,hi3516a_tde,hi3516a_sys
hi_media 5877 33 hi_mipi,acodec,pwm,hifb,hi3516a_tde,hi3516a_base
mmz 22567 7 hi3516a_aenc,hi3516a_ao,hi3516a_jpege,hi3516a_h265e,hi3516a_h264e,hi3516a_tde,hi3516a_base
至此,整个3516a的业务初始化工作就已经基本完成了,如果后续需要进行扩展,可以直接在这几个脚本中进行配置修改。
- 分享
- 举报
-
浏览量:3806次2020-08-11 10:29:05
-
浏览量:4142次2020-08-14 11:25:29
-
浏览量:4839次2020-08-11 10:32:41
-
浏览量:5253次2020-08-11 10:30:44
-
浏览量:2874次2022-11-02 13:51:26
-
浏览量:1032次2024-01-19 17:52:40
-
浏览量:748次2024-01-11 15:05:58
-
浏览量:759次2024-02-23 16:58:46
-
浏览量:7279次2018-06-14 23:13:10
-
2018-04-04 14:06:53
-
浏览量:4316次2018-03-31 20:59:15
-
浏览量:6442次2018-06-14 22:53:53
-
2018-06-18 22:47:22
-
浏览量:9472次2018-06-02 19:08:30
-
浏览量:2683次2020-07-28 17:54:29
-
浏览量:962次2023-05-16 14:05:36
-
浏览量:18200次2022-09-30 16:51:48
-
浏览量:9473次2022-10-12 09:28:15
-
浏览量:4960次2022-09-30 16:40:59
-
浏览量:2685次2017-12-02 22:05:15
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
在学了在学了!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明