[openharmony]liteos-a全局配置文件生成原理

2021-10-13  本文已影响0人  itsenlin

添加模块并通过LOSCFG_xxx来控制编译

openharmony中liteos-a编译时,是依赖于kconfig生成的系统全局配置文件。所以如果想在liteos-a中增加一个新的模块、sensor驱动等,要增加一个LOSCFG_xxx全局控制时,
需要通过以下方法修改多个文件

.config文件

在liteos中存放全局配置文件的地方在vendor/hisilicon/hispark_taurus/kernel_configs/目录下,根据build_type区分为debug的和release的
例如需要增加一个ACCL sensor,就可以在这里面的.config文件中增加LOSCFG_DRIVERS_HDF_SENSOR_ACCL=y

Kconfig文件

在模块的Kconfig文件中增加如下内容

config DRIVERS_HDF_SENSOR_ACCEL
    bool "Enable HDF accel sensor driver"
    default n
    depends on DRIVERS_HDF_SENSOR
    help
      Answer Y to enable HDF accel sensor driver.

注意:不增加Kconfig的话,此配置是无效的

Makefile和BUILD.gn

然后在Mkaefile和BUILD.gn中使用此变量来控制对应模块代码的编译了,如下
Makefile

ifeq ($(LOSCFG_DRIVERS_HDF_SENSOR_ACCEL), y)
LOCAL_SRCS += $(FRAMEWORKS_SENSOR_ROOT)/accel/sensor_accel_driver.c \
              $(FRAMEWORKS_SENSOR_ROOT)/chipset/accel/accel_bmi160.c
endif

BUILD.gn

  if (defined(LOSCFG_DRIVERS_HDF_SENSOR_ACCEL)) {
    sources += [ "$FRAMEWORKS_SENSOR_ROOT/accel/sensor_accel_driver.c" ]
  }

原理

  1. 从编译结果看,全局配置文件会生成在out/hispark_taurus/ipcamera_hispark_taurus/config.h

  2. 执行源码看config.h是怎么生成的,会搜索到在kernel/liteos_a/BUILD.gn里面有下面一段内容

    exec_script("//build/lite/run_shell_cmd.py",
             [ "env" + " CONFIG_=LOSCFG_" + " KCONFIG_CONFIG_HEADER='y=true'" +
                   " KCONFIG_CONFIG=$liteos_config_file" +
                   " DEVICE_PATH=$device_path" + " srctree=" + rebase_path(".") +
                   " genconfig" + " --header-path $LITEOS_MENUCONFIG_H" +
                   " --file-list kconfig_files.txt" +
                   " --env-list kconfig_env.txt" + " --config-out config.gni" ],
             "",
             [ liteos_config_file ])
    

    通过代码不难看出,是调用的genconfig命令,并传入一些env,以及--header-path--file-list--env-list--config-out参数完成的。可以在编译环境中使用genconfig -h来查看此命令的用法。
    大概的含义就是:通过$liteos_config_file(对应的就是vendor下面那个.config文件),经过kconfig配置,生成$LITEOS_MENUCONFIG_H(就是out目录下的config.h)、kconfig_files.txtkconfig_env.txtconfig.gni这四个文件,然后编译时就会使用config.h、config.gni来控制哪些模块参与编译

  3. 在查看genconfig命令实现时发现这是个python脚本,里面内容很简单,如下

     root@b94e1c14a573:/home/openharmony# which genconfig
     /usr/local/bin/genconfig
     root@b94e1c14a573:/home/openharmony# cat /usr/local/bin/genconfig
     #!/usr/bin/python3
     # -*- coding: utf-8 -*-
     import re
     import sys
     from genconfig import main
     if __name__ == '__main__':
         sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
         sys.exit(main())
     root@b94e1c14a573:/home/openharmony#
    

    里面最主要的还是from genconfig import main这句,最终调用的就是这个main接口,成这里的这个genconfig是python的包路径里面的一个python文件(kconfiglib包下的一个py脚本),如下

    root@b94e1c14a573:/home/openharmony# ll /usr/local/lib/python3.8/dist-packages/
    total 524
    drwxrwsr-x  1 root staff   4096 Oct 13 07:33 ./
    drwxrwsr-x  1 root staff   4096 Jun 21 09:42 ../
    -rw-r--r--  1 root staff    607 Jun 21 09:45 alldefconfig.py
    -rw-r--r--  1 root staff   1222 Jun 21 09:45 allmodconfig.py
    -rw-r--r--  1 root staff   1218 Jun 21 09:45 allnoconfig.py
    -rw-r--r--  1 root staff   1686 Jun 21 09:45 allyesconfig.py
    drwxr-sr-x 13 root staff   4096 Jun 21 09:45 Crypto/
    -rw-r--r--  1 root staff   1152 Jun 21 09:45 defconfig.py
    drwxr-sr-x  3 root staff   4096 Jun 21 09:45 ecdsa/
    drwxr-sr-x  2 root staff   4096 Jun 21 09:45 ecdsa-0.17.0.dist-info/
    -rw-r--r--  1 root staff   5326 Oct 13 07:31 genconfig.py
    -rw-r--r--  1 root staff  73636 Jun 21 09:45 guiconfig.py
    drwxr-sr-x  2 root staff   4096 Jun 21 09:45 kconfiglib-14.1.0.dist-info/
    -rw-r--r--  1 root staff 259748 Jun 21 09:45 kconfiglib.py
    -rw-r--r--  1 root staff   2619 Jun 21 09:45 listnewconfig.py
    -rw-r--r--  1 root staff 104222 Jun 21 09:45 menuconfig.py
    -rw-r--r--  1 root staff   8080 Jun 21 09:45 oldconfig.py
    -rw-r--r--  1 root staff    761 Jun 21 09:45 olddefconfig.py
    drwxr-sr-x  1 root staff   4096 Oct 13 07:31 __pycache__/
    drwxr-sr-x  2 root staff   4096 Jun 21 09:45 pycryptodome-3.10.1.dist-info/
    -rw-r--r--  1 root staff   1333 Jun 21 09:45 savedefconfig.py
    -rw-r--r--  1 root staff   2664 Jun 21 09:45 setconfig.py
    root@b94e1c14a573:/home/openharmony#
    
上一篇下一篇

猜你喜欢

热点阅读