zoukankan      html  css  js  c++  java
  • u-boot 移植 --->1、u-boot配置(Kbuild)

          早期的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

  • 相关阅读:
    INSERT VALUES 语句
    SQL Server UNION
    SQL Server自定义函数(Scalarvalued Functions)
    设计一程序(Copy.java),可以实现文件的复制操作
    Eclipse 乱码 解决方案总结(UTF8 GBK)
    Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
    [Linux内核]从开机加电到main函数执行前的过程
    eclipse设置本地Javadoc API路径
    归并排序的递归和非递归实现(C代码)
    解决安装MySQL5.1出现Cannot create windows service for mysql.error:0
  • 原文地址:https://www.cnblogs.com/w-smile/p/13060946.html
Copyright © 2011-2022 走看看