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,所以会执行对应的挂载函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想文艺一点的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值