IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Hi3518e 当中的 load3518e 脚本分析 -> 正文阅读

[游戏开发]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,所以会执行对应的挂载函数。
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:56:59  更:2021-10-16 19:58:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:29:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码