在高通lk中添加自定义源文件
背景
在lk开发中,需要添加一个自定义功能,但是又不希望代码污染无关的文件(把无关代码添加到某个源文件中是一种罪)。
以添加一个aw9523b.c
的驱动为例,在aboot.c
中调用aw9523b.c
中的有关接口。
步骤
创建目录与文件
先看看目录结构
$ pwd
.. /bootable/bootloader/lk
$ ls
AndroidBoot.mk app arch dev include kernel lib LICENSE make makefile platform project scripts target
由于aw9523b
是一个驱动,一般来说,在dev
下面创建文件,头文件都放在include
中是比较规范的。同时,我们还需要一个rules.mk
。
## 创建目录
$ mkdir dev/leds/aw9523b -p
## 创建 文件
$ touch dev/leds/aw9523b/aw9523b.c
$ touch dev/leds/aw9523b/rules.mk
$ touch include/dev/aw9523b.h
实现代码
假设现在已经完成了aw9523b.c
的编写,并且打算对外提供aw9523b_config
这个接口。
aw9523b.c
路径:dev/leds/aw9523b/aw9523b.c
#include <arch/arm.h>
#include <platform/gpio.h>
#include <platform/timer.h>
#include <string.h>
#include <stdlib.h>
#include <i2c_qup.h>
#include <blsp_qup.h>
// 引用头文件
#include <dev/aw9523b.h>
// ...
#define API
API void aw9523b_config(void)
{
aw9523b_i2c1_init();
aw9523b_reset();
aw9523b_read_chipid();
aw9523b_led_feature_init();
aw9523b_light_yellow_led_invert();
}
aw9523b.h
路径:include/dev/aw9523b.h
#ifndef __AW9523B_H__
#define __AW9523B_H__
void aw9523b_config(void);
#endif /* ifndef __AW9523B_H__ */
aboot.c
假设要在app/aboot/aboot.c
中调用aw9523b_config
,那么直接:
- 引入
#include <dev/aw9523b.h>
- 在恰当的时候调用
aw9523b_config
即可。
diff --git a/bootable/bootloader/lk/app/aboot/aboot.c b/bootable/bootloader/lk/app/aboot/aboot.c
@@ -83,6 +83,7 @@
#include <menu_keys_detect.h>
#include <display_menu.h>
#include <platform/gpio.h>
+#include <dev/aw9523b.h>
@@ -3913,6 +3914,10 @@ void aboot_init(const struct app_descriptor *app)
read_device_info(&device);
read_allow_oem_unlock(&device);
+ aw9523b_config();
+
/* Display splash screen if enabled */
#if DISPLAY_SPLASH_SCREEN
dprintf(SPEW, "Display Init: Start
");
修改编译规则
aw9523b的rules.mk
路径: dev/leds/aw9523b/rules.mk
LOCAL_DIR := $(GET_LOCAL_DIR)
INCLUDES +=
-I$(LOCAL_DIR)/include
OBJS +=
$(LOCAL_DIR)/aw9523b.o
顶层makefile
路径:lk/makefile
,添加一行规则include dev/leds/aw9523b/rules.mk
,即可。
diff --git a/bootable/bootloader/lk/makefile b/bootable/bootloader/lk/makefile
index ea33eb6ee1..2afb8c303c 100644
--- a/bootable/bootloader/lk/makefile
+++ b/bootable/bootloader/lk/makefile
@@ -139,6 +139,7 @@ include platform/rules.mk
include target/rules.mk
include kernel/rules.mk
include dev/rules.mk
+include dev/leds/aw9523b/rules.mk
include app/rules.mk