I.MX6 U-Boot mkconfig hacking
/****************************************************************************
* I.MX6 U-Boot mkconfig hacking
* 声明:
* 本文主要是为了知道U-Boot中的mkconfig是如何工作的,是如何将配置
* 中的内容进行汇总,同时又将这些内容放在了什么地方。
*
* 2015-12-19 深圳 南山区平山村 曾剑锋
***************************************************************************/ \\\\\\\\\-*- 目录 -*-//////////
| 一、参考文档:
| 二、Makefile
| 三、mkconfig
| 四、include/config.h
| 五、include/config.mk
------------------------------ 一、参考文档:
. $(@:_config=)什么意思?
http://blog.csdn.net/zbffff/article/details/18991145
. U-BOOT Makefile注释
http://wenku.baidu.com/view/ff14f319227916888486d7cb.html
. makefile中的@
http://www.cnblogs.com/lihaiping/archive/2013/03/20/makefile.html
. Makefile中常用的函数
http://linux.chinaunix.net/techdoc/develop/2009/07/09/1122854.shtml
. U-Boot移植(二)——U-Boot编译过程分析()
http://blog.csdn.net/wafx1314/article/details/11260041
. 请教linux make make clean make all 的具体用法
http://zhidao.baidu.com/question/129692720.html 二、Makefile
......
SRCTREE := $(CURDIR)
......
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
......
mx6solo_sabresd_config \
mx6solo_sabresd_mfg_config \
mx6solo_sabresd_android_config \
mx6dl_sabresd_config \
mx6dl_sabresd_mfg_config \
mx6dl_sabresd_android_config \
mx6q_sabresd_config \
mx6q_sabresd_android_config \
mx6q_sabresd_mfg_config \
mx6q_sabresd_iram_config : unconfig
@[ -z "$(findstring iram_,$@)" ] || \
{ echo "TEXT_BASE = 0x00907000" >$(obj)board/freescale/mx6q_sabresd/config.tmp ; \
echo "... with iram configuration" ; \
}
@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 mx6q_sabresd freescale mx6
...... 三、mkconfig
#!/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) - DENX Software Engineering, Wolfgang Denk <wd@denx.de>
# APPEND=no # Default: Create new config file
# 开发板的名字
BOARD_NAME="" # Name to print in make output # 使用while循环和case进行命令行参数提取,很不错的处理方式
while [ $# -gt ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;; # %%去除$1字符串中的_config
*) break ;;
esac
done # 如果上面的命令行参数都没有,那么$1就是开发板的名字
[ "${BOARD_NAME}" ] || BOARD_NAME="$1" # 参数个数小于4个或者大于6个,直接退出,比较奇怪的是,为什么不放在前面进行判断呢
[ $# -lt ] && exit
[ $# -gt ] && exit # 显示提示信息
echo "Configuring for ${BOARD_NAME} board..." #
# Create link to architecture specific headers
#
# 如果编译出来的目录和源代码目录不一样,那么执行以下内容
if [ "$SRCTREE" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include # 创建include目录
mkdir -p ${OBJTREE}/include2 # 创建include2目录
cd ${OBJTREE}/include2 # 进入include2目录
rm -f asm # 防止asm已经存在
ln -s ${SRCTREE}/include/asm-$ asm # 重新软链接到固定的位置$(arm)平台
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$
rm -f asm
mkdir asm-$
ln -s asm-$ asm
else
cd ./include
rm -f asm
ln -s asm-$ asm # $=arm
fi # 删除include/asm-arm/arch这个软链接
rm -f asm-$/arch # $6等于mx6
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$ asm-$/arch
else
ln -s ${LNPREFIX}arch-$ asm-$/arch
fi if [ "$2" = "arm" ] ; then
rm -f asm-$/proc
ln -s ${LNPREFIX}proc-armv asm-$/proc
fi #
# Create include file for Make
#
echo "ARCH = $2" > config.mk # $=arm
echo "CPU = $3" >> config.mk # $=arm_cortexa8
echo "BOARD = $4" >> config.mk # $=mx6q_sabresd # $=freescale
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk # $=mx6
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk #
# Create board specific header file
# APPEND=no
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
# 原来我们可以在在这个文件里查看config文件
echo "/* Automatically generated - do not edit */" >>config.h
# $=mx6dl_sabresd_android
echo "#include <configs/$1.h>" >>config.h
echo "#include <asm/config.h>" >>config.h exit 四、include/config.h
/* Automatically generated - do not edit */
#include <configs/mx6dl_sabresd_android.h>
#include <asm/config.h> 五、include/config.mk
ARCH = arm
CPU = arm_cortexa8
BOARD = mx6q_sabresd
VENDOR = freescale
SOC = mx6 六、总结:
从上面的情况可知,如果要在board目录下新建一个开发板<board_name>目录,则在include/configs目录下也要建立一个对应的<board_name>文件,里面存放的就是开发板<board_name>的配置信息。这里目前没有验证。
I.MX6 U-Boot mkconfig hacking的更多相关文章
- I.MX6 U-boot lvds display hacking
/*********************************************************************************** * I.MX6 U-boot ...
- I.MX6 Power off register hacking
/*********************************************************************** * I.MX6 Power off register ...
- I.MX6 android BatteryService jni hacking
/**************************************************************************** * I.MX6 android Batter ...
- I.MX6 Ar8031 device register hacking
/***************************************************************************** * I.MX6 Ar8031 device ...
- I.MX6 PWM buzzer driver hacking with Demo test
/***************************************************************************** * I.MX6 PWM buzzer dr ...
- I.MX6 change boot partition 1 to User area
/************************************************************************************ * I.MX6 change ...
- I.MX6 天嵌 E9 U-boot menu hacking
/************************************************************************************ * I.MX6 天嵌 E9 ...
- I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking
/******************************************************************** * I.MX6 mfgtool2-android-mx6q- ...
- I.MX6 gpio-keys driver hacking
/**************************************************************************** * I.MX6 gpio-keys driv ...
随机推荐
- RabbitMQ延迟队列
rabbitmq延迟队列 rabbitmq实现延迟队列用了rabbitmq-delayed-message-exchange插件,需要提前安装,并启用. 原理 其原理是通过Exchange来实现延迟功 ...
- Servlet3.0与Spring
servlet filter listener web.xml DispatcherServlet web.xml 后期 servlet3.0我们去除web.xml 通过注解方式 同时需要s ...
- 【bzoj1369】[Baltic2003]Gem(树形dp+结论)
题目传送门:bzoj1369 这题其实有个结论:节点数为n的树,对其染色使相邻节点颜色不同,且总颜色权值最小,所需的颜色数量是$ O(\log n) $的. 所以我们就可以愉快的dp了:$ f[i][ ...
- 关于ckeditor 之 上传功能
度了很多文章,看了很多关于ckeditor配置上传功能的文章,没一个写得清楚的, 就是简单的根目录下.config.js 增加 config.filebrowserUploadUrl="/a ...
- MySQL索引最左原则
通过实例理解单列索引.多列索引以及最左前缀原则 实例:现在我们想查出满足以下条件的用户id: 因为我们不想扫描整表,故考虑用索引. 单列索引: ALTER TABLE people ADD INDEX ...
- 关于Java中常用加密/解密方法的实现
安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...
- 【三小时学会Kubernetes!(三) 】Service实践
服务Service Kubernetes 服务资源可以作为一组提供相同服务的 Pod 的入口.这个资源肩负发现服务和平衡 Pod 之间负荷的重任,如图 16 所示. 图16:Kubernetes 服务 ...
- JavaScript权威指南--类型、值和变量
本章要点图 数据类型:计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type ...
- python脚本10_打印斐波那契数列的第101项
#打印斐波那契数列的第101项 a = 1 b = 1 for count in range(99): a,b = b,a+b else: print(b) 方法2: #打印斐波那契数列的第101项 ...
- ASP.NET Core and .NET Core Library Support
ASP.NET Core and .NET Core Library Support 详情参见:https://github.com/linezero/NETCoreLibrary/blob/mast ...