hi3516a——内核启动后的初始化文件load3516a详解

本文详细解析了hi3516a内核启动后rcS文件中调用的load3516a,介绍了MMZ的概念以及在海思平台上的内存分区,并探讨了load3516a、pinmux_hi3516a.sh、clkcfg_hi3516a.sh和sysctl_hi3516a.sh等初始化文件的作用。
摘要由CSDN通过智能技术生成

前言

在hi3516a内核启动后的rcS文件中有一句调用:
./load3516a -i -sensor bt1120 -osmem 128 -offline
本文将对load3516a进行解析。

无私分享,从我做起!如有错误,还请指出!

MMZ

Media Memory Zone
在解析load3516a前,需要了解一下mmz的知识,后面会有分配MMZ大小的参数。
如图所示,在海思平台上将内存分为两个部分:os内存和mmz内存。os内存指:由linux操作系统管理的内存;mmz内存:由mmz驱动模块进行管理供媒体业务单独使用的内存,在驱动加载时可以指定该模块管理内存的大小:

insmod mmz.ko mmz=anonymous,0,0x4fa00000,6Manony=1 || report_error

在这里插入图片描述
该驱动主要由两个文件组成:media-mem.c和mmz-userdev.c,加载驱动后相应的设备文件:/dev/mmz_userdev,应用层通过打开该设备文件进行ioctl(申请mmz内存、释放mmz内存、重映射mmz内存到内核等)和直接mmap操作,而媒体底层驱动模块则直接调用mmz驱动的导出接口进行相应操作。

load3516a文件

#!/bin/sh
# Useage: ./load3516a [ -r|-i|-a ] [ sensor ]
#         -r : rmmod all modules
#         -i : insmod all modules
#    default : rmmod all moules and then insmod them
#


# imx178 mn34220 imx185 ar0330 ov4689 ov5658 ar0230 imx117 ar0237



####################Variables Definition##########################


SNS_TYPE=mn34220        # sensor type

mem_total=512;          # 512M, total mem
mem_start=0x80000000;   # phy mem start

os_mem_size=64;         # 64M, os mem
mmz_start=0x84000000;   # mmz start addr
mmz_size=128M;          # 128M, mmz size

//0x84000000-0x80000000=0x04000000,即64M;
//实际调用传入的参数是-osmem 128,故最终mmz_start=0x88000000
##################################################################

report_error()
{
	echo "******* Error: There's something wrong, please check! *****"
	exit 1
}

//加载音频所需的模块
insert_audio()
{
	insmod acodec.ko
	#insmod hidmac.ko
	insmod hi3516a_aio.ko
	insmod hi3516a_ai.ko
	insmod hi3516a_ao.ko
	insmod hi3516a_aenc.ko
	insmod hi3516a_adec.ko
	#insmod extdrv/tlv_320aic31.ko
	#insmod extdrv/ak7756.ko 
	echo "insert audio"
}

// 卸载音频部分的模块
remove_audio()
{
	#rmmod tlv_320aic31.ko
	#rmmod ak7756.ko
	rmmod hi3516a_adec
	rmmod hi3516a_aenc
	rmmod hi3516a_ao
	rmmod hi3516a_ai
	rmmod hi3516a_aio
	rmmod acodec
	echo "remove audio"
}

//加载传感器类型对应的模块,根据传感器类型来配置传感器对接的管脚
insert_sns()
{
	case $SNS_TYPE in
		ar0130|9m034)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
			;;
		mt9p006)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda

			himm 0x2003002c 0xE0007             # sensor unreset, clk 24MHz, VI 250MHz
			;;
		imx136)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1;                # spi0_csn
			;;			
		imx123)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1;                # spi0_csn

			#himm 0x2003002c 0xb0007            # sensor unreset, clk 27MHz, VI 250MHz
			himm 0x2003002c 0x90007             # sensor unreset, clk 37.125MHz, VI 250MHz
			himm 0x20030104 0x0;                # VI 250MHz
			insmod extdrv/sensor_spi.ko
			;;			
		imx178)
			himm 0x200f0050 0x2;                # i2c0_scl
			himm 0x200f0054 0x2;                # i2c0_sda
			himm 0x2003002c 0xF0007             # sensor unreset, clk 25MHz, VI 250MHz
			#himm 0x2003002c 0x90007            # sensor unreset, clk 37.125MHz, VI 250MHz
			;;
		imx185)
			himm 0x200f0050 0x1;                # spi0_sclk
			himm 0x200f0054 0x1;                # spi0_sdo
			himm 0x200f0058 0x1;                # spi0_sdi
			himm 0x200f005c 0x1; 
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值