作者最近在学习UBOOT移植,每天学习7个多小时,就把我自己学到的东西和大家分享分享。
今天就给大家分析mkconfig文件。这个一句一句的分析。

第
11-13行就是普通的变量初始化,赋值。
第11行的APPEND赋值no,后面判断赋值为yes是否成立(这个不管)
第12行BOARD_NAME等于空(开发板名字)
第13行的TARGETS变量在最后没有使用到的(我的4412开发板中)
第15行 输出 CoreBoard is $7......(我的几个参数分别为itop_4412_android arm arm_cortexa9 smdkc210 samsung s5pc210 SCP_1GDDR)
第17行开始判断,$7的值和定义的值是否相等。
显然我执行的是18行
给BOARD_NAME赋值,并且输出CoreBoard OS is android or linux......

第30行,这里要注意一点了$#是传入的参数总数,我的是七个,分析可知执行while循环。进入之后之后匹配$1和其他参数
可知32-35行的都不匹配(
提示一下:在shell中 *号为万能匹配符),只有第36号匹配。之后执行break语句,跳出while循环。

第
40行,之前我们的board_name已经赋值为itop_4412_android就不执行这行。
40行的作用就是判断BOARD_NAME是否不为空,不为空的话就跳过,为空的话就可给BOARD_NAME赋值$1
42行和43行就是把输入的参数和4还有7比较,如果输入参数小于4或者大于7的话就退出。
现在有个疑问这些输入参数从哪里来的呢?
打开主Makefile文件:

第534行就是我的输入参数
把它展开

可得MKCONFIG就是根目录下面的mkconfig
$(@:_config=) 的意思是:将itop_4412_android_scp_1GDDR中的_configs替换为空
第45-48行如果ARCH不为空并且ARCH不等于$2的话就退出,显然在主Makefile 中,我们导出了

ARCH ,它的值就等于arm.就不执行这句
第50行输出板子信息。

第54行到84行就是在创建链接文件咯,这个有个好处,分析完我会提到的。
SRCTREE=
OBJTREE=
这两个在主Makefile中可以找到

这里又补充一下了。
$(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
这个的含义,当第一个参数代表的目录不为空时,就把第二个参数的值给OBJTREE
如果第一个参数为空的话,就把第三个参数的值给OBJTREE.

显然在我的主Makefile中,OBJTERR和SRCTREE是相等的。
所以直接执行第68行,注意了这里

进入的目录一定要注意到哈,这是细节,必须要注意细节。进入了include目录。
删除 asm目录,然后进行符号链接,为asm-arm 创建一个符号链接asm ,可知asm 是指向asm-arm的。
我们来看看include文件就知道了。

上面的结果显示创建了一个符号链接。
然后,第81行,有创建了另一个符号链接。
显然$2是等于arm的

第83行的意思是,创建的符号链接asm-arm目录下面的proc目录指向proc-armv
我们在看看符号链接

我们在看看,结果的确如此。
给大家总结一下符号链接的作用:
1: 硬链接是同一文件的不同访问路径,其对应的索引节点号是一样的,删除文件其实就是删除其中的一个硬链接,如果该文件对应的硬链接都被删除了该文件才被删除,常用于保护文件;
2: 符号链接类似于Windows中对应的快捷方式,删除符号链接不影响源文件,删除源文件,则对应的符号链接也没有意义;
参考这篇博客,自己动手编写就懂了。
https://blog.csdn.net/u013777351/article/details/50557260

第89行 ,注意下,> 这个符号是创建文件,意识就是ARCH = arm 写入到config.mk中
>>两个箭头就是追加内容到文件末尾。
93行$5肯定不为空,之后执行echo 将VENDOR的值写入文件
95行同理也是讲SOC的值写入文件。
那么现在我们来看看文件的内容吧。(这个文件在哪里呢?)
这里注意下哈。翻一下上面的内容,之前不是cd ./include目录下了吗?哈哈,所以一定要注意细节,一定要仔细,你一旦仔细了。你将来做开发肯定比别人更容易上手的嘛。
所以我们就到include 目录下面去找config.mk

之后打开看一下

不就是我们写进去的内容吗?哈哈。
迅为移植时修改的是spc210开发板的内容。
下次我给大家带来一个教程,就是移植Samsung4212
第98行$5肯定不为0,所以就执行else ,可以看到else的内容

BOARDDIR就是板子目录就是 samsung/smdkc210

然后是添加核心板的名字:不是SCP 就是 POP这个应该是开发板商自己弄上去的。
这里的关键点就是在于创建的那几个软连接(下期从uboot官网下载uboot移植的时候我会讲的)

接下来的127行就是用到开头的第一参数了:APPEND,如果忘了,请看前面。
前面赋值为NO,所以执行else ,创建config.h文件。(有些人可能找半天都没有找到这个文件。在哪里呢?注意细节哈。cd ./include这个目录下面。)
然后在这个文件里面追加 这些内容 /* Automatically generated - do not edit */
来到第142行,$7不为空,所以将#define CONFIG_$7 写入到 config.h中
最后144 到149号,这里有个语法。

cat << EOF >>文件名
xxx
xxx
xxx
EOF
往文件中写入三行xxx ,然后遇到EOF结束。
OK,那么往文件里面就写入了下面这些。

现在我么来看看config.h中是不是有这些内容呢?

肯定是有的。
今天就到这里,明天继续更新。加油 Spark wang!!