在高通lk中添加自定义源文件

在高通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
如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
原文地址:https://www.cnblogs.com/schips/p/add_custom_source_file_in_lk_qualcomm.html