前言

uboot和kernel的头文件包含比一般的程序更复杂,将头文件的路径用链接来表示,这样的用意是为了程序的可移植性。uboot是高度可移植的,不同的配置和编译指令可以编译出不同Soc和开发板的程序,其中源码是没有改动的。不同的编译配置指令就是将链接指向不同的目录,将适配的同名头文件或者同功能的配置文件包含进去,从而编译出不同平台的uboot程序。用链接来包含头文件的做法也是有缺点的,不能直观的知道当前包含头文件的路径,因为路径是用链接符号来表示的,而我们并不能一眼看出链接指向何处,要分析脚本才知道。

start.S中的头文件包含

//start.S中包含的头文件
#include <config.h>
#include <version.h>
#if defined(CONFIG_ENABLE_MMU)
#include <asm/proc/domain.h>
#endif
#include <regs.h>

头文件包含解析

头文件的包含格式上并无特殊,但是按照头文件的路径却找不到该头文件。比如#include <asm/proc/domain.h>,你在原生目录里是找不到include/asm/proc目录的,因为asm和proc都不是目录,而是链接符号,在编译的时候链接符号对指向相应的目录,从而将指定目录下的domain.h包含进去。链接符号是在配置阶段创建的,我手里的uboot是在顶层的mkconfig中建立的链接。

链接的生成

 #在顶层的mkconfig文件中摘抄,其中$2=armif [ "$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 asmelsecd ./includerm -f asmln -s asm-$2 asm #生成include/asm链接符号指向include/asm-armfiif [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s ${LNPREFIX}proc-armv asm-$2/proc #创建asm-arm/proc链接符号指向proc-armvfi

解析:asm和proc链接符号都是在上面的配置脚本里生成的,用if语句判断链接指向何处。配置指令不同链接符号指向的目录就不同,从而达到可移植的目的。
拓展:如果你看到代码里引用了某个文件,但是你却找不到该目录,可能就是因为引用该文件的路径是用链接符号来指定的,需要去分析配置文件才能知道引用的是哪个路径下的文件。

嵌入式开发(S5PV210)——u-boot的头文件包含问题相关推荐

  1. C语言之预处理探究(三):头文件包含

    相关博文:C语言之预处理探究(四):#.##和预定义宏 相关博文:C语言之预处理探究(二):条件编译(Condition Compile) 相关博文:C语言之预处理探究(一):宏 参考博文:C语言的头 ...

  2. C语言中头文件包含的处理原则

    很多事不深入以为自己懂了,但真正用到项目上,才发现了问题.曾以为自己写C语言已经轻车熟路了,特别是对软件文件的工程管理上,因为心里对自己的代码编写风格还是有自信的.(毕竟刚毕业时老大对我最初的训练就是 ...

  3. 【C/C++】头文件包含之#include的2种用法区别

    在C/C++工程中,常会碰到头文件包含的使用,#include <>和#include " "两者之间的区别,简而言之如下: 1. #include <> ...

  4. C++编程中的头文件包含问题

    一,最好在一个头文件中将系统中所有的头文件包含进来,然后在每个头文件中将这个文件引用进来.如在vs环境下就是stdfax.h文件. 二,在每个头文件中用 #ifndef XXXX #define XX ...

  5. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件...

    当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...

  6. c语言头文件包含嵌套问题和包含原则

    a.h #include<stdio.h> #ifndef _A_H #define _A_H 只是解决头文件重复包含的问题的,但是头文件嵌套包含,就不代表不会出问题,就会关系错综复杂,出 ...

  7. DSP篇--C6701 BOOT(头文件烧写法)

    目录 1.简介 2.具体步骤 2.1编写应用程序工程 2.2生成头文件 2.2.1分析.dat和.h文件 2.2.2头文件生成器软件设计和开发 2.3加载flash烧写程序完成烧写过程 1.简介 这是 ...

  8. 头文件包含【预处理】(58)

    包含的意义 包含的方式 方式<> 方式" " 多文件编程 多文件编程意义 多文件编程的前提 多文件包含实例 定义头文件 谁用谁包含 自包含 避免头文件重复包含 包含的意 ...

  9. vscode 头文件包含问题_WSL+VSCode = Linux ?

    官方文档​code.visualstudio.com 使用VSCode新推出的Remote功能来连接WSL或服务器进行开发. 可以在Windows上享受优秀的界面体验的同时使用Linux环境进行开发( ...

最新文章

  1. Linux内核版本 uname命令 GNU项目 Linux发行版
  2. IDA Pro ARM指令集和Thumb指令集的切换
  3. 美团支付平台产品规划
  4. java中json重复数据结构_JAVA把各种数据结构转换为JSON格式
  5. java_IO总结(一)
  6. PyQt5学习笔记03----Qt Designer生成源码
  7. 用RDLC报表(一)
  8. Go语言学习Day02
  9. 数据库日志系统之删库跑路后的亡羊补牢
  10. xml里写sql语句大于、小于的正确方法
  11. C#编程基础(简单概述与理解)
  12. rbf神经网络 c语言,RBF神经网络极简介绍及其算法R语言实现
  13. 手游服务器常用架构图
  14. 淘宝商品历史价格接口/商品历史价走势接口对接代码分享
  15. oracle18c shard技术分享-安装部署
  16. 图片生成二维码最好的工具
  17. ED1 SoC Linux环境搭建
  18. 《状态变量分析导论》学习总结
  19. NBMA网络中的OSPF实验(MGRE)
  20. P1972 [SDOI2009] HH的项链

热门文章

  1. 大话西游2服务器维护公告,大话西游2经典版:2019年05月09日停机维护公告
  2. 小猫咪关闭远程解析功能
  3. Python实现用户输入国家名称,打印出所输入的国家名称和首都。
  4. 【面试题】HTML篇(一)
  5. IDEA2020 安装教程,图文教程
  6. 网校系统搭建服务有哪些优势?为什么要试水网校系统开发?
  7. Calendar类、System类、StringBuilder类、包装类
  8. 3个表单设计的最佳技巧
  9. java套接字创建失败_Linux的文件描述符个数限制导致创建文件(或socket)失败的问题...
  10. 用Python+Moviepy+OpenCV制作灯光秀短视频