函式及變數跨模組呼叫

2021-08-01 07:34:13 字數 2848 閱讀 9752

有時候要獲取乙個關鍵介面時,本地沒有就需要各種呼叫了,雖然方法有點暴力,但沒轍時還是很有效果的,稍作總結

一、c呼叫c++

common/libs/audio/audio_hw.c //再audio hal層呼叫c++的函式

typedef void* fmpcmhandler;

extern fmpcmhandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel);

fmpcmhandler fm_pcm_open_l(struct pcm_config fm_record_config,int bytes,int required_channel)

common/libs/audio/android.mk //把函式定義的原始檔和庫編譯過來

local_c_includes += \

device/sprd/partner/trout/fmhal

local_shared_libraries := \

libengclient libvbeffect libvbpga libfmhalsource

partner/trout/fmhal/fmhalsource.h //要呼叫函式的宣告和定義

extern "c"

partner/trout/fmhal/fmhalsource.cpp

fmpcmhandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel)

二、c++呼叫c:

沒找到跨模組的合適的函式,這裡是同模組內c++呼叫c;個人覺得如果是跨模組的話就把要用到的庫share過來就行

再要用的模組內編譯進這個c函式(這裡在同一目錄,fmhalsource.cpp呼叫tinyalsa_util.c)

device/sprd/partner/trout/fmhal/android.mk

local_src_files := fmhalsource.cpp ringbuffer.cpp tinyalsa_util.c

定義:device/sprd/partner/trout/fmhal/tinyalsa_util.c

int get_snd_card_number(const char *card_name)

; //loop search card number

for (i = 0; i < 32; i++)

}aloge("there is no one found.");

return -1;

}呼叫:

device/sprd/partner/trout/fmhal/fmhalsource.cpp

extern "c"

3、kernel裡呼叫

3.1 普通的全域性變數使用

全域性變數定義:

kernel\drivers\net\wireless\bcmdhd\dhd_common.c

bool ap_fw_loaded = false;

其他地方呼叫:

kernel\drivers\net\wireless\bcmdhd\wl_android.c

extern bool ap_fw_loaded;

kernel/driver/mmc/core/core.h //這個標頭檔案的宣告貌似可以沒有

void mmc_power_off(struct mmc_host *host);//這個標頭檔案的宣告貌似可以沒有

全域性函式的定義:

kernel/driver/mmc/core/core.c

void mmc_power_off(struct mmc_host *host)

其他地方呼叫:

kernel\drivers\mmc\host\sc8830.c

extern void mmc_power_off(struct mmc_host* mmc);

3.2 kernel與模組之間呼叫

3.2.1 模組呼叫kernel的全域性變數或者函式, 用export_symbol即可

變數的定義:

kernel\arch\arm\mach-sc\dhd_adapter.c

struct mmc_host *gmmc;

export_symbol_gpl(gmmc);

呼叫:kernel\drivers\net\wireless\bcmdhd\bcmsdh_sdmmc_linux.c

extern struct mmc_host *gmmc;

函式的定義:

kernel\drivers\mmc\host\sc8830.c

int sdhci_device_attach(int on)

else

}else

return 0;

} return 0;

}export_symbol_gpl(sdhci_device_attach);

函式的呼叫

kernel\drivers\net\wireless\bcmdhd\wl_android.c

extern int sdhci_device_attach(int on);

3.2.2 核心呼叫模組

核心無法呼叫模組的全域性變數

核心可以呼叫模組的全域性函式 (android 10,kernel 4.9)

test.h 裡可如下定義,然後c++裡實現定義,c裡呼叫。都包含這個test.h 即可;然後可能需要檢查下庫

#ifdef __cplusplus

extern "c"

#endif

thinkphp 跨模組呼叫

專案簡介 測試專案名為tp3.0 訪問 localhost tp3.0 安裝環境 windows apache mysql php 模組分組 測試時將模組分為兩組home,admin,根據需求還可以新增更多分組,比如 home,admin,user,article。一 跨模組呼叫例項 簡介 在ind...

tp跨模組呼叫

在乙個模組的方法中,如果需要呼叫其他模組的方法 可以再方法中,直接new其他 模組名action 來得到 module new moduleaction 例 假設在user模組reg 方法中想呼叫wuliao模組的wu 方法 方法 1 wuliao new wuliaoaction wuliao w...

package跨模組呼叫

module包 logger模組 deflogger print logger logger main模組 from module import logger 這裡之所以要加from module 是因為在bin中執行查詢不到logger defmain logger.logger main bin...