• 编译linux的设备树


    使用make dtbs命令时

    在arch/arm  的目录Makefile文件中有

    boot := arch/arm/boot

    prepare 和scripts是空的

    在文件scripts/Kbuild.include中

    变量build := -f $(srctree)/scripts/Makefile.build obj

    build变量虽然没有在arch/arm  的目录Makefile文件中定义,但是,在使用该变量前,已经在上一个文件中定义(还是不太理解这里的关系)

    在顶层Makefile中

    $(srctree):=. 

    展开后-f  ./scripts/Makefile.build  obj:=arch/arm/boot/dts

    通过下面的命令包含传入的$(obj)目录下的Makefile

    其中$(src)=$(obj);

    # The filename Kbuild has precedence over Makefile
    kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))

            ->kbuild-dir:=./arch/arm/boot/dts
    kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)

            ->kbuild-file:=./arch/arm/boot/dts/Makefile
    include $(kbuild-file)

            ->include  ./arch/arm/boot/dts/Makefile作用是将该Makefile的所有内容全部拷贝到当前位置。

    -f  的作用是使用make 命令编译由-f 指定的Makefile文件(scripts/Makefile.build)

    在该文件中使用默认目标__build,

    展开后使用

    __build: $(builtin-target) $(lib-target) $(extra-y)) $(subdir-ym) $(always)
    @:
     

    其中 $(always)在arch/arm/boot/dts/Makefile中

    always      := $(dtb-y)

    $(dtb-y)就是我们要编译的目标.dtb。

    至此,流程为

    Make dtbs  ->

            make   -f  ./scripts/Makefile.build  obj:=arch/arm/boot/dts

                    ->__build: $(builtin-target) $(lib-target) $(extra-y)) $(subdir-ym) $(always)

                    ->include $(kbuild-file)

                                    ->always      := $(dtb-y)

    dtbs 依赖$(dtb-y)

  • 相关阅读:
    【小程序】中WXS的语法详解
    setTimeout() 和 setIntervale() 小结
    C++_串口编程_官方示例:监视通信事件
    Python学习:自动生成Mysql建表语句
    IPV4和IPV6,公网IP和私有IP有什么区别?
    数据处理包括哪些内容
    虚拟机扩容
    Air780E-CSDK编译教程
    开源远程桌面软件_RustDesk_(可自建远程桌面服务器)
    python中字符替换的方法
  • 原文地址:https://blog.csdn.net/m0_54797575/article/details/133826862