1. 程式人生 > >MTK Sensor 移植及除錯2

MTK Sensor 移植及除錯2

接續上一節,本文主要介紹驅動部分的客製化

3. Sensor Driver 的客製化

主要涉及三個方面:

1)配置 codegen.dws

---I2C 地址、eint、gpio

2)配置驅動引數

3)選擇sensor P/N

3.1 配置 codegen.dws

vendor\mediatek\proprietary\scripts\dct\drvgen.exe

vendor\mediatek\proprietary\bootable\bootloader\lk\target\ivvi6797_6m_n\dct\dct\codegen.dws

vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\ivvi6797_6m_n\dct\dct\codegen.dws

vendor\mediatek\proprietary\custom\ivvi6797_6m_n\kernel\dct\dct\codegen.dws

sensor 通道配置

如果需要用到eint, 需要進行sensor eint 和GPIO 配置

3.2 驅動引數配置 

Accelerometer  引數配置:

注意感測器的方向

Gyroscope 引數配置:

Magnetometer引數配置

Alps 引數配置:

如果用到GPIO,還需要對GPIO 進行對應的設定。

5 例項

  1. 一、新增驅動(示例: msensor st480)

  2. 1.新增kernel-3.18\drivers\misc\mediatek\magnetometer\st480資料夾(包含st480.c、st480.h、Kconfig、Makefile四個檔案)

  3. st480.c

  4. st480.h

  5. Kconfig 建巨集--MTK_ST480

  6. Makefile

  7. 2.kernel-3.18\drivers\misc\mediatek\magnetometer\Kconfig 新增:

  8. + source "drivers/misc/mediatek/magnetometer/st480/Kconfig"

  9. 3.kernel-3.18\drivers\misc\mediatek\magnetometer\Makefile 新增:

  10. + obj-$(CONFIG_MTK_ST480) += st480/

  11. 4.kernel-3.18\arch\arm\boot\dts\len6797_6m_n.dts 新增:

  12. 注:這一段沒有的話(或名字不對應),會導致開機重啟

  13. [email protected] {

  14. compatible = "mediatek,st480";

  15. i2c_num = <2>; // i2c控制器2(即i2c匯流排2),sensor都接在控制器2上--即i2c匯流排2

  16. i2c_addr = <0x0C 0 0 0>; // dws也寫了一個i2c地址,到底用哪個看驅動,通常寫在dws

  17. direction = <1>; // 方向 –> 唯一用到的

  18. power_id = <0xffff>;

  19. power_vol = <0>;

  20. is_batch_supported = <0>;

  21. };

  22. 4.1 修改dws: i2c匯流排數與i2c地址,驅動中會用到

  23. I2C:

  24. MSENSOR I2C_CHANNEL_2 0x30

  25. 5.kernel-3.18\arch\arm\configs\len6797_6m_n_debug_defconfig、len6797_6m_n_defconfig 修改

  26. - #CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y

  27. + CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y

  28. + CONFIG_MTK_ST480=y

  29. 6.新增vendor\lentek\libs\mt6797\st480資料夾(包含st480、Android.mk、README、NOTICE)

  30. st480 是一個可執行檔案---init.xxx.rc中執行的daemon程序

  31. Android.mk

  32. README 解釋資訊

  33. NOTICE 解釋資訊

  34. 7.device\lentek\len6797_6m_n\ProjectConfig.mk 修改:

  35. - CUSTOM_KERNEL_MAGNETOMETER = no

  36. + CUSTOM_KERNEL_MAGNETOMETER = yes

  37. 8.device\mediatek\mt6797\init.mt6797.rc 新增:

  38. service st480 /system/bin/st480 // 這是一個服務,服務的路徑

  39. disabled

  40. user system

  41. group system

  42. class main // 歸屬於main這個service,main啟動時啟動st480

  43. 9.device\lentek\len6797_6m_n\factory_init.project.rc 新增:

  44. service st480 /system/bin/st480 // 這是一個服務,服務的路徑--應該是工廠模式用到的

  45. disabled

  46. user system

  47. group system

  48. 10.device\mediatek\common\sepolicy\file_contexts 新增:

  49. + /system/bin/st480 u:object_r:st480_exec:s0 // 當我們新增跑一個服務的時候就需要對其新增(開放)許可權?哪些程序可以訪問它

  50. 11.新增device\mediatek\common\sepolicy\st480.te檔案

  51. 12.device\mediatek\mt6797\device.mk 新增:

  52. + PRODUCT_PACKAGES += st480 // 複製st480,從…到/system/bin/

  53. 二、檢視log:

  54. 1.檢視上報資料

  55. cat /proc/kmsg | grep "***"

  56. 2.檢視開機串列埠log

  57. 從串列埠測試點(TXD)接線出來,用usb轉串列埠線,配合xshell抓串列埠log(波特率:912600)

  58. 3.檢視sensor型號:

  59. eng 版可以通過 命令檢視: cat /sys/bus/platform/drivers/gsensor/chipinfo

  60. user版可以通過 命令檢視: dmesg | grep "gsensor" -i // 按power鍵滅屏or亮屏時,會開啟or關閉sensor,會有核心緩衝器會有log打出

  61. [ 1099.329303] (0)[934:android.ui]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 1

  62. [ 1102.168146] (0)[946:PowerManagerSer]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 0

  63. user版可以通過 命令檢視: dmesg | grep "als" -i

  64. user版可以通過 命令檢視: dmesg | grep "msensor" -i

  65. user版可以通過 命令檢視: dmesg | grep "gyro" -i

  66. 三、根據input子系統的除錯方法:

  67. getevent -i 檢視所有的input裝置

  68. getevent -t /dev/input/event4 獲取gsensor往上層上報的包(封裝過,加入time等資訊,以16進位制方式列印)

  69. 1. ps

  70. 靠近:

  71. [ 2208.288534] 0002 0002 00000001

  72. [ 2208.288534] 0002 0001 00000003

  73. [ 2208.288534] 0000 0000 00000000

  74. 遠離:

  1. [ 2212.838044] 0002 0002 00000002

  2. [ 2212.838044] 0002 0001 00000003

  3. [ 2212.838044] 0000 0000 00000000

  4. 2. cat /proc/kmsg | grep "dgsensor"

  5. <4>[ 564.973691]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa

  6. <4>[ 564.973725]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8

  7. <4>[ 565.168562]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa

  8. <4>[ 565.168588]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8

  9. <4>[ 565.368485]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa

  10. 四、跟讀程式碼可知:以gsensor(mc3xxx_auto)為例

  11. 通過sys檔案系統介面除錯

  12. 1.架構實現 - 兩個路徑的節點是一樣的,cat出來也是相同的,hal層走class

  13. /sys/class/misc/m_acc_misc/*** 有若干屬性,可以讀寫操作

  14. cat /sys/.../accenablenodata -- 不支援 echo 0/1 > 無作用

  15. cat /sys/.../accactive -- 1(使能) echo 0 > /sys/.../accactive -- disable

  16. cat /sys/.../accdelay(不常用)

  17. cat /sys/.../accbatch(不常用)

  18. cat /sys/.../accflush(不常用)

  19. cat /sys/.../accdevnum -- 4(/dev/input/event4)

  20. 2.驅動實現

  21. /sys/bus/platform/drivers/gsensor/*** 有若干屬性,可以讀寫操作

  22. * cat /sys/.../chipinfo -- MC3XXX Chip -- 直接列印MC3XXX Chip

  23. * cat /sys/.../sensordata -- 1758 0695 1b88 -- 讀地址0x00

  24. cat /sys/.../cali -- 三組校準資料 -- 第二組為校準係數,上層未下發就為0

  25. cat /sys/.../selftest -- 空(未設定)

  26. cat /sys/.../firlen -- 0 -- 濾波長度 - 從dts獲得 - 全部為0

  27. cat /sys/.../trace -- 0x0000 -- mc3xxx_i2c_probe()把它設定為0

  28. cat /sys/.../status -- CUST: 2 7 <-1 0> -- i2c_num direction <power_id power_vol> - 從dts獲取

  29. cat /sys/.../power -- 亮屏0x0041,滅屏0x0043 -- 讀地址0x07

  30. cat /sys/.../version -- 2.1.6 -- 列印驅動的巨集

  31. * cat /sys/.../chipid -- 7C-5F-5E-46 -- 讀地址0x3C

  32. cat /sys/.../virtualz -- 不支援

  33. * cat /sys/.../regmap -- 列印所有暫存器的值

  34. * cat /sys/.../orientation -- 7 -- 從dts獲取 echo 7 > /sys/.../orientation

  35. cat /sys/.../accuracy -- 2(精度 - 巨集設定)

  36. cat /sys/.../selfcheck -- 亂碼

  37. cat /sys/.../validate -- 0(驗證成功) -- 從0x3b讀出pcode - 匹配mc3***系列晶片 - 驗證成功返回0

  38. cat /sys/.../pdoc -- 0(不支援 - 巨集未開)

  39. 五、sensor相容:以gsensor為例:

  40. Mtk的架構已經做了相容,最多隻能相容5個(gsensor_init_list[5])(tpd_driver_list[20])

  41. 六、ps的閾值如何設定

  42. 1. androidL/M/N:

  43. kernel-3.10/drivers/misc/mediatek/alsps/epl259x/epl259x.c

  44. dynk_low_offset = 2000; //500; //100 - qk

  45. dynk_high_offset = 2300; //800; //300 - qk

  46. 將(500,800)改為(2000,2300),距離約降低三分一,寫死在驅動不用dts

  47. 七、sensor資料上報有三種介面

  48. 1. 輪詢上報 --最終使用

  49. 2. sys檔案系統 -- 除錯使用

  50. 3. ioctl介面 -- ATA (工廠模式: 同時按住音量減和電源鍵開機)

  51. mtk原生:

  52. 關閉輪詢 - 無功能

  53. 關閉ioctl - 工廠模式無資料(音量減與電源鍵同時按住開機)

  54. 關閉sysfs - 有功能

  55. bose修改hal層框架後: - 由一個程序主動讀取

  56. 關閉輪詢 - 有功能

  57. 關閉ioctl - 工廠模式無資料(音量減與電源鍵同時按住開機)

  58. 關閉sysfs - 無功能

  59. 八、除錯檢視log

  60. hal層enable與disable時候會列印:[logcat | grep "..."]

  61. vendor/mediatek/proprietary/hardware/sensor/nusensors.cpp

  62. int sensors_poll_context_t::activate(int handle, int enabled)

  63. {

  64. ALOGD( "activate handle =%d, enable = %d",handle, enabled );

  65. sensor編號:(kernel/.../hwmsensor.h中定義減1)

  66. accelerometer 0

  67. magnetometer 1

  68. orientation 2

  69. gyroscope 3

  70. ambient light sensor 4

  71. proximity sensor 7

相關推薦

MTK Sensor 移植除錯2

接續上一節,本文主要介紹驅動部分的客製化 3. Sensor Driver 的客製化 主要涉及三個方面: 1)配置 codegen.dws ---I2C 地址、eint、gpio 2)配置驅動引數 3)選擇sensor P/N 3.1 配置 codegen.dw

TIMESAT3.1(3.2)執行除錯例項

1.TIMESAT簡介 TIMESAT的名稱來源於英文 Time-series Satellite data Analysis Tool,它是一個用於時間序列衛星遙感資料處理和分析的工具軟體。時間序列植被指數的時域特徵能夠反映出植被的生長變化過程,通過該工具可以實現對時序植

使用Jlink模擬ADS1.2除錯(ok2440)

1.將Jlink PC ok2440連線起來 2.給ok2440上電 3.開啟Jlink程式中的J-link ARM v4.08k(可觀察到jlink的型號及CPU的各種引數) 並開啟DNW 按任意鍵不要讓開發板進入作業系統 4.開啟ADS CodeWarrior for ARM 載入映象  可先將工程中的

Linux系統虛擬機管理redhat7.2的安裝

虛擬機 redhat安裝1.安裝圖形安裝命令欄輸入virt-manager進入虛擬機管理界面點擊新增選擇源路經選擇1GB內存,單核cpu,9GB硬盤設置好名稱完成虛擬機的硬件配置進入到redhat7.2安裝界面設置時間設置預裝軟件自定義劃分硬盤設置完成後,完成root密碼設置,開始安裝redhat7.2.設置

linux下can總線移植測試總結

哪裏 ips sub 開關 switch 發現 開發 主機 編譯工具 Can移植及測試總結 Adding Flexcan driver support on Kernel 一.On kernel menuconfig, add the following items: [*

python中的模塊路徑(2)

python undefined get inux program 自己的 str 跳過 有效 如果我們要添加自己的搜索目錄,有兩種方法: 一是直接修改sys.path,添加要搜索的目錄: >>> import sys >>> sys.p

將程式碼從 spark 1.x 移植到 spark 2.x

1. SparkSession sparkSession可以視為sqlContext和hiveContext以及StreamingContext的結合體,這些Context的API都可以通過sparkSession使用。 建立SparkSession   val

風河虛擬化元件使用說明(14)—— 啟動RootOSGuestOS1/2(on target&host)

參考Guest Guide文件“Shutdown Behavior Considerations” 開啟主機workbench串列埠,設定為9600波特率,埠號見裝置管理器。開啟目標機,按DEL進入BIOS設定,設定為UEFI and LEGACY,重新啟動。RootOS啟動後,在目標機螢幕上顯

DS18B20驅動移植除錯用例

DS18B20時序分析: DS18B20的一線工作協議流程是:初始化->ROM操作指令->儲存器操作指令->資料傳輸, 其工作時序包括:初始化時序、寫時序、讀時序。 1.初始化時序: 主機:首先發出一個480~960us的低電平脈衝,然後釋放匯流排變為高電平。 並在

mysql練習題答案2

轉載 https://www.cnblogs.com/ztz0/p/5749648.html mysql查詢語句練習題Sutdent表的定義 欄位名 欄位描述 資料型別 主鍵 外來鍵 非空 唯一 自增 Id 學號 INT(10) 是 否 是 是 是Name 姓名 VARCHAR

Flask 框架 - 檢視路由 - 2

1 學習目標 能夠寫出帶有引數的路由及檢視函式 能夠說出 url_for 函式的作用 能夠說出自定義轉換器的步驟 2 路由基本定義 明確路由定義的引數,請求方式指定 PostMan 的使用 2.1 指定路由地址 # 指定訪問路

BeagleBone Black 移植U-Boot (2 MLO、U-Boot)

原文:jexbat.com/categories/BeagleBone/ 什麼是 U-Boot 熟悉嵌入式開發的應該都聽過它,U-boot 就是啟動系統前的一段載入程式,雖然是載入程式,但是功能非常強大。 這一篇主要講解如何從無到有執行 U-Boot,關於 U-Boot 引導 Linux

JVMTI 中的JNI系列函式,執行緒安全除錯技巧

JVMTI 中的JNI系列函式,執行緒安全及除錯技巧 jni functions 在使用 JVMTI 的過程中,有一大系列的函式是在 JVMTI 的文件中 沒有提及的,但在實際使用卻是非常有用的。這就是 jni functions.

軟體除錯方法除錯原則

除錯(Debug)   軟體除錯是在進行了成功的測試之後才開始的工作,它與軟體測試不同,除錯的任務是進一步診斷和改正程式中潛在的錯誤。   注: 以問題為中心 以錯誤為導向   除錯活動由兩部分組成: u  確定程

Sass入門-語法格式除錯

三、Sass語法格式 語法格式 1.Sass語法(Sass的最初語法格式,通過tab鍵控制縮排的一種語法規則): $font-stack: Helvetica, sans-serif $primary-color: #333 body font: 100% $font-

python django 基本測試 除錯

#########20181110from django.db import modelsfrom blog.models import Article, Author, TagAuthor.objects.using('db1').all()     setting.py TE

SymmetricDS 官方DEMO解釋部署-2

1.1.2 初始載入 初始載入代表著源端的資料表同步到目標端資料表。不再是捕捉資料變動,而是相當於在源端表查詢出來的資料流,傳遞給客戶端。 官方的示例中,初始化配置項以及業務資料這一步驟已經配置了初步載入項。這裡再提供一種命令可以針對端節點來重新載入。 bin/symadmin

Shell程式設計-12-Shell指令碼規範除錯

目錄 Shell指令碼規範 Shell指令碼除錯 Shell指令碼規範     良好的程式碼規範不僅方便閱讀,也利於維護和提升開發效率。因此建議大家在編寫Shell指令碼時養成良好的程式碼習慣。今天就和大家探討一下在Shell指令碼中的一些規範,詳細如下所示: 1、在Shell指令

Nginx+Uwsgi+Django+Python伺服器部署除錯(更新0.1)

Nginx+Uwsgi+Django+Python伺服器部署 環境:Ubuntu16.04 1.python開發環境 安裝pyenv,python,virtualenv,需要使用python虛擬環境env 2.安裝配置nginx 安裝 sudo apt-get ins

人臉識別對比2-多張人臉識別

from __future__ import absolute_import from __future__ import division from __future__ import print_function from scipy import misc import tensorflow