• 编译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)

  • 相关阅读:
    CSS宽度100%和宽度100vw之间有什么不同?
    Golang 开发实战day03 - Arrays & Slices
    常见的安全测试漏洞
    基于Web的盾构机盾尾变形远程监测系统
    单例模式与反射创建对象
    Rasa 3.x 学习系列-Rasa X 社区版(免费版) 更改
    内存空间的分配与回收之连续分配管理方式
    微信小程序保存照片到本地
    共享存储知识
    SpringBoot中的Environment
  • 原文地址:https://blog.csdn.net/m0_54797575/article/details/133826862