1. 程式人生 > >將新的驅動原始檔新增進android核心進行編譯

將新的驅動原始檔新增進android核心進行編譯

1,同目錄下的makefile,如

#
# Makefile for industrial I/O Magnetometer sensors
#

obj-$(CONFIG_SENSORS_AK8975)    += ak8975.o
obj-$(CONFIG_SENSORS_HMC5843)    += hmc5843.o

2,同目錄下的kconfig

#
# Magnetometer sensors
#
comment "Magnetometer sensors"

config SENSORS_AK8975
    tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
    depends on I2C
    help
      Say yes here to build support for Asahi Kasei AK8975 3-Axis
      Magnetometer.

      To compile this driver as a module, choose M here: the module
      will be called ak8975.

3,總的config(配置變數為Y)

各專案配置檔案的位置不同,

coffee:kernel/arch/arm/configs/M7023Q-debug-perf_defconfig

juice:common/customer/configs

配置資訊如下:

# CONFIG_CFG80211 is not set
CONFIG_EXPERIMENTAL=y
CONFIG_LOCALVERSION="$(KERNEL_LOCAL_VERSION)-perf"
CONFIG_SWAP=y
CONFIG_ZRAM=m
CONFIG_SYSVIPC=y
CONFIG_SENSORS_AK8975=y

 ......

檢視變數是否在編譯時配置成功:

out/target/product/m7023q/obj/KERNEL_OBJ/include/generated/Autoconf.h

查詢CONFIG_SENSORS_AK8975

若在編譯時有配置成功,將找到這一行:

#define CONFIG_SENSORS_AK8975 1

4、修改板級檔案:

4.0及後續專案統一在:kernel/arch/arm/mach-msm/board-qrd7627a.c

注意juice中,很多配置(如tp)寫在kernel/arch/arm/mach-msm/board-msm7627a-io.c

在程式碼中增加新模組的內容,應該有兩處,第一處設定函式和結構體,第二處實際呼叫,注意引用上述第3步新增的編譯開關將程式碼限制起來。

這些內容大多可以拷貝其它模組,但是名字要和driver中的相同,注意要改的地方除了名字之外,還有中斷腳和I2C腳。其中固定模組的中斷腳大部分時候不會改變(如tp就是int:48,reset:26),除非板子的datasheet特別註明才需要改變。但是I2C腳是會隨著slaver device的改變而改變的,需要查清楚。

配置platform_data:

一般需要初始化一個xxx_platform_data結構體(這個結構體的宣告應該讓驅動檔案可視,probe中才知道去讀某個platformdata.yyy),並在i2c_board_info結構體中用.platform_data指向它,然後這個i2c_board_info將在板級檔案中被註冊(作為函式i2c_register_board_info()的引數)。而這個.platform_data很有可能在驅動的probe函式中呼叫到,例如:

static struct msg2133_ts_platform_data msg2133_platformdata= {
    .irq   = 0,
    .reset  = GPIO_TP_RESET,    
};

static struct i2c_board_info i2c_info_msg2133_dpt = {
    I2C_BOARD_INFO("msg2133", 0x27),
    .platform_data = &msg2133_platformdata,
};

i2c_info_msg2133_dpt.platform_data->irq = gpio_to_irq(GPIO_TP_INT);//結構體初始化的時候只能以常量賦值,因為此處需要做GPIO到irq的對映,所以要在此處賦值。

i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, &i2c_info_msg2133_dpt, 1);

在驅動的probe中:pdata =client->dev.platform_data;

    ...... = pdata.yyy; ......//(msg2133_ts_platform_data在該檔案中可見)

修改引腳的詳情見第5步。

5、通過整機電路圖查詢、配置該硬體的中斷腳(27);通過該硬體的說明書配置I2C腳(0x0d)。

在Android4.1中,sensor類硬體在電路板上的配置檔案是:kernel/arch/arm/mach-msm/board-msm7627a-sensor.c

