• 在高通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/
  • 相关阅读:
    线段树专辑——hdu 1698 Just a Hook
    bool树的计算
    线段树专辑—— hdu 2795 Billboard
    数据库索引技术聚集索引和非聚集索引介绍(二)
    数据库索引技术—索引介绍 (一)
    AJAX核心对象 XMLHttpRequest 对象使用详解 (二)
    AJAX核心对象 XMLHttpRequest 对象使用详解 (一)
    输入框的提示信息(获得焦点和失去焦点时显示提示信息)
    不管你今天做了多少,加一点亮点总结今天的得分就是1.01。
    新情况——需要按照这个规定堆
  • 原文地址:https://www.cnblogs.com/schips/p/add_custom_source_file_in_lk_qualcomm.html
Copyright © 2020-2023  润新知