TQ210——S5PV210 uboot顶层mkconfig分析

#################################################################################################
# SHELL常用内部参数:  
# $# —— 传递给程序的总的参数数目
# $? —— 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
# $* —— 传递给程序的所有参数组成的字符串。
# $n —— 表示第几个参数,$1 表示第一个参数,$2 表示第二个参数 ... 
# $0 —— 当前程序的名称
# $@ —— 以"参数1" "参数2" ... 形式保存所有参数
# $$ —— 本程序的(进程ID号)PID
# $! —— 上一个命令的PID 
# 下面对$?多做些说明,当补充shell知识吧
# 切记:$?永远表示shell命令最后一次执行后的退出状态,当函数执行完毕后,如果又执行了其它命
# 令,则$?不再表示函数执行后的状态,而表示其它命令的退出状态.
#-a  表示(and)两个条件同时成立
# -eq 表示两数值相等
# -gt 表示n1大于n2,即前面大于后面
# -lt 表示n1小于n2,即前面小于后面
# "\("  "\)"是对圆括号的转义,转成普通圆括号"()"来包裹条件表达式
# if[...]中的表达式意思为:如果传递给mkconfig的参数个数($#)等于2个并且第1个变量为
# "-A"($1),则执行出错提示.那么$0,$1,$2,...是什么呢?我们看Makefile中是怎么执行make TQ210_config这个伪目标的.
###########################################################################
# 指定解释器,使用-e相当于 #! /bin/bash
#!/bin/sh -e# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
#
############################################################################
# 默认创建一个新的配置文件
# 执行make TQ210_config的时候打印输出单板名TQ210
APPEND=no	# Default: Create new config file
BOARD_NAME=""	# Name to print in make output# SHELL的一些内部参数最开始有描述,以后不再多说!
############################################################################
# 执行make TQ210_config的时候,这个过程会调用uboot根目录下的mkconfig文件,
# 会有6个参数传入,如下
#   $0	       $1	    $2	  $3	 $4	      $5	   $6	 $# 
# mkconfig	 TQ210	   arm	s5pv210	TQ210	samsung	s5pv210	 6
#         BOARD_NAME   ARCH	  CPU	BOARD	 VENDOR	  SOC	
# $# -gt 0表示$#不为0时执行,显然这里不会执行。
# shift的作用是使$1=$2,$2=$3,$3=$4….,而原来的$1将丢失。因此while循环的作用是,
# 依次处理传递给mkconfig脚本的选项(--,-a,-n,-t,*)。由于我们并没有传递给mkconfig任何的选
# 项,因此while循环中的代码不起作用。
while [ $# -gt 0 ] ; docase "$1" in--) shift ; break ;;-a) shift ; APPEND=yes ;;-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;*)  break ;;esac
done###########################################################################
# 如果BOARD_NAME为空则什么都不做;否则赋值为$1,即TQ210
# 此句赋值BOARD_NAME = TQ210
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
###########################################################################
# 检查如果传进来的变量个数,如果小于4个则退出,若大于6个也要退出
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1###########################################################################
# shell中打印出“Configuring for TQ210 board...”
echo "Configuring for ${BOARD_NAME} board..."#
# Create link to architecture specific headers
#
###########################################################################
# 如果源码顶层目录(SRCTREE)和存放编译生成文件的目录(OBJTREE)不同就在
# 存放编译生成文件的目录(OBJTREE)建立两个文件include和include2
# 进入include2目录,删除asm文件夹
# 建立一个软连接asm,链接指向 ${SRCTREE}/include/asm-arm
# 然后到当前目录的上层目录进入include文件夹
# 删除asm-arm和asm文件夹
# 在当前目录创建asm-arm文件夹,建立软连接asm指向asm-arm
if [ "$SRCTREE" != "$OBJTREE" ] ; thenmkdir -p ${OBJTREE}/includemkdir -p ${OBJTREE}/include2cd ${OBJTREE}/include2rm -f asmln -s ${SRCTREE}/include/asm-$2 asmLNPREFIX="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asm
###########################################################################
# 如果源码顶层目录(SRCTREE)和存放编译生成文件的目录(OBJTREE)相同,
# 进入include目录,删除asm目录,建立一个软连接asm指向当前目录的asm-arm
# 
elsecd ./includerm -f asmln -s asm-$2 asm
fi###########################################################################
# 删除asm-arm/arch,建立软连接实际上是对链接的目标进行操作,
rm -f asm-$2/arch###########################################################################
#
if [ -z "$6" -o "$6" = "NULL" ] ; thenln -s ${LNPREFIX}arch-$3 asm-$2/arch
elseln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi# create link for s3c24xx SoC
if [ "$3" = "s3c24xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s3c64xx SoC
if [ "$3" = "s3c64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pc1xx SoC
if [ "$3" = "s5pc1xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pc11x SoC
if [ "$3" = "s5pc11x" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5pv210 SoC
########################################################
# TQ210使用的是s5pv210,所以会执行这段代码
# 删除regs.h文件,
# 创建链接文件regs.h指向s5pv210.h
# 删除asm-arm/arch,
# 创建软连接asm-arm/arch指向arch-s5pv210
if [ "$3" = "s5pv210" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5p64xx SoC
if [ "$3" = "s5p64xx" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi# create link for s5p644x SoC
if [ "$3" = "s5p644x" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi###########################################################################
# 如果架构是arm架构,则删除当前目录(此时当前目录是U-boot源码顶层目录/include)下的
# asm-arm/proc目录建立软链接ln -s proc-armv asm-arm/proc
if [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc
fi# create link for s3c64xx-mp SoC
if [ "$3" = "s3c64xx-mp" ] ; thenrm -f regs.hln -s $6.h regs.hrm -f asm-$2/archln -s arch-$3 asm-$2/arch
fi#
# Create include file for Make
#
###########################################################################
# 生成make的头文件config.mk
# ARCH=arm,CPU=s5pv210,BOARD=TQ210,加入到config.h中
# > config.mk是强行覆盖创建config.mk然后把数据导入config.mk中
# VENDOR=samsung,SOC=s5pv210加入到config.mk
echo "ARCH   = $2" >  config.mk
echo "CPU    = $3" >> config.mk
echo "BOARD  = $4" >> config.mk[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk#
# Create board specific header file
#
###################################################################
# 创建指定的配置头文件,默认APPEND=no(本文件开头有赋值)
# 执行else,创建新的config.h文件
if [ "$APPEND" = "yes" ]	# Append to existing config file
thenecho >> config.h
else> config.h		# Create new config file
fi
###################################################################
# 在config中会显示/* Automatically generated - do not edit */
# #include <configs/TQ210.h>加入到config.h中
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h# 返回成功状态
exit 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频系统底层API

IAudioEndpointVolume IAudioEndpointVolume接口表示进出音频端点设备的音频流的音量控制。 客户端通过调用参数iid设置为REFIID IID_IAudioEndpointVolume的IMMDevice :: Activate方法获取对端点设备的IAudioEndpointVolume接口的引用。 IAudioEndpointVolume编程调节Win7/Wi…

早睡早起

这两天考虑着以前工作的一些问题。有一点非常需要改正。就是作息时间不规律。经常睡的很晚。把前两年锻炼身体的老本吃的差不多了。该是“存钱”的时候了。新的工作依旧很繁忙&#xff0c;事情很多&#xff0c;但是身体调整绝对不能放松的。所以还是决定从明天开始早起&#xf…

树莓派Pico的一些有趣的基本实验

▲ 实验电路板Raspberry PI Pico小型MCU模块&#xff0c;以其价格低廉&#xff0c;功能丰富&#xff0c;开发方便为很多非电子类专业的同学进行创意项目原型设计提供了方便的平台。下面的一些实验给CDIE课程设计同学们制作的一些基本演示实验。▌01 PI Pico实验板在 RASPBERRY …

Gabor变换

gabor变换分析非平稳信号有弊端主要是时频窗宽度固定 小波wavelet a小窗窄a大窗宽 窗口或短时傅氏变换在时域上和频域上的局部化程度主要由窗函数g(x)的有效时宽Δt 和有效带宽Δf 决定。Δt 和Δf 越小, 表明局部性越好。但Heisenberg 测不准原理指出[ 6] :Δt 和Δf 不可能任…

30块钱的树莓派跑unix系统,源码全部开源,香

▌ 1、前言之前做活动抽奖送的几个树莓派&#xff0c;但是因为好几个人都没有填写地址&#xff0c;所以就只能把东西寄回来给我&#xff0c;然后手痒自己玩了下&#xff0c;觉得这个东西确实很香&#xff0c;比一般的Linux开发板都好。PICO这个开发板可以玩很多东西1 、运行pic…

CoInitialize\CoCreateGuid\CoCreateInstance

CoInitialize是Windows提供的API函数&#xff0c;用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数&#xff08;除CoGetMalloc和内存分配函数&#xff09;之前必须初始化com库。 https://baike.baidu.com/item/CoInitialize/4114580?fraladdin CoCreateGui…

产品设计体会(8001)产品经理工作手册

产品经理的工作是最具挑战性的工作之一。产品经理职责描述产品经理的全部责任在于通过了解不断变化的市场需求和优化产品推向目标市场的全过程&#xff0c;将企业的不同组成部分凝聚成一个战略上一致集中的整体&#xff0c;同时将一项产品的价值最大化。产品经理的全部职责在于…

Oracle11gR2_ADG管理之恢复主库的truncate表实战

备库开启flashback database #关闭备库的同步 SQL> alter database recover managed standby database cancel;Database altered.SQL> select flashback_on from v$database;FLASHBACK_ON ------------------ NOSQL> alter database flashback on;Database altered.SQ…

为什么大家都只谈薪资,却不谈梦想?

说个薪资的问题&#xff0c;最近在帮一个朋友物色工作&#xff0c;当然&#xff0c;除了我那个朋友以外&#xff0c;也有挺多同学向我咨询offer薪资的问题。先说我那个朋友。高中毕业后去当兵&#xff0c;服兵役结束后去4s店修车&#xff0c;我车子的很多问题也会向他咨询&…

获取指定地址的值

C语言 —— 获取指定地址的值 int b *((volatile unsigned int *)0x0028FF1C);// 0x0028FF1C就是内存中的地址&#xff0c;根据自己需要指定 #include <stdio.h> #include <stdlib.h>int main() {int b *((volatile unsigned int *)0x0028FF1C);printf("b…

IAudioEndpointVolume

IAudioEndpointVolume https://docs.microsoft.com/en-us/windows/desktop/api/endpointvolume/nf-endpointvolume-iaudioendpointvolume-setmute

DataTable.Compute功能

DataTable.Compute具有这么多的功能 1&#xff1a;聚合函数”Sum()” 2&#xff1a;自由计算表达式“20*301” 3&#xff1a;bool表达式“12” 4&#xff1a;IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull&#xff0c;Trim&#xff0c;SubString等 一个小应用&#…

Linux下查看内存使用情况方法总结

Linux下查看内存使用情况方法总结转载于:https://www.cnblogs.com/cdyboke/p/8689270.html

差生的 8 年程序员总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff0c;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记…

关闭windows垃圾服务

Windows集成了许多功能和服务&#xff0c;所以在很多领域得以应用&#xff1b;但是有很多服务是我们个人用户所用不到的&#xff0c;开启只会浪费内存和资源&#xff0c;并且成为***和病毒***的靶子&#xff0c;而且&#xff0c;还影响启动速度和运行速度。关掉大部分没用的服务…

Python简单的抓取静态网页内容

import requests from bs4 import BeautifulSoup res requests.get(http://news.sina.com.cn/china/)#获取目标网页 res.encoding utf-8#抓取网页出现乱码 #print(res.text) soup BeautifulSoup(res.text,html.parser)#爬取网页 for news in soup.select(.news-item): if le…

SystemTray.cpp

SystemTray.cpp _tcscpy _tcscpy 把参2复制到参1并返回参1 _tcscpy是一个拷贝字符串&#xff0c;源字符串指针是strSource&#xff0c;有strcpy、wcscpy、_mbscpy三种类型&#xff0c;这三种形式都返回目标字符串。 函数原型 char *strcpy( char *strDestination, const cha…

直观感受电路信号波形:半波整流电路

前言电子电路的理论很抽象&#xff0c;所以多看电子电路的信号波形&#xff0c;对掌握理论知识非常有帮助。让我们通过形象的电路信号波形&#xff0c;直观地了解电路的世界&#xff01;半波整流电路半波整流电路&#xff0c;电路图很简单&#xff0c;通过一个二极管实现半波整…

【nodejs】安装browser-sync 遇到错误提示

首先我用的是mac电脑在我执行安装browser-sync时遇到如下问题&#xff1a; 因为不被允许所以我只能不安装全局了&#xff1a; 但是又出现了如下的新问题 纠结了半个小时&#xff0c;终于知道为什么会出现这个问题了&#xff0c; node只有--global or -g才是全局安装的包&#x…