而在Android2.3中,它直接在kernel/arch/arm/mach-msm/board-qrd7627a.c

配置這個結構體:

static struct i2c_board_info akm8975_i2c_info[] __initdata = {
    {
        I2C_BOARD_INFO("akm8975", 0x0e),
        .platform_data =  &akm_platform_data_8975,
        .flags = I2C_CLIENT_WAKE,
        .irq = MSM_GPIO_TO_INT(GPIO_GYRO_INT),
    },
};

以及這個函式:void __init msm7627a_sensor_init(void)
{

......

#ifdef CONFIG_SENSORS_AK8975
    if (machine_is_msm8625_qrd7()) {
        pr_info("i2c_register_board_info AKM8975\n");
        akm_gpio_setup();
        akm_platform_data_8975.gpio_DRDY = 18;
        //akm8975_i2c_info[0].irq = gpio_to_irq(akm_platform_data_8975.gpio_DRDY);
        i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID,
                akm8975_i2c_info,
                ARRAY_SIZE(akm8975_i2c_info));
    }
#endif

 ...... 

6、修改gpio引腳巨集定義

/kernel/arch/arm/mach-msm/include/mach/gpio.h

7、配置CPU引腳型別:

modem_proc/dal/drivers/tlmm/src/bsp/7627A/TLMMBsp_M4000E.c

或者

modem_proc/core/dal/drivers/tlmm/src/bsp/7627A/TLMMBsp_M5010.c

.etc.

其中組數PRIMARY_CONFIGS中定義了GPIO腳的輸入與輸出:

uint32 PRIMARY_CONFIGS[TLMM_BSP_NUM_GPIO] =
{

  …………

  BSP_GPIO_IN_36,          //GPIO36 KEYPAD_C0
    BSP_GPIO_IN_37,          //GPIO37 KEYPAD_C1
    BSP_GPIO_IN_38,          //GPIO38 KEYPAD_C2
    BSP_GPIO_OUT_39,         //GPIO39 MSM_WAKE_WLAN

  ......

    BSP_GPIO_IN_82,         //GPIO82 DEBUG_SELECT    
    BSP_GPIO_IN_84,

}

其中的in和out是對於CPU而言的,所以中斷腳(外設對cpu產生中斷)是in;reset腳(cpu對外設下達重置命令)是out。

而下面這個陣列定義了不同的GPIO腳的控制權限:MASTER->modern; PERIPHERAL->CPU

TLMM_BSP_OwnerProcType TLMM_OWNERS[TLMM_BSP_NUM_GPIO]={

......

  TLMM_OWNER_MASTER, /* 81  */
    TLMM_OWNER_PERIPHERAL, /* 82  */
    TLMM_OWNER_MASTER, /* 83  */

    TLMM_OWNER_PERIPHERAL, /* 84  */
    TLMM_OWNER_PERIPHERAL, /* 85  */

......

}

8、題外話,如果新增的模組是非kernel的android其它模組,比如HAL層,此時需要修改一個makefile:

比如給專案7023Q新增device/cct/common/libsku7sensors/akm8975/資料夾下的模組

模組名稱在 device/cct/common/libsku7sensors/akm8975/Android.mk定義:LOCAL_MODULE := akmd8975

此時,要在device/cct/M7023Q/M7023Q.mk 中修改PRODUCT_PACKAGES變數,新增一行:akmd8975

仍有疑問,請參見下一篇:

1、I2C地址是否和其它IC衝突。通過改地址解決

2、I2C通訊是否受到其它slaver影響。檢測:示波器測I2C波形。排查:逐個去掉其它I2C部件,看本IC的I2C波形是否恢復正常。

3、是否由於IC本身原因,某個暫存器寫值後無應答。我調的這款LED的reset暫存器就是如此,導致probe 呼叫reset時報錯,而其他暫存器正常。

