Zephyr下为特定Board添加驱动

Creative Commons
本作品采用知识共享署名

本文说明如何在不污染Zephyer driver目录的情况下为特定的Board添加driver。

概述

Zephyr添加nrf52_moderate一文中说明nrf52_moderate Board脱离出zephyr主目录,达到不污染Zephyr Boards目录的目的。如果nrf52_moderate Board有特定的外围需要驱动,增加的驱动也可以不进入zephyr的driver目录。本文通过增加nrf52_moderate led驱动说明如何增加driver而不污染zephyr driver目录。

修改

新增代码目录和代码

新增的led驱动源代码将其放入nrf52_moderate的board目录中,由于该board不在zephyr的主目录内,自然driver也就分离出来了

1
2
3
mkdir -p ~/work/project/nrf52_moderate/boards/arm/nrf52_moderate/src/driver
cd mkdir -p ~/work/project/nrf52_moderate/boards/arm/nrf52_moderate/src/driver
vim led.c

之后再led.c中添加驱动代码即可

增加cmake

1
2
mkdir -p ~/work/project/nrf52_moderate/boards/arm/nrf52_moderate/
vim CMakeLists.txt

修改CMakeLists.txt,添加的驱动能够放入驱动库

1
2
3
4
5
FILE(GLOB drv_sources src/driver/*.c)

zephyr_library()
zephyr_library_sources(${drv_sources})
zephyr_library_include_directories(${ZEPHYR_BASE}/drivers)

增加驱动配置项

修改~/work/project/nrf52_moderate/boards/arm/nrf52_moderate/Kconfig,增加下面内容

1
2
3
4
5
6
config MOTHER_BOARD_LED
bool
prompt "nrf52 moderate mother board led"
default n
help
If disabled, the mother board no support led drv

修改source code,~/work/project/nrf52_moderate/boards/arm/nrf52_moderate/src/driver/led.c 让其接受配置项控制编译

1
2
3
4
5
6
7
8
/*
led.c
*/
#ifdef CONFIG_MOTHER_BOARD_LED

//led driver all source code

#endif

配置和使用

按照前面的配置nrf52_moderate board默认是不开启led驱动的,配置开启有两种方法:

1. app的prj.conf

在~/work/project/nrf52_moderate/apps/basetest/prj.conf中增加

1
CONFIG_MOTHER_BOARD_LED=y

2. menuconfig

在~/work/project/nrf52_moderate/apps/basetest/build/下执行make/ninja前执行

1
make menuconfig

在Board Options内配置即可,如下图:
mm