Hi3518e 当中的 load3518e 脚本分析

Posted 想文艺一点的程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hi3518e 当中的 load3518e 脚本分析相关的知识,希望对你有一定的参考价值。

load3518e shell 脚本当中的大概布局

注意:
1、shell 当中的函数只有在调用的时候采用执行,定义的时候并不会执行,所以我们直接向下分析找到,不是函数的部分。
2、要查找一些对应的语法细节:参考学习


1、变量定义:

(1)这些变量都是有默认值的、同时我们可以通过 bash 当中传入的值,来对这些系统变量进行修改。

####################Variables Definition##########################
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
  • sensortype:(可以查看对应的 insert_sns 函数,看看 hi3518e的 sdk 支持哪几种 sensor
  • 定义 memory 的大小,因为其内置 ddr 是 64M ,OS占用 32M,海思的 MPP 平台占用 32M。

2、分析参数解析:

假如我们传入的参数如下:

./load3518e  -i  -sensor ar0130  -osmem 32 -total 64
更换为:
./load3518e  -i  -sensor ov9712  -osmem 32 -total 64
保存之后,重新启动

脚本当中的定义:

  • b_arg_os_mem:这些是一些临时的变量,用来存放传入参数的标志位

  • for arg in $@ :这一句很重要:做了两件事:
    (1)$@:将传入的参数,一个一个拿进来,参数都是以空格为分界。(第一个为 -i、第二个为 -sensor)
    (2)定义了一个 arg 的变量,将 $@ 拿进来的参数,赋值给了 arg。
    (3)一直循环,直到参数传递完毕.

  • 分析执行上面的语句,这里会发生什么现象?
    (1)-i:b_arg_insmod=1
    (2)-sensor:b_arg_sensor=1
    (3)ar0130:因为此时 b_arg_sensor=1 ,所以会进入 if 语句,b_arg_sensor=0SNS_TYPE=$arg;从而修改了变量 SNS_TYPE 的值,并且下一次也不会进入 if 语句。
    (4)-osmem :同理,依次类推。

b_arg_os_mem=0
b_arg_total_mem=0
b_arg_sensor=0
b_arg_insmod=0
b_arg_remove=0
b_arg_online=1
b_arg_restore=0

for arg in $@
do
	if [ $b_arg_total_mem -eq 1 ]; then
		b_arg_total_mem=0;
		mem_total=$arg;
		
		if [ -z $mem_total ]; then
			echo "[error] mem_total is null"
			exit;
		fi
	fi
	
	if [ $b_arg_os_mem -eq 1 ] ; then
		b_arg_os_mem=0;
		os_mem_size=$arg;

		if [ -z $os_mem_size ]; then
			echo "[error] os_mem_size is null"
			exit;
		fi
	fi

	if [ $b_arg_sensor -eq 1 ] ; then
		b_arg_sensor=0
		SNS_TYPE=$arg;
	fi

	case $arg in
		"-i")
			b_arg_insmod=1;
			;;
		"-r")
			b_arg_remove=1;
			;;
		"-a")			
			b_arg_insmod=1;
			b_arg_remove=1;
			;;
		"-h")
			load_usage;
			;;
		"-sensor")
			b_arg_sensor=1;
			;;
		"-osmem")
			b_arg_os_mem=1;
			;;
		"-total")
			b_arg_total_mem=1;
			;;
		"-restore")
			b_arg_restore=1;
			;;
		"-offline")
			b_arg_online=0;
			;;
	esac
done

3、分析 action

脚本当中的定义:

if [ $# -lt 1 ]; then
    load_usage;
    exit 0;
fi

if [ $b_arg_remove -eq 1 ]; then
	remove_ko;
fi

if [ $b_arg_insmod -eq 1 ]; then
	insert_ko;
fi

if [ $b_arg_restore -eq 1 ]; then	
	sys_restore;
fi

(1)分析第一个 if

  • $# :代表传入参数的个数。
  • -lt:less then检测左边的数是否小于右边的,如果是,则返回 true。
  • 即,如果传入的参数小于一个,则执行 load_usage 函数,并且 exit 0; 退出脚本。

(2)分析第三个if:

  • b_arg_remove=0, 所以它不会执行对应的语句

(3)分析第三个if:

  • 因为我们传入了 -i 参数,所以会让 b_arg_insmod=1,所以会执行对应的挂载函数。

以上是关于Hi3518e 当中的 load3518e 脚本分析的主要内容,如果未能解决你的问题,请参考以下文章

Hi3518E开发OSD(转)

海思Hi3518A 海思Hi3518C 海思Hi3518E 这几个芯片都有什么区别么

HI3518E平台ISP调试环境搭建

给Hi3518e的Uboot添加UDP广播收发功能

视频编解码行业及发展方向简述

用HiTool烧写uboot到spi flash的原理