23.1.29 make menuconfig执行过程

时间:2023-01-30 22:18:45

23.1.29 make menuconfig执行过程

1、将uboot源码拷贝ubuntu中

1.在家目录创建一 -个demo文件夹

2.将en. SOURCES - stm32mp1- openstlinux-5.10- dunfell- mp1-21- 11-17_ tar_ v3.1.0. xz文件夹拷贝到~/ demo文件夹下面

3.进入~/demo目录下,对en . SOURCES- stm32mp1 - openstlinux-5. 10- dunfell-mp1- 21 -11-17_ tar_ v3.1.0.xz解压

4.在家目录创建一 个FSMP1A文件夹

5.将uboot源码拷贝到FSMP1A目录下

cp u-boot- stm32mp- v2020.10- stm32mp-r2-r0/ ~/FSMP1A/ -rf

2、分析uboot源码

1.进入/home/linux/FSMP1A/u- boot - stm32mp-v2020.10- stm32mp-r2-r0目录下,对uboot源码进行解压

tar -vxf u- boot-stm32mp-v2020.10- stm32mp-r2-r0. tar.gz

2.进入uboot源码目录下

cd u- boot-stm32mp-v2020.10- stm32mp-r2/

3.分析uboot源码目录

1>平台相关代码

arch:存放平台架构相关的文件

board :存放板子相关的文件

2>平台无关代码

Makefile:工程管理文件

include :存放板子相关的头文件信息

drivers :存放就是各个驱动相关文件

dts:设备树相关文件

Kconfig:配置相关文件

1>基于图形化界面配置信息----- >make menuconfig

menuconfig    一使用基于菜单的程序更新当前配置  

2>编译uboot源码命令----->make all

all    一根据配置构建所有必需的映像

通过以上内容分析可知,对于不同的板子默认的配置命令: make <board_ name>_ defconfig

3、如何确定<board_ name>名字!

一、方式1:如何确定<board_name>?

    1.在uboot源码顶层目录下执行:make fsmp1a_defconfig

    2.出现如下错误信息:

        ***

        *** Can't find default configuration "arch/../configs/fsmp1a_defconfig"!

        ***

        make[1]: *** [scripts/kconfig/Makefile:110:fsmp1a_defconfig] 错误 1

        make: *** [Makefile:565:fsmp1a_defconfig] 错误 2

     3.通过分析错误打印信息,可知<<board_name>配置信息路径

         路径:arch/../configs/*_defconfig

     4.进入到uboot源码顶层目录下arch/../configs/目录下,查看stm32mp15系列相关配置文件

     5.通过查看目录下文件过滤可知:

         stm32mp15_basic_defconfig: 非安全版本默认缺省配置文件

         stm32mp15_trusted_defconfig:安全版本默认缺省配置文件   

            

二、方式2:因为make make <board_name>_defconfig,使用make进行编译的,一定通过Makefile文件进行管理         

      1.在uboot源码顶层目录,打开Makefile文件,搜索:config,查找到如下打印信息

            564 %config: scripts_basic outputmakefile FORCE                                                                  

            565     $(Q)$(MAKE) $(build)=scripts/kconfig $@

      2.打开uboot源码顶层目录Makefile文件,使用echo打印每个变量的信息

             564 %config: scripts_basic outputmakefile FORCE

             565     @echo $(Q)

             566     @echo $(MAKE)

             567     @echo $(build)

             568     @echo $@

             569     $(Q)$(MAKE) $(build)=scripts/kconfig $@

     3.在uboot源码顶层目录下,执行make fsmp1a_defconfig,会打印相应的变量信息

        @

        make

        -f ./scripts/Makefile.build obj

        fsmp1a_defconfig

        

       Can't find default configuration "arch/../configs/fsmp1a_defconfig"!

三、方式3:通过方式2分析可知$(Q)就是@符,@会取消回显,所以在Makefile文档中,将$(Q)变量去掉

     1.在uboot源码顶层目录,打开Makefile文件,搜索:config,去掉$(Q)

            564 %config: scripts_basic outputmakefile FORCE

            565     @echo $(Q)

            566     @echo $(MAKE)

            567     @echo $(build)

            568     @echo $@                                                                                                 

            569     $(MAKE) $(build)=scripts/kconfig $@

    2.在uboot源码顶层目录下,执行make fsmp1a_defconfig,会打印相应的变量信息

        make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig = make obj=scripts/kconfig fsmp1a_defconfig

    3.在uboot源码顶层目录下,进入scripts/kconfig目录,打开Makefile文件,搜索defconfig

            109 %_defconfig: $(obj)/conf                                                                                      

            110     $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

    4.在uboot源码顶层目录下,进入scripts/kconfig目录,打开Makefile文件,使用echo打印变量信息

        109 %_defconfig: $(obj)/conf

        110     @echo $<

        111     @echo $(silent)

        112     @echo $(SRCARCH)

        113     @echo $@

        114     @echo $(Kconfig)                                                                                          

        115     $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

    5.在uboot源码顶层目录下,执行make fsmp1a_defconfig,会打印相应的变量信息

            scripts/kconfig/conf

        

        ..

        fsmp1a_defconfig

        Kconfig

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

    6.通过以上分析可知,make <board_name>_defconfig执行的完成语句内容:

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

      分析:

      scripts/kconfig/conf:通过file命令进行查看,可知conf文件是一个elf可执行文件

      --defconfig=arch/../configs/fsmp1a_defconfig:板子的默认的缺省配置文件

      Kconfig:uboot源码顶层目录下的配置文件

      整体分析:conf作为可执行参数,板子的默认的缺省配置文件和uboot源码顶层目录下的配置文件传递给conf            

    任务:自己分析scripts/kconfig/Makefile文件?

        目的:make <board_name>_defconfig执行过程?        

 23.1.29 make menuconfig执行过程

 二、uboot源码配置编译步骤

1.进入~/FSMP1A/uboot源码目录下

    cd /home/linux/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0/u-boot-stm32mp-v2020.10-stm32mp-r2

2.配置交叉编译工具链,打开uboot源码顶层目录下Makefile文件,搜索:CROSS_COMPILE

    将以下内容:

        262 ifeq ($(HOSTARCH),$(ARCH)) 

        263 CROSS_COMPILE ?=   

    更改为:

        262 ifeq (arm,arm) 

        263 CROSS_COMPILE ?=arm-linux-gnueabihf-

3.在uboot源码顶层目录下,执行默认配置板子的缺省配置文件,为非安全版本配置

    make  stm32mp15_basic_defconfig

    成功现象:

        # 

        # configuration written to .config 

        # 

4.在uboot源码顶层目录下,执行make menuconfig,这个地方不需要修改

5.设备树相关内容

    dts ---------------->设备树源文件,相当于C语言中的.c文件

    dtsi ---------------->设备树头文件,相当于C语言中的.h文件

    DTC  ---------------->设备树编译工具,相当于C语言中的gcc编译器 make dtbs

    dtb ---------------->设备树下载文件,相当于C语言中的a.out文件

    设备树语法格式:

        /{

            {

               设备树节点信息             

            };                    

        };

6.由于FSMP1A开发板是参考DK1公板进行设计的,所以需要复制DK1公板相关设备树内容

    1)进入设备树目录:uboot源码顶层目录下uboot源码目录下/arch/arm/dts,查找到DK1公板设备树文件

        stm32mp157a-dk1.dts

        stm32mp157a-dk1-u-boot.dtsi

        stm32mp15xx-dkx.dtsi

    2)进入uboot源码目录下/arch/arm/dts,将DK1公板相关设备树内容,复制成FSMP1A文件

        cp stm32mp157a-dk1.dts stm32mp157a-fsmp1a.dts  

        cp stm32mp157a-dk1-u-boot.dtsi stm32mp157a-fsmp1a-u-boot.dtsi

        cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi

   3)更改FSMP1A设备树相关内容

       将如下内容:

         12 #include "stm32mp15xx-dkx.dtsi"                                                                                

         13

         14 / { 

         15     model = "STMicroelectronics STM32MP157A-DK1 Discovery Board"; 

         16     compatible = "st,stm32mp157a-dk1", "st,stm32mp157"; 

       更改为:

        12 #include "stm32mp15xx-fsmp1x.dtsi" 

        13

        14 / { 

        15     model = "HQYJ STM32MP157A-FSMP1A Discovery Board"; 

        16     compatible = "hqyj,stm32mp157a-fsmp1a", "hqyj,stm32mp157";    

     4) 将FSMP1A开发板相关设备树文件,编译到uboot镜像文件中,打 uboot源码目录下/arch/arm/dts目录下的Makefile文件  

        945 dtb-$(CONFIG_STM32MP15x) += \

        946     stm32mp157a-dk1.dtb \

        947     stm32mp157a-fsmp1a.dtb \   -------> 这一行为需要添加内容

7.进入uboot源码顶层目录下,编译uboot源码

    time make -j4 all      

8.成功现象:

    u-boot-spl.stm32

    u-boot.img                     

 23.1.29 make menuconfig执行过程confi

defconfig 寻找board_name  找到Makefile的位置然后删除回显

make menuconfig界面化处理配置,把开发名字作出更改以及重新运行

make  all   执行镜像文件查看是否配置成功

23.1.29 make menuconfig执行过程