这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » Zephyr系统开发还用手动添加文件?自动编译不会还有人不知道吧?

共1条 1/1 1 跳转至

Zephyr系统开发还用手动添加文件?自动编译不会还有人不知道吧?

高工
2023-08-20 11:05:17     打赏

Zephyr系统开发还用手动添加文件?自动编译不会还有人不知道吧?

Zephyr系统开发主要有三个关键组成:cmake、Kconfig、devicetree。我们下面依次进行一下讲解。

CMake

工程项目文件的组织通常通过makefile的文件来组织,而makefile是需要程序员手动编写。每次添加新的文件,新的头文件,新的第三方库文件后都需要手动编写参数,比如文件的路径,文件名等。容易出错,效率还很低下,关键,还是纯手动。由于CMake这个辅助生成makefile文件的软件也就诞生了。Zephyr也继承了CMake的优势,使用CMake软件工具来管理工程文件,程序员仅需要编写简单的CMakeLists.txt文件即可以生成后期make编译工具使用的makefile文件了。不过,zephyr系统主推的并不是make,而是一个叫ninja的编译工具。

Kconfig

平台的区分以及代码的裁剪,应用开发中主要体现在驱动的开关,如下图显示,在驱动的实现里面定义了wifi的kconfig宏,用户在使用的时候可以在prj.config文件去打开这个宏,这个驱动就会被打开。

可以文本也可以图形化裁剪Zephyr系统的各个组件,各个功能的开与关。

其实吧,我就觉得只是把Linux内核构建过程给搬过来了。没有什么新颖的地方。

多说一句,其分为板级的kconfig,应用级别的kconfig。后者的优先级最高,当两者不同的时候,以应用级的kconfig配置定义为准。倒是也不难理解,板级的可能别的项目也在使用,你自己的项目更改你自己的配置即可。

config LD_LINKER_SCRIPT_SUPPORTED
         bool
         default y
 
choice LINKER_SCRIPT
         prompt "Linker script"
         default LD_LINKER_TEMPLATE if LD_LINKER_SCRIPT_SUPPORTED
 
config LD_LINKER_TEMPLATE
         bool "LD template"
         depends on LD_LINKER_SCRIPT_SUPPORTED
         help
           Select this option to use the LD linker script templates.
           The templates are pre-processed by the C pre-processor to create the
           final LD linker script.DeviceTree

配置硬件参数信息,比如像前面WIFI的模块,可以配置SPI引脚以及速率,还可以配置跟他相关的同步引脚。

/*
 * Copyright (c) 2019, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */
 
/dts-v1/;
 
#include <nxp/nxp_lpc55S6x.dtsi>
#include "lpcxpresso55s69.dtsi"
#include <zephyr/dt-bindings/pwm/pwm.h>
 
/ {
         model = "NXP LPCXpresso55S69 board";
         compatible = "nxp,lpc55xxx", "nxp,lpc";
 
         cpus {
                   /delete-node/ cpu@1;
         };
 
         aliases{
                   sw0 = &user_button_1;
                   sw1 = &user_button_2;
                   sw2 = &user_button_3;
                   watchdog0 = &wwdt0;
                   /* For pwm test suites */
                   pwm-0 = &sc_timer;
                   pwm-led0 = &red_pwm_led;
                   red-pwm-led = &red_pwm_led;
                   sdhc0 = &sdhc0;
                   accel0 = &mma8652fc;
                   sdhc0 = &sdif;
         };
 
         chosen {
                   zephyr,sram = &sram0;
                   zephyr,flash = &flash0;
                   zephyr,code-partition = &slot0_partition;
                   zephyr,code-cpu1-partition = &slot1_partition;
                   zephyr,sram-cpu1-partition = &sram3;
                   zephyr,console = &flexcomm0;
                   zephyr,shell-uart = &flexcomm0;
                   zephyr,entropy = &rng;
         };
 
         gpio_keys {
                   compatible = "gpio-keys";
                   user_button_1: button_0 {
                            label = "User SW1";
                            gpios = <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
                   };
                   user_button_2: button_1 {
                            label = "User SW2";
                            gpios = <&gpio1 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
                   };
                   user_button_3: button_2 {
                            label = "User SW3";
                            gpios = <&gpio1 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
                   };
         };
 
         pwmleds {
                   compatible = "pwm-leds";
                   red_pwm_led: red_pwm_led {
                            pwms = <&sc_timer 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
                            label = "Red PWM LED";
                            status = "okay";
                   };
         };
};





关键词: Zephyr     系统     编译    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]