早期的U-BOOT的裁剪是没有使用Kbuild工具的,后来就借鉴了Linux的Kbuild同时也是方便使用者裁剪,因为他的原理和Linux内核的配置裁剪原理是相同的。今天拿来分析的U-Boot的版本是u-boot-2017.11,主要原因是我电脑上的gcc版本编译不了更新的版本,但是不影响拿来学习。U-boot开始编译之前需要先执行make xxxdefconfig 进行U-boot 的配置裁剪,之后才能进行编译Kbuild就是在第一步中发挥主要作用的。本次使用的默认文件为三星s5p_goni_defconfig。

运行

通过执行make V=1 s5p_goni_defconfig 会发现其实他就是生成了一个conf可执行文件,通过再次make V=1 s5p_goni_defconfig就可以看到顶层makefile具体执行了什么指令

make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig s5p_goni_defconfig
scripts/kconfig/conf --defconfig=arch/../configs/s5p_goni_defconfig Kconfig

因为文件都是最新的所以实际执行了命令但是什么都没有运行,主要是最后一条命令运行了前编译生成的conf文件并把默认文件作为输入最后就会生成.config文件在u-boot的根目录下,这个文件的内容就是所有的配置信息,Kbuild的工作到这里基本就算完了,其实后面还需要生成config.h文件,最后被代码引用从而进行条件编译。因为make是在u-boot目录下开始运行的,所以

scripts/kconfig/conf  --defconfig=arch/../configs/s5p_goni_defconfig Kconfig

命令中的Kconfig就是根目录下的Kconfig文件如下

Kconfig

第13和最后部分有如下节选代码

# Allow defaults in arch-specific code to override any given here
source "arch/Kconfig" menu "General setup" 。


source "api/Kconfig" source "common/Kconfig" source "cmd/Kconfig" source "disk/Kconfig" source "dts/Kconfig" source "env/Kconfig" source "net/Kconfig" source "drivers/Kconfig" source "fs/Kconfig" source "lib/Kconfig" source "test/Kconfig"

kbuid中source就如同C语言中的头文件引用,本引用的文件会直接放到当前文件的当前位置,同样这些文件中都还会引用其他的Kconfig文件最终的包含关系如下。

就那这次的板子为例,他是三星的s5pc1xx的芯片的所以,他是由"arch/arm/mach-s5pc1xx/Kconfig"文件包含的,主要理一下一下层级关系就是arch-->arm--->chip-->board,而其他的会有些板子是直接由arm目录下的Kconfig包含板级配置文件的,不过这样对于功能是没有影响的,因为Kbuild的配置过程就是按上面的层级关系进行推导,内层或同层文件可以修改之前的配置值,所以Kbuild实际上是对上面两种方式都能识别的。

所以如果现在是要进行移植U-boot,分两种情况一个是芯片本身U-boot已经有支持过的其他的平台,比如mach-s5pc1xx的SOC,则只需要在u-boot目录下的board文件夹下的samsung文件下增加新的board的文件夹并实现相关的内容后(一般是拷贝后修改),最后修改"arch/arm/mach-s5pc1xx/Kconfig"的如下增加

if ARCH_S5PC1XX

choice
prompt "S5PC1XX board select"
optional config TARGET_S5P_GONI
bool "S5P Goni board"
select OF_CONTROL config TARGET_SMDKC100
bool "Support smdkc100 board"
select OF_CONTROL endchoice config SYS_SOC
default "s5pc1xx" source "board/samsung/goni/Kconfig"
source "board/samsung/smdkc100/Kconfig"
source "board/samsung/newxxx/Kconfig"

endif

然后依次在configs目录下增加对应板子的的xxxdefconfig文件,在include/configs/下增肌新板子的.h文件,也可以拷贝借鉴的板子的进行修改,最后就是注意.h文件的命令和板级文件中的Kconfig中的config SYS_CONFIG_NAME配置选项保持相同。如果是一个全新的处理器除了arch/cpu目录下的文件和配置项可以使用外,其他的就全得自己实现,这个我自己试着增加了一个芯片,发现需要注意的时需要修改 "arch/arm/Kconfig"文件添加增加的新SOC如有必要可能需要修改SOC对应架构(ARM_V7)目录下的makefile文件,以增加将新增加的内容进行编译。可以参考:https://blog.csdn.net/qq_16777851/article/details/81543373#comments;Kbuild的语法比较易懂关键字也比较少具体的语法参考网上或者Linux源码的Documention目录下的详细说明,这里只记录了比较少见的属性

imply <symbol> [if <expr>]
弱反向依赖:当前配置项被选中时,选中symbol,但是symbol仍然可由依赖或者手动配置为n。

具体详细可以参考这一片博客:https://blog.csdn.net/liao20081228/article/details/81286729

u-boot 移植 --->1、u-boot配置(Kbuild)的更多相关文章

  1. Spring Boot应用的后台运行配置

    酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: 运行Spring Boot的应用主类 使用Mave ...

  2. Spring boot 的 properties 属性值配置 application.properties 与 自定义properties

    配置属性值application.properties 文件直接配置: com.ieen.super.name="MDD" 自定义properties文件配置:src/main/r ...

  3. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  4. JAR(Spring Boot)应用的后台运行配置

    酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: 运行Spring Boot的应用主类 使用Mave ...

  5. Spring Boot应用的后台运行配置(转载)

    作者:程序猿DD 酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: 运行Spring Boot的应用 ...

  6. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  7. [转]Spring Boot应用的后台运行配置

    转自:http://blog.didispace.com/spring-boot-run-backend/ 酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式.在介绍后台运行配置之前, ...

  8. Spring Boot(15)——自动配置Validation

    自动配置Validation当应用中的Classpath下存在javax.validation的实现时,Spring Boot的org.springframework.boot.autoconfigu ...

  9. (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    Spring Boot 系列博客] 更多查看博客:http://412887952-qq-com.iteye.com/blog Spring Boot默认的数据源是:org.apache.tomcat ...

  10. Spring boot运行原理-自定义自动配置类

    在前面SpringBoot的文章中介绍了SpringBoot的基本配置,今天我们将给大家讲一讲SpringBoot的运行原理,然后根据原理我们自定义一个starter pom. 本章对于后续继续学习S ...

随机推荐

  1. CentOS对接GlusterFS

    存储节点部署示例环境,仅供参考 主机名 IP 系统 gfs01 10.10.10.13 CentOS 7.4.1708 gfs02 10.10.10.14 CentOS 7.4.1708 一.Glus ...

  2. 针对Fluent-Bit采集容器日志的补充

    hello,之前我写过<一套标准的ASP.NET Core容器化应用日志收集分析方案>,在公司团队.微信公众号.Github上反映良好. 其中配置Fluent-bit使用Forward协议 ...

  3. Redis 底层数据结构设计

    10万+QPS 真的只是因为单线程和基于内存?_Howinfun的博客-CSDN博客_qps面试题 https://blog.csdn.net/Howinfun/article/details/105 ...

  4. 游标 深度分页 deep paging

    Solr Deep Paging(solr 深分页) - ickes的专栏 - CSDN博客 https://blog.csdn.net/xl_ickes/article/details/427725 ...

  5. 目前 c++ primer学习总结笔记

    C++的开始 1 main的返回值:0为成功状态,非0为系统定义的错误类型 2 输入输出:计算结果为左侧运算对象,IO操作读写缓冲与程序中的动作无关 3 输入流istream对象:cin(标准输入): ...

  6. vue-router实现路由懒加载( 动态加载路由 )

    三种方式第一种:vue异步组件技术 ==== 异步加载,vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件.第二种:路由懒加载 ...

  7. ECMAScript6常用新特性总结

    一.let声明变量 1.基本用法: ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 如下代码: { let a = 10; var ...

  8. windows.open、 window.location.href

    windows.open("URL","窗口名称","窗口外观设定");打开新窗口,window对象的方法 不一定打开新窗口,只要有窗口的名 ...

  9. 九:SpringBoot-整合Mybatis框架,集成分页助手插件

    九:SpringBoot-整合Mybatis框架,集成分页助手插件 1.Mybatis框架 1.1 mybatis特点 1.2 适用场景 2.SpringBoot整合MyBatis 2.1 核心依赖 ...

  10. Centos7 安装RabbitMQ 3.6.1

    如果你看过前两章对RabbitMQ已经有了一定了解,现在已经摩拳擦掌,来吧动手吧! 用什么系统 本文使用的是Centos7,为了保证对linux不太熟悉的伙伴也能轻松上手(避免折在安装的路上),下面是 ...