在高通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\n");

修改编译规则

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

在高通lk中添加自定义源文件的更多相关文章

  1. 高通ASOC中的codec驱动

    ASOC的出现是为了让codec独立于CPU,减少和CPU之间的耦合,这样同一个codec驱动就无需修改就可以匹配任何一款平台. 在Machine中已经知道,snd_soc_dai_link结构就指明 ...

  2. 高通ASOC中的machine驱动

    ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...

  3. 高通Audio中ASOC的machine驱动(一)

    ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...

  4. 高通lk屏幕向kernel传参

    LK把相关参数报存到cmdline上: 在Bootable\bootloader\lk\dev\gcdb\display\gcdb_display_param.c上gcdb_display_cmdli ...

  5. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  6. 高通android开发摘要

    一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载. 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参 ...

  7. 高通、猎户机型Android典型bootloader分析

    1.bootloader是什么? 简单地说,bootloader 就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,我们可以初始化硬件设备.建立内存空间的映射图,从而将系统的软硬件环境带到一 ...

  8. 高通平台msm8909 LK 实现LCD 兼容

    前段时间小米出现红米note2 换屏门,现在我们公司也要上演了:有两个供应商提供不同IC 的LCD panel. 软件区分的办法是读取LCD IC 的ID 寄存器,下面解析高通平台LK中LCD兼容的过 ...

  9. 高通spi 屏幕 -lk代码分析

    lk SPI驱动 1. 初始化时钟 在lk中,我们是从kmain开始执行下来的,而执行顺序则是先初始化时钟,也就是在platform_early_init函数中开始执行的: 在这里我们需要修改这个函数 ...

  10. 高通移植mipi LCD的过程LK代码

    lk部分:(实现LCD兼容) 1. 函数定位 aboot_init()来到target_display_init(): 这就是高通原生lk LCD 兼容的关键所在.至于你需要兼容多少LCD 就在whi ...

随机推荐

  1. CMake 教程(待完善)

    Cmake 教程 写在前面 如果工程只有几个文件,直接编写Makefile更直接明了 如果使用C.C++.之外的语言,请不要使用cmake 如果使用的语言有非常完备的构建体系,不需要使用cmake C ...

  2. R4_Elasticsearch Mapping parameters

    Elasticsearch的Mapping,定义了索引的结构,类似于关系型数据库的Schema. Mapping Type:每个索引都拥有唯一的 mapping type,用来决定文档将如何被索引.从 ...

  3. ansible系列(28)--ansible的playbook异常处理

    目录 1. playbook的异常处理 1.1 Playbook错误忽略 1.2 task执行失败强制调用handlers 1.3 控制Tasks报告状态为OK 1.4 changed_when检查任 ...

  4. 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线动态填充 word 文件

    PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel.兆芯.海光等).ARM(飞腾.鲲鹏.麒麟等)芯片架构. 在实际的Word文档开发中,经常需要自动填 ...

  5. SimpleHTTPServer模块详解

    SimpleHTTPServer实现文件的展示和下载 可以用python2.7直接启动一个进程.以命令执行的当前目录为页面根目录,如果不存在index.html,默认展示当前目录的所有文件. pyth ...

  6. 关于Nacos身份认证绕过漏洞默认密钥和JWT的研究

    前言 由于本人的一个习惯,每次遇到漏洞并复现后都要编写poc,以便下一次的直接利用与复测使用.研究Nacos默认密钥和JWT的爱恨情仇的过程中遇到了莫名其妙的问题,在此做以记录,方便日后有大佬遇到相同 ...

  7. WPF插件之 - PropertyChanged.Fody使用详解

    总目录文章目录总目录一.PropertyChanged.Fody是什么?二.PropertyChanged.Fody的安装三.PropertyChanged.Fody的功能1. 特性1 实现属性通知的 ...

  8. matplotlib学习:搞明白plt. /ax./ fig

    原文章一:https://zhuanlan.zhihu.com/p/93423829,原文章二:https://jishuin.proginn.com/p/763bfbd23e20    感谢作者的讲 ...

  9. nginx对称加密算法和非对称加密算法nginx证书配置

    对称加密算法 对称加密性能更好 对称加密: 客户端和服务器之间的通信数据是通过对称加密算法进行加密,对称加密是在加密和解密的过程中使用同一个私钥进行加密和解密,而且加密算法是公开的,所以对称加密中的私 ...

  10. docker基础使用和资源限制

    为什么使用容器 docker设计目标: 提供简单的应用打包工具 开发人员和运维人员职责逻辑分离 多环境保持一致性 轻量级 kubernetes设计目标: 集中管理所有容器 资源编排 资源调度 弹性伸缩 ...