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 例項
-
一、新增驅動(示例: msensor st480)
-
1.新增kernel-3.18\drivers\misc\mediatek\magnetometer\st480資料夾(包含st480.c、st480.h、Kconfig、Makefile四個檔案)
-
st480.c
-
st480.h
-
Kconfig 建巨集--MTK_ST480
-
Makefile
-
2.kernel-3.18\drivers\misc\mediatek\magnetometer\Kconfig 新增:
-
+ source "drivers/misc/mediatek/magnetometer/st480/Kconfig"
-
3.kernel-3.18\drivers\misc\mediatek\magnetometer\Makefile 新增:
-
+ obj-$(CONFIG_MTK_ST480) += st480/
-
4.kernel-3.18\arch\arm\boot\dts\len6797_6m_n.dts 新增:
-
注:這一段沒有的話(或名字不對應),會導致開機重啟
-
compatible = "mediatek,st480";
-
i2c_num = <2>; // i2c控制器2(即i2c匯流排2),sensor都接在控制器2上--即i2c匯流排2
-
i2c_addr = <0x0C 0 0 0>; // dws也寫了一個i2c地址,到底用哪個看驅動,通常寫在dws
-
direction = <1>; // 方向 –> 唯一用到的
-
power_id = <0xffff>;
-
power_vol = <0>;
-
is_batch_supported = <0>;
-
};
-
4.1 修改dws: i2c匯流排數與i2c地址,驅動中會用到
-
I2C:
-
MSENSOR I2C_CHANNEL_2 0x30
-
5.kernel-3.18\arch\arm\configs\len6797_6m_n_debug_defconfig、len6797_6m_n_defconfig 修改
-
- #CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
-
+ CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y
-
+ CONFIG_MTK_ST480=y
-
6.新增vendor\lentek\libs\mt6797\st480資料夾(包含st480、Android.mk、README、NOTICE)
-
st480 是一個可執行檔案---init.xxx.rc中執行的daemon程序
-
Android.mk
-
README 解釋資訊
-
NOTICE 解釋資訊
-
7.device\lentek\len6797_6m_n\ProjectConfig.mk 修改:
-
- CUSTOM_KERNEL_MAGNETOMETER = no
-
+ CUSTOM_KERNEL_MAGNETOMETER = yes
-
8.device\mediatek\mt6797\init.mt6797.rc 新增:
-
service st480 /system/bin/st480 // 這是一個服務,服務的路徑
-
disabled
-
user system
-
group system
-
class main // 歸屬於main這個service,main啟動時啟動st480
-
9.device\lentek\len6797_6m_n\factory_init.project.rc 新增:
-
service st480 /system/bin/st480 // 這是一個服務,服務的路徑--應該是工廠模式用到的
-
disabled
-
user system
-
group system
-
10.device\mediatek\common\sepolicy\file_contexts 新增:
-
+ /system/bin/st480 u:object_r:st480_exec:s0 // 當我們新增跑一個服務的時候就需要對其新增(開放)許可權?哪些程序可以訪問它
-
11.新增device\mediatek\common\sepolicy\st480.te檔案
-
12.device\mediatek\mt6797\device.mk 新增:
-
+ PRODUCT_PACKAGES += st480 // 複製st480,從…到/system/bin/
-
二、檢視log:
-
1.檢視上報資料
-
cat /proc/kmsg | grep "***"
-
2.檢視開機串列埠log
-
從串列埠測試點(TXD)接線出來,用usb轉串列埠線,配合xshell抓串列埠log(波特率:912600)
-
3.檢視sensor型號:
-
eng 版可以通過 命令檢視: cat /sys/bus/platform/drivers/gsensor/chipinfo
-
user版可以通過 命令檢視: dmesg | grep "gsensor" -i // 按power鍵滅屏or亮屏時,會開啟or關閉sensor,會有核心緩衝器會有log打出
-
[ 1099.329303] (0)[934:android.ui]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 1
-
[ 1102.168146] (0)[946:PowerManagerSer]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 0
-
user版可以通過 命令檢視: dmesg | grep "als" -i
-
user版可以通過 命令檢視: dmesg | grep "msensor" -i
-
user版可以通過 命令檢視: dmesg | grep "gyro" -i
-
三、根據input子系統的除錯方法:
-
getevent -i 檢視所有的input裝置
-
getevent -t /dev/input/event4 獲取gsensor往上層上報的包(封裝過,加入time等資訊,以16進位制方式列印)
-
1. ps
-
靠近:
-
[ 2208.288534] 0002 0002 00000001
-
[ 2208.288534] 0002 0001 00000003
-
[ 2208.288534] 0000 0000 00000000
-
遠離:
-
[ 2212.838044] 0002 0002 00000002
-
[ 2212.838044] 0002 0001 00000003
-
[ 2212.838044] 0000 0000 00000000
-
2. cat /proc/kmsg | grep "dgsensor"
-
<4>[ 564.973691]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
-
<4>[ 564.973725]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
-
<4>[ 565.168562]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
-
<4>[ 565.168588]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status epl_sensor.ps.compare_low = 0x8
-
<4>[ 565.368485]<0> (0)[2935:kworker/0:3]dgsensor epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa
-
四、跟讀程式碼可知:以gsensor(mc3xxx_auto)為例
-
通過sys檔案系統介面除錯
-
1.架構實現 - 兩個路徑的節點是一樣的,cat出來也是相同的,hal層走class
-
/sys/class/misc/m_acc_misc/*** 有若干屬性,可以讀寫操作
-
cat /sys/.../accenablenodata -- 不支援 echo 0/1 > 無作用
-
cat /sys/.../accactive -- 1(使能) echo 0 > /sys/.../accactive -- disable
-
cat /sys/.../accdelay(不常用)
-
cat /sys/.../accbatch(不常用)
-
cat /sys/.../accflush(不常用)
-
cat /sys/.../accdevnum -- 4(/dev/input/event4)
-
2.驅動實現
-
/sys/bus/platform/drivers/gsensor/*** 有若干屬性,可以讀寫操作
-
* cat /sys/.../chipinfo -- MC3XXX Chip -- 直接列印MC3XXX Chip
-
* cat /sys/.../sensordata -- 1758 0695 1b88 -- 讀地址0x00
-
cat /sys/.../cali -- 三組校準資料 -- 第二組為校準係數,上層未下發就為0
-
cat /sys/.../selftest -- 空(未設定)
-
cat /sys/.../firlen -- 0 -- 濾波長度 - 從dts獲得 - 全部為0
-
cat /sys/.../trace -- 0x0000 -- mc3xxx_i2c_probe()把它設定為0
-
cat /sys/.../status -- CUST: 2 7 <-1 0> -- i2c_num direction <power_id power_vol> - 從dts獲取
-
cat /sys/.../power -- 亮屏0x0041,滅屏0x0043 -- 讀地址0x07
-
cat /sys/.../version -- 2.1.6 -- 列印驅動的巨集
-
* cat /sys/.../chipid -- 7C-5F-5E-46 -- 讀地址0x3C
-
cat /sys/.../virtualz -- 不支援
-
* cat /sys/.../regmap -- 列印所有暫存器的值
-
* cat /sys/.../orientation -- 7 -- 從dts獲取 echo 7 > /sys/.../orientation
-
cat /sys/.../accuracy -- 2(精度 - 巨集設定)
-
cat /sys/.../selfcheck -- 亂碼
-
cat /sys/.../validate -- 0(驗證成功) -- 從0x3b讀出pcode - 匹配mc3***系列晶片 - 驗證成功返回0
-
cat /sys/.../pdoc -- 0(不支援 - 巨集未開)
-
五、sensor相容:以gsensor為例:
-
Mtk的架構已經做了相容,最多隻能相容5個(gsensor_init_list[5])(tpd_driver_list[20])
-
六、ps的閾值如何設定
-
1. androidL/M/N:
-
kernel-3.10/drivers/misc/mediatek/alsps/epl259x/epl259x.c
-
dynk_low_offset = 2000; //500; //100 - qk
-
dynk_high_offset = 2300; //800; //300 - qk
-
將(500,800)改為(2000,2300),距離約降低三分一,寫死在驅動不用dts
-
七、sensor資料上報有三種介面
-
1. 輪詢上報 --最終使用
-
2. sys檔案系統 -- 除錯使用
-
3. ioctl介面 -- ATA (工廠模式: 同時按住音量減和電源鍵開機)
-
mtk原生:
-
關閉輪詢 - 無功能
-
關閉ioctl - 工廠模式無資料(音量減與電源鍵同時按住開機)
-
關閉sysfs - 有功能
-
bose修改hal層框架後: - 由一個程序主動讀取
-
關閉輪詢 - 有功能
-
關閉ioctl - 工廠模式無資料(音量減與電源鍵同時按住開機)
-
關閉sysfs - 無功能
-
八、除錯檢視log
-
hal層enable與disable時候會列印:[logcat | grep "..."]
-
vendor/mediatek/proprietary/hardware/sensor/nusensors.cpp
-
int sensors_poll_context_t::activate(int handle, int enabled)
-
{
-
ALOGD( "activate handle =%d, enable = %d",handle, enabled );
-
sensor編號:(kernel/.../hwmsensor.h中定義減1)
-
accelerometer 0
-
magnetometer 1
-
orientation 2
-
gyroscope 3
-
ambient light sensor 4
-
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)—— 啟動RootOS及GuestOS1/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