4、硬體接觸是否良好。我遇到的是金手指和卡座接觸不良,而且,該金手指上的另一個IC——距離感測器在較鬆的插入情況下可以正常工作,但LED不能。排查:將LED引腳直接接到卡座引腳,繞過金手指排線

5、若某個GPIO無法拉高,檢查GPIO配置,modem端需配置為TLMM_OWNER_MASTER,kernel端需配置為TLMM_OWNER_PERIPHERAL

6、廠商提供的程式碼和本地平臺可能會有版本差異性,一些巨集定義、函式定義可能會不同,需要比對本地依賴庫中的函式。

相關推薦

驅動原始檔增進android核心進行編譯

1,同目錄下的makefile,如 # # Makefile for industrial I/O Magnetometer sensors # obj-$(CONFIG_SENSORS_AK8975)    += ak8975.o obj-$(CONFIG_SENSORS_HMC5843)  

Android核心編譯和除錯

一、Android核心原始碼的選擇 Android手機裝置核心原始碼的除錯需要外部硬體裝置的支援,除錯步驟比較麻煩。相對來說,Android模擬器核心原始碼的除錯就比較簡單了,這裡以Android模擬器核心原始碼的除錯為例。首先建立一個Android API 19(An

在Linux核心中增加驅動模組

開發環境 開發板:A33-Vstar 開發板系統: Linux/arm 3.4.39 Kernel Ubuntu版本:Ubuntu14.04 ---------------------------------------------------- 新增核心驅動,

Android增資原始檔編譯,R檔案未重新生成解決辦法

在修改Launcher2專案中,新增資原始檔後出現莫名奇怪的錯誤 型別轉換錯誤, 查看了相關檔案 mUnistallDrawable是全域性變數,也是TransitionDrawable物件,查看了unistall_target_selector.

開源純C#工控網關+組態軟件(三)加入一個驅動:西門子S7

space 流量 php cls clsid hub pro 第一個 問題 一、 引子 首先感謝博客園:第一篇文章、第一個開源項目,算是旗開得勝。可以看到,項目大部分流量來自於博客園,碼農樂園,名不虛傳^^。 園友給了我很多支持,並提出了很好的改進意見。現加入屏幕分辨率自適

區塊鏈在各行業的應用或引起一場的產業變革

區塊鏈 春天財經 區塊鏈技術發展隨著應用的不斷的拓展而越來越火,這種來自於各行業需求的強大的發展動力讓區塊鏈技術產生了日新月異的變化,從而讓各行業取得的成果越來越受矚目。   區塊鏈的應用進入各行各業   區塊鏈雖然在比特幣應用裏被大眾所知曉,但實際上區塊鏈被大家所熟知是在它的第二個應用數據的存在性證

服務器 ‘xxxx‘ 已被定義為分發服務器。若要該服務器重配置為分發服務器,必須首先卸載現有的分發服務

statement exceptio service title 技術分享 courier minor stat pre 使用AWS DMS(Database Migration Service)將SQL Server數據庫同步到AWS的Data Lake上,需要在

20週年精彩盛宴至 全球聚焦能源展

被譽為“中國科技第一展”的高交會 將於11月14—18日在深圳會展中心再次盛大舉辦。新能源展將重點展示太陽能、核能、儲能、充電模組、充電樁及其監控系統、動力電池及其電池管理系統、電機、電池等綠色能源方面的最新產品與技術,體現新能源產業的新發展、新趨勢。 據瞭解,目前中廣核核電、理光、巴斯

WPF 新增 Resources Dictionary 資源 一般類庫專案中無法增資原始檔(ResourceDictionary)

原文: WPF 新增 Resources Dictionary 資源 一般類庫專案中無法新增資原始檔(ResourceDictionary) 在資料夾或者專案右鍵-> Add(新增),會彈出可以快捷新增的資源,但是你會發現沒有 ResourceDictionary資源可以選擇。 解決此問題方法:

一代人工智慧(AI)核心技術Python實戰技術應用”

“新一代人工智慧(AI)核心技術Python實戰技術應用” 一、課程目標: 瞭解人工智慧的概念和人工智慧的發展,瞭解國際人工智慧的主要流派和路線,瞭解國內人工智慧研究的基本情況,熟悉人工智慧的研究領域. 詳細地論述知識表示的各種主要方法及人工智慧的主要應用領域,如專家系

俄外長:西方國家想巴爾幹半島變成反俄軍事基地

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

AI醫療 | 人臉識別、智慧導診系統上線,醫號館引領基層醫療時代

隨著AI技術向醫療行業的推進,醫療市場發生翻天覆地的變化。 目前,AI技術主要應用於醫學影像、虛擬助手、藥物發現、醫院管理、健康管理、疾病預測、精準治療及輔助診療等方面。 在影像診斷領域,AI可快速閱讀成像,並對成像進行分析和診斷。據調查,AI在胸部CT影象上能夠自動分析可以找到

三井金屬礦業株式會社在中國建立的銅箔業務市場營銷據點

- 旨在進一步拓展業務 - 東京--(美國商業資訊)--三井金屬礦業株式會社(Mitsui Mining & Smelting Co., Ltd.)(TOKYO: 5706)(社長:西田計治 以下簡稱“三井金屬”)正式宣佈,將在中國建立一個新的銅箔業務市場營銷據點。 MicroT

【2018-9-25】本地的一個專案上傳到GitHub上

第一步:我們需要先建立一個本地的版本庫(其實也就是一個資料夾)。        你可以直接右擊新建資料夾,也可以右擊開啟Git bash命令列視窗通過命令mkdir來建立。        現在我通過命令列在桌面新建一個TEST資料夾(你也可以在其他任何地方建立這個資料夾),並且進入這個資料夾 第二步

優聯智慧燈控系統升級:NB-IoT引領智慧照明風潮

隨著5G佈局的加快,各行各業積極佈局物聯網,萬物互聯時代加速來臨,NB-IoT作為一種最新的低功耗窄帶廣域網通訊技術能實現裝置的海量連線,正成為物聯網領域的一項革新性技術。NB-IoT加速了物聯網的引爆,這項聯網新技術也越來越多地被運用到智慧城市、可穿戴裝置、智慧家居、智慧交通和工業物聯網等領域,

WPF 新增 Resources Dictionary 資源 一般類庫專案中無法增資原始檔(ResourceDictionary)

在資料夾或者專案右鍵-> Add(新增),會彈出可以快捷新增的資源,但是你會發現沒有 ResourceDictionary資源可以選擇。 解決此問題方法: 第一步:工程->右鍵->Unload Project 第二步:剛剛Unload的這個工程->右鍵->Edit XXXX :

安裝版本的apk:android.os.FileUriExposedException

最近在做app更新升級功能的時候,又碰到因為android 7.0 引起的相容問題了。 android.os.FileUriExposedException: file:///storage/emula

“6+365”“展覽+貿易”成為展會未來趨勢

眾所周知,中國中國國際進口博覽會將在11月於上海舉行,這次的博覽會主題主要是想通過“會展之手”來促進我國與“一帶一路”沿線國家的交流合作,實現文化“走出去,引進來”的發展戰略。 而於16日上線的“一帶一路”進口商品展銷中心也將以 “展覽+貿易”的創新商業模式,從

拉取遠端分支,並修改push到分支

1、本地新建一個空資料夾,開啟git bash,進入該資料夾,初始化:git init 2、關聯遠端倉庫:git remote add origin [email protected]:michaelliao/learngit.git 3、新建並切換本地分支:g

核心配置】五、配置一個的暫時性測試用的核心並下載到單板SDRAM測試

主   機:VMWare--Ubuntu-16.04.2-x64-100ask開發板:Mini2440--256M NandFlash,   2M NorFlash,   64M SDRAM,   LCD-TD35;    bootlorder:u-boot1.16,        Ker