UBOOT与系统移植之mkconfig详解

2019-07-12 23:32发布

作者最近在学习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!!