日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux驱动基础:MSM平台AP/CP通信机制

發布時間:2025/4/16 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux驱动基础:MSM平台AP/CP通信机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊打開鏈接

概述

MSM平臺AP和CP封裝到一個芯片,共享內容。所以之前也說過,高通的MSM解決方案中,CP的代碼都是由AP放到指定地址的內存中以供CP運行。那上傳完代碼,CP開始跑之后,AP/CP之間的通信又是怎么弄的呢??
其實也是在內存中開辟一段共享內存進行通信的。高通文檔中有介紹以下三種。

  • SMD : Shared Memory Driver
  • SMEM : Shared Memory Manager
  • SMSM : Shared State Machine

來看一下上面三種共享內存的具體說明:

SMEM :

  • Shared memory service, provides basic SMEM allocation services
  • Section of physical RAM is located at a predetermined location, sharing between?
    processors
  • Provides low-level interprocessor communication primitives (apps processor to?
    modem processor) that can be called from interrupt context

SMSM:

  • Shared memory state machine
  • Provides low-level synchronization between different processors

SMD :

  • Shared memory driver
  • Provides multiple data channels

smd channel setup過程

1.首先Modem會調用sio_open()等函數接口,根據port id打開一個smd port。smd_sio_open()函數會被調用。然后smdi_alloc_channel_info()函數會在shared memory分配一個port.

2.在AP端,msm_smd_probe()會啟動一個wrker thread,叫smd_channel_probe_worker()。這個函數會detect所有已經被modem端分配過的smd channel。通過這一步之后,驅動函數就可以通過smd channel名字打開一個smd channel。

實際在smd_init_dt.c的 msm_smd_probe()函數中添加log輸出結果為:

<6>[0.538769] [0:swapper/0:1] msm_smd_probe remote_pid=1 <6>[0.539232] [0:swapper/0:1] msm_smd_probe remote_pid=4 <6>[0.539665] [0:swapper/0:1] msm_smd_probe remote_pid=6
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

當然這個結果是根據dtsi文件定義里讀出來的內容。

qcom,smd-modem {compatible = "qcom,smd";qcom,smd-edge = <0>;qcom,smd-irq-offset = <0x0>;qcom,smd-irq-bitmask = <0x1000>;interrupts = <0 25 1>;label = "modem";};...qcom,smd-wcnss {compatible = "qcom,smd";qcom,smd-edge = <6>;qcom,smd-irq-offset = <0x0>;qcom,smd-irq-bitmask = <0x20000>;interrupts = <0 142 1>;label = "wcnss";};...qcom,smd-rpm {compatible = "qcom,smd";qcom,smd-edge = <15>;qcom,smd-irq-offset = <0x0>;qcom,smd-irq-bitmask = <0x1>;interrupts = <0 168 1>;label = "rpm";qcom,irq-no-suspend;qcom,not-loadable;};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

上面定義的edge,用來根據edge_to_pids變量來轉換成remote pid。edge對應的值是以下枚舉類型。

enum {SMD_APPS_MODEM = 0,SMD_APPS_QDSP,SMD_MODEM_QDSP,SMD_APPS_DSPS,SMD_MODEM_DSPS,SMD_QDSP_DSPS,SMD_APPS_WCNSS,SMD_MODEM_WCNSS,SMD_QDSP_WCNSS,SMD_DSPS_WCNSS,SMD_APPS_Q6FW,SMD_MODEM_Q6FW,SMD_QDSP_Q6FW,SMD_DSPS_Q6FW,SMD_WCNSS_Q6FW,SMD_APPS_RPM,SMD_MODEM_RPM,SMD_QDSP_RPM,SMD_WCNSS_RPM,SMD_TZ_RPM,SMD_NUM_TYPE, };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

然后在smd_channel_probe_worker()->scan_alloc_table函數中添加log。

static void smd_channel_probe_worker(struct work_struct *work) {struct smd_alloc_elm *shared;struct remote_proc_info *r_info;unsigned tbl_size;r_info = container_of(work, struct remote_proc_info, probe_work);//ID_CH_ALLOC_TBL,SMEM_CHANNEL_ALLOC_TBL_2 到底是什么??shared = smem_get_entry(ID_CH_ALLOC_TBL, &tbl_size,r_info->remote_pid, 0);if (!shared) {pr_err("%s: allocation table not initialized\n", __func__);return;}mutex_lock(&smd_probe_lock);scan_alloc_table(shared, r_info->ch_allocated, PRI_ALLOC_TBL,tbl_size / sizeof(*shared),r_info);shared = smem_get_entry(SMEM_CHANNEL_ALLOC_TBL_2, &tbl_size,r_info->remote_pid, 0);if (shared)scan_alloc_table(shared,&(r_info->ch_allocated[SMEM_NUM_SMD_STREAM_CHANNELS]),SEC_ALLOC_TBL,tbl_size / sizeof(*shared),r_info);mutex_unlock(&smd_probe_lock); }static void scan_alloc_table(struct smd_alloc_elm *shared,char *smd_ch_allocated,int table_id,unsigned num_entries,struct remote_proc_info *r_info) {if (!smd_alloc_channel(&shared[n], table_id, r_info)) {pr_info("shared[%d].name = %s, r_info->remote_pid = %d table_id=%d\n",n,shared[n].name,r_info->remote_pid,table_id);smd_ch_allocated[n] = 1;}elseSMD_INFO("Probe skipping proc %d, tbl %d, ch %d, not allocated\n",r_info->remote_pid, table_id, n); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

輸出的log結果為:

//以下log里邊shared[x]中,x代表port ID,和打印所有的qc_smd_ch_xxx.log里邊的ID對應! <6>[0.544016][0:kworker/0:1:34] shared[4].name = rpm_requests, r_info->remote_pid = 6 table_id=1 <6>[10.294419][0:kworker/0:1:34] shared[1].name = IPCRTR, r_info->remote_pid = 1 table_id=1 <6>[10.295081][0:kworker/0:1:34] shared[2].name = SSM_RTR_MODEM_APPS, r_info->remote_pid = 1 table_id=1 <6>[10.848152][0:kworker/0:1:34] shared[3].name = sys_mon, r_info->remote_pid = 1 table_id=1 <6>[10.863365][0:kworker/0:1:34] shared[4].name = DIAG_2_CMD, r_info->remote_pid = 1 table_id=1 <6>[10.864631][0:kworker/0:1:34] shared[5].name = DIAG_2, r_info->remote_pid = 1 table_id=1 <6>[10.866978][0:kworker/0:1:34] shared[6].name = DIAG_CNTL, r_info->remote_pid = 1 table_id=1 <6>[10.868057][0:kworker/0:1:34] shared[7].name = DIAG_CMD, r_info->remote_pid = 1 table_id=1 <6>[10.869126][0:kworker/0:1:34] shared[8].name = DIAG, r_info->remote_pid = 1 table_id=1 <6>[10.874224][0:kworker/0:1:34] shared[9].name = apr_audio_svc, r_info->remote_pid = 1 table_id=1 <6>[10.874991][0:kworker/0:1:34] shared[10].name = apr_apps2, r_info->remote_pid = 1 table_id=1 <6>[12.453190][0:kworker/0:1:34] shared[1].name = IPCRTR, r_info->remote_pid = 4 table_id=1 <6>[12.454124][0:kworker/0:1:34] shared[2].name = sys_mon, r_info->remote_pid = 4 table_id=1 <6>[12.455103][0:kworker/0:1:34] shared[3].name = APPS_RIVA_CTRL, r_info->remote_pid = 4 table_id=1 <6>[12.456004][0:kworker/0:1:34] shared[4].name = APPS_RIVA_DATA, r_info->remote_pid = 4 table_id=1 <6>[12.583796][0:kworker/0:1:34] shared[5].name = WCNSS_CTRL, r_info->remote_pid = 4 table_id=1 <6>[12.584751][0:kworker/0:1:34] shared[6].name = WLAN_CTRL, r_info->remote_pid = 4 table_id=1 <6>[12.836919][0:kworker/0:1:34] shared[7].name = APPS_RIVA_BT_CMD, r_info->remote_pid = 4 table_id=1 <6>[12.837876][0:kworker/0:1:34] shared[8].name = APPS_RIVA_BT_ACL, r_info->remote_pid = 4 table_id=1 <6>[12.838729][0:kworker/0:1:34] shared[9].name = APPS_RIVA_ANT_CMD, r_info->remote_pid = 4 table_id=1 <6>[12.839399][0:kworker/0:1:34] shared[10].name = APPS_RIVA_ANT_DATA, r_info->remote_pid = 4 table_id=1 <6>[12.843247][0:kworker/0:1:34] shared[11].name = APPS_FM, r_info->remote_pid = 4 table_id=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

這里顯示的都是在啟動的時候掃描smd之后,調用smd_alloc_channel()函數初始化相應的數據結構之后的結果。?
在smd_alloc_channel()函數中,會根據上面的名字,初始化一個platform device!!之后也是會根據這個名字來注冊platform driver。這些platform driver當然可以在/sys/devices/platform/目錄下是看得到的。

//smd相關的platform設備會根據SIM卡或者網絡條件有不同。 root@gtelwifiue:/sys/devices/platform # ls APPS_FM.6 APPS_RIVA_ANT_CMD.6 APPS_RIVA_ANT_DATA.6 APPS_RIVA_BT_ACL.6 APPS_RIVA_BT_CMD.6 APPS_RIVA_CTRL.6 APPS_RIVA_DATA.6 DIAG.0 DIAG_2.0 DIAG_2_CMD.0 DIAG_CMD.0 DIAG_CNTL.0 IPCRTR.0 IPCRTR.6 SSM_RTR_MODEM_APPS.0 SVC0000000e:00000001.1 SVC0000000f:00000001.1 SVC0000000f:00000001.2 SVC00000010:00000002.1 SVC00000016:00000101.1 SVC00000017:00000001.1 SVC00000018:00000001.1 SVC0000001c:00000001.1 SVC0000001c:00000101.1 SVC00000022:00000001.1 SVC0000002b:00000001.1 SVC00000034:00000101.1 SVC000000e8:00000101.1 SVC00000100:00000100.1 SVC00000100:00000100.2 WCNSS_CTRL.6 WLAN_CTRL.6 alarmtimer apr_apps2.0 apr_audio_svc.0 msm_hsusb msm_hsusb_host power reg-dummy regulatory.0 rpm_requests.15 sec-thermistor secgpio_dvs snd-soc-dummy sys_mon.0 sys_mon.6 uevent
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

qc_smd_ch_xxx.log

Primary allocation table: ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN ------------------------------------------------------------------------------- 4|rpm_requests |P|APPS |OPENED |0x00400|0x00188|0x00188|DCCiwRsB|0x00000 | | |RPM |OPENED |0x00400|0x000A0|0x000A0|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 5|rpm_requests |P|MDMSW| Access Restricted | | |RPM | Access Restricted ------------------------------------------------------------------------------- 6|rpm_requests |P|WCNSS| Access Restricted | | |RPM | Access Restricted ------------------------------------------------------------------------------- 7|rpm_requests |P|TZ | Access Restricted | | |RPM | Access Restricted -------------------------------------------------------------------------------APPS <-> MDMSW Primary allocation table: ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN ------------------------------------------------------------------------------- 0|DS |S|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000 ------------------------------------------------------------------------------- 1|IPCRTR |P|APPS |OPENED |0x02000|0x00F28|0x00F28|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x02000|0x00DAC|0x00DAC|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 2|SSM_RTR_MODEM_APPS |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 3|sys_mon |P|APPS |OPENED |0x00400|0x002BE|0x002BE|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x00400|0x00060|0x00060|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 4|DIAG_2_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 ------------------------------------------------------------------------------- 5|DIAG_2 |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 ------------------------------------------------------------------------------- 6|DIAG_CNTL |P|APPS |OPENED |0x02000|0x00083|0x00083|DCCiwrsb|0x00000 | | |MDMSW|OPENED |0x02000|0x00471|0x00471|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 7|DIAG_CMD |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 | | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 ------------------------------------------------------------------------------- 8|DIAG |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 | | |MDMSW|OPENED |0x02000|0x00026|0x00026|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 9|apr_audio_svc |P|APPS |OPENED |0x02000|0x0064E|0x0064E|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x02000|0x01C70|0x01C70|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 10|apr_apps2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 11|DATA1 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 ------------------------------------------------------------------------------- 12|DATA2 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 ------------------------------------------------------------------------------- 13|DATA3 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 ------------------------------------------------------------------------------- 14|DATA4 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 ------------------------------------------------------------------------------- 15|DATA11 |S|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000 ------------------------------------------------------------------------------- 16|DATA40 |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x02000|0x00000|0x00000|dcciwrSb|0x00000 ------------------------------------------------------------------------------- 17|DATA5_CNTL |P|APPS |OPENED |0x00400|0x001AA|0x001AA|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x00400|0x00208|0x00208|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 18|DATA6_CNTL |P|APPS |OPENED |0x00400|0x00338|0x00338|DCCiwrsB|0x00000| | |MDMSW|OPENED |0x00400|0x00363|0x00363|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 19|DATA7_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 20|DATA8_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000| | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 21|DATA9_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 22|DATA12_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000| | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 23|DATA13_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000 | | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 24|DATA14_CNTL |P|APPS |OPENED |0x00400|0x001A2|0x001A2|DCCiwrsB|0x00000| | |MDMSW|OPENED |0x00400|0x001F7|0x001F7|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 25|DATA15_CNTL |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000 | | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 26|DATA16_CNTL |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000| | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 27|DATA40_CNTL |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 | | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 -------------------------------------------------------------------------------APPS <-> WCNSS Primary allocation table: ID|CHANNEL NAME |T|PROC |STATE |FIFO SZ|RDPTR |WRPTR |FLAGS |DATAPEN ------------------------------------------------------------------------------- 1|IPCRTR |P|APPS |OPENED |0x02000|0x00168|0x00168|DCCiwrsB|0x00000 | | |WCNSS|OPENED |0x02000|0x000D8|0x000D8|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 2|sys_mon |P|APPS |OPENED |0x00400|0x00267|0x00267|DCCiwRsB|0x00000 | | |WCNSS|OPENED |0x00400|0x003D4|0x003D4|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 3|APPS_RIVA_CTRL |P|APPS |OPENED |0x02000|0x00062|0x00062|DCCiwrsb|0x00000 | | |WCNSS|OPENED |0x02000|0x00282|0x00282|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 4|APPS_RIVA_DATA |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 | | |WCNSS|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000 ------------------------------------------------------------------------------- 5|WCNSS_CTRL |P|APPS |OPENED |0x02000|0x01638|0x01638|DCCiwrsB|0x00000 | | |WCNSS|OPENED |0x02000|0x00175|0x00175|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 6|WLAN_CTRL |P|APPS |OPENED |0x02000|0x00277|0x00277|DCCiwrsB|0x00000 | | |WCNSS|OPENED |0x02000|0x01115|0x01115|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 7|APPS_RIVA_BT_CMD |P|APPS |OPENED |0x02000|0x0182C|0x0182C|DCCiwrsB|0x00000 | | |WCNSS|OPENED |0x02000|0x01AE5|0x01AE5|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 8|APPS_RIVA_BT_ACL |P|APPS |OPENED |0x02000|0x01904|0x01904|DCCiwrsB|0x00000 | | |WCNSS|OPENED |0x02000|0x015E8|0x015E8|DCCiwrsB|0x00000 ------------------------------------------------------------------------------- 9|APPS_RIVA_ANT_CMD |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000 | | |WCNSS|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 10|APPS_RIVA_ANT_DATA |P|APPS |CLOSED |0x00800|0x00000|0x00000|dcciwrsb|0x00000| | |WCNSS|OPENING|0x00800|0x00000|0x00000|DCCiwrSb|0x00000 ------------------------------------------------------------------------------- 11|APPS_FM |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000 | | |WCNSS|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000 -------------------------------------------------------------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143

每個port名字和對應的生成的節點之間的關系,可以再msm8916.dtsi文件中找得到。?
比如在msm_smd_pkt.c文件中,parse_smdpkt_devicetree()函數中可以看到在讀qcom,smdpkt-dev-name的信息,然后后面會根據這個名字調用device_create()函數!!雖然msm_smd_tty.c對應的”qcom,smdtty”中沒有用”qcom,smdpkt-dev-name”定義設備名字,但一般在alias{}那里都定義了一個別名,好像都是根據這個別名來定的設備的名字!!

aliases {sdhc1 = &sdhc_1; /* SDC1 eMMC slot */sdhc2 = &sdhc_2; /* SDC2 SD card slot *//* smdtty devices */smd0 = &smdtty_ds;smd1 = &smdtty_apps_fm;smd2 = &smdtty_apps_riva_bt_acl;smd3 = &smdtty_apps_riva_bt_cmd;smd4 = &smdtty_mbalbridge;smd5 = &smdtty_apps_riva_ant_cmd;smd6 = &smdtty_apps_riva_ant_data;smd7 = &smdtty_data1;smd8 = &smdtty_data4;smd11 = &smdtty_data11;smd21 = &smdtty_data21;smd36 = &smdtty_loopback;//spi0 = &spi_0; /* SPI0 controller device */i2c0 = &i2c_0; /* I2C0 controller device */i2c1 = &i2c_1; /* I2C1 controller device */i2c5 = &i2c_5; /* I2C5 controller device */i2c6 = &i2c_6; /* I2C6 NFC qup6 device */i2c4 = &i2c_4; /* I2C4 controller device */};qcom,smdtty {compatible = "qcom,smdtty";smdtty_ds: qcom,smdtty-ds {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "DS";};smdtty_apps_fm: qcom,smdtty-apps-fm {qcom,smdtty-remote = "wcnss";qcom,smdtty-port-name = "APPS_FM";};smdtty_apps_riva_bt_acl: smdtty-apps-riva-bt-acl {qcom,smdtty-remote = "wcnss";qcom,smdtty-port-name = "APPS_RIVA_BT_ACL";};smdtty_apps_riva_bt_cmd: qcom,smdtty-apps-riva-bt-cmd {qcom,smdtty-remote = "wcnss";qcom,smdtty-port-name = "APPS_RIVA_BT_CMD";};smdtty_mbalbridge: qcom,smdtty-mbalbridge {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "MBALBRIDGE";};smdtty_apps_riva_ant_cmd: smdtty-apps-riva-ant-cmd {qcom,smdtty-remote = "wcnss";qcom,smdtty-port-name = "APPS_RIVA_ANT_CMD";};smdtty_apps_riva_ant_data: smdtty-apps-riva-ant-data {qcom,smdtty-remote = "wcnss";qcom,smdtty-port-name = "APPS_RIVA_ANT_DATA";};smdtty_data1: qcom,smdtty-data1 {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "DATA1";};smdtty_data4: qcom,smdtty-data4 {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "DATA4";};smdtty_data11: qcom,smdtty-data11 {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "DATA11";};smdtty_data21: qcom,smdtty-data21 {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "DATA21";};smdtty_loopback: smdtty-loopback {qcom,smdtty-remote = "modem";qcom,smdtty-port-name = "LOOPBACK";qcom,smdtty-dev-name = "LOOPBACK_TTY";};};//tty和pkt不一樣,分別對應msm_smd_tty.c和msm_smd_pkt.c文件!!qcom,smdpkt {compatible = "qcom,smdpkt";qcom,smdpkt-data5-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA5_CNTL";qcom,smdpkt-dev-name = "smdcntl0";};qcom,smdpkt-data6-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA6_CNTL";qcom,smdpkt-dev-name = "smdcntl1";};qcom,smdpkt-data7-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA7_CNTL";qcom,smdpkt-dev-name = "smdcntl2";};qcom,smdpkt-data8-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA8_CNTL";qcom,smdpkt-dev-name = "smdcntl3";};qcom,smdpkt-data9-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA9_CNTL";qcom,smdpkt-dev-name = "smdcntl4";};qcom,smdpkt-data12-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA12_CNTL";qcom,smdpkt-dev-name = "smdcntl5";};qcom,smdpkt-data13-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA13_CNTL";qcom,smdpkt-dev-name = "smdcntl6";};qcom,smdpkt-data14-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA14_CNTL";qcom,smdpkt-dev-name = "smdcntl7";};qcom,smdpkt-data15-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA15_CNTL";qcom,smdpkt-dev-name = "smdcntl9";};qcom,smdpkt-data16-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA16_CNTL";qcom,smdpkt-dev-name = "smdcntl10";};qcom,smdpkt-data17-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA17_CNTL";qcom,smdpkt-dev-name = "smdcntl11";};qcom,smdpkt-data22 {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA22";qcom,smdpkt-dev-name = "smd22";};qcom,smdpkt-data23-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA23_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev0";};qcom,smdpkt-data24-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA24_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev1";};qcom,smdpkt-data25-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA25_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev2";};qcom,smdpkt-data26-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA26_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev3";};qcom,smdpkt-data27-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA27_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev4";};qcom,smdpkt-data28-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA28_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev5";};qcom,smdpkt-data29-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA29_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev6";};qcom,smdpkt-data30-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA30_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev7";};qcom,smdpkt-data31-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA31_CNTL";qcom,smdpkt-dev-name = "smdcnt_rev8";};qcom,smdpkt-data40-cntl {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "DATA40_CNTL";qcom,smdpkt-dev-name = "smdcntl8";};qcom,smdpkt-apr-apps2 {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "apr_apps2";qcom,smdpkt-dev-name = "apr_apps2";};qcom,smdpkt-loopback {qcom,smdpkt-remote = "modem";qcom,smdpkt-port-name = "LOOPBACK";qcom,smdpkt-dev-name = "smd_pkt_loopback";};}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239

至此,就知道在哪里會初始化smd channel,然后AP檢測到smd channel之后打開相應的smd channel等內容了。相應的節點創建也可以知道了,但這些節點不管smd channel有沒有打開都會創建!!?
在Ril代碼中,可以看到有打開/dev/smd0等節點。?
這些節點的ops函數組其實都差不多,msm_smd_pkt.c中是smd_pkt_fops,msm_smd_tty中是smd_tty_ops。?
都是在調用到之后,才根據文件名等,再找出來是哪個smd channel,然后調用smd_named_open_on_edge函數打開smd channel。讀寫等操作的話,還要看當初smd_alloc_channel()的時候的相應的channel是packet傳輸還是stream傳輸!!這個估計都不是AP這邊決定的,但可以在smd_alloc_channel()函數中打log查看每個smd channel的類型。

SMD_DBG()這種函數用來輸出smd等log信息。看這些內容可以在/d/ipc_logging下看的到的,如果是SMD_INFO和SMD_DBG內容就是在/d/ipc_logging/smd目錄下。這個是因為~~看下面代碼注釋

//msm_smd_debug_mask這個默認沒有打開debug信息,需要調試更多可以加一個MSM_SMD_DEBUG。 #define SMD_DBG(x...) do { \if (msm_smd_debug_mask & MSM_SMD_DEBUG) \IPC_LOG_SMD(KERN_DEBUG, x); \} while (0) #define SMD_INFO(x...) do { \if (msm_smd_debug_mask & MSM_SMD_INFO) \IPC_LOG_SMD(KERN_INFO, x); \} while (0)//如果smd_log_ctx已經像下面這樣定義,那就是到/d/ipc_logging目錄下找相應名字的文件夾下看 //或者如果不想的話,就可以把smd_log_ctx的定義去掉,直接打印到內核里邊。當然內核的debug level那塊自己需要改一下!! smd_log_ctx = ipc_log_context_create(NUM_LOG_PAGES, "smd", 0); #define IPC_LOG_SMD(level, x...) do { \if (smd_log_ctx) \ipc_log_string(smd_log_ctx, x); \else \printk(level x); \} while (0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

以下是qc_smdpkt_xxx.log:

[ 11247.679255802] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11247.679286896] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11247.679292469] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11247.679332781] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11247.679372521] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11247.679430594] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11247.679436479] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11247.679462677] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11253.959471134] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11253.959521967] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11253.959942853] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11253.959981186] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11253.959982748] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11253.959985248] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11253.960014207] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11253.960050561] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11253.960054780] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11253.960072123] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11260.707648550] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11260.707704800] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11260.708084957] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11260.708118811] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11260.708123290] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11260.708154540] <SMD_PKT>: packet_arrival_worker locking smd_pkt_dev id:0 wakeup source [ 11260.708218654] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11260.708571415] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11260.708609384] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11260.708613863] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11260.708631832] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11264.686568250] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11264.686618146] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11264.686985281] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11264.687013979] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11264.687018406] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11264.687091062] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11264.687141010] <SMD_PKT>: packet_arrival_worker locking smd_pkt_dev id:0 wakeup source [ 11264.687145906] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11264.687185073] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11264.687189917] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11264.687207937] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11271.507262281] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11271.507305719] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11271.507728167] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11271.507759625] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11271.507763583] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11271.507796604] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11271.507822854] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11271.507862333] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11271.507866500] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11271.507884364] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11274.734097551] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11274.734160676] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11274.734588697] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11274.734628333] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11274.734633645] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11274.735154999] <SMD_PKT>: packet_arrival_worker locking smd_pkt_dev id:0 wakeup source [ 11274.735238385] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11274.735276614] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11274.735333906] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11274.735339374] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11274.735361145] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11281.493969135] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11281.494015593] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11281.496142103] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11281.496202520] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11281.496207780] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11281.496255801] <SMD_PKT>: packet_arrival_worker locking smd_pkt_dev id:0 wakeup source [ 11281.496423249] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11281.496776582] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11281.496824707] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11281.496828822] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11281.496848614] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11284.784395968] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11284.784449301] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11284.786411332] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11284.786464301] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11284.786469197] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11284.786477790] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11284.786504093] <SMD_PKT>: packet_arrival_worker locking smd_pkt_dev id:0 wakeup source [ 11284.786811645] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11284.786848363] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11284.786852582] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11284.786870290] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11288.184812488] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11288.184869311] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11288.187012645] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11288.187054572] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11288.187060145] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11288.187062592] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11288.187099884] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11288.187139363] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11288.187143530] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11288.187161499] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0 [ 11294.361732247] <SMD_PKT>: Begin smd_pkt_write on smd_pkt_dev id:0 data_size 13 [ 11294.361781205] <SMD_PKT>: Finished smd_pkt_write on smd_pkt_dev id:0 13 bytes [ 11294.362070320] <SMD_PKT>: ch_notify: DATA event in smd_pkt_dev id:0 [ 11294.362108132] <SMD_PKT>: check_and_wakeup_reader: wake_up smd_pkt_dev id:0 [ 11294.362108288] <SMD_PKT>: smd_pkt_poll sets POLLIN for smd_pkt_dev id: 0 [ 11294.362112403] <SMD_PKT>: check_and_wakeup_writer: 1000 bytes write space in smd_pkt_dev id:0 [ 11294.362459851] <SMD_PKT>: Begin smd_pkt_read on smd_pkt_dev id:0 buffer_size 5086 [ 11294.362544070] <SMD_PKT>: smd_pkt_read unlocked smd_pkt_dev id:0 wakeup_source [ 11294.362548393] <SMD_PKT>: Finished smd_pkt_read on smd_pkt_dev id:0 20 bytes [ 11294.362567299] <SMD_PKT>: check_and_wakeup_reader: No packet in smd_pkt_dev id:0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103

后續,,

smd,smem,smsm等共享內存所占據的內存范圍,大小???
/system/bin/smdexe 這個代碼在哪里,都干嘛的?init.rc里邊這樣定義了一個service,但沒有找到代碼,后續需要說明。

service SMD-daemon /system/bin/smdexeclass mainuser rootgroup system radio inet net_raw
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

這個service注冊還在oemclientreceiver.cpp文件中添加了下面的一段內容。

ProcessInfo allowedProcess[] = {...{ AID_SYSTEM, -1, "/system/bin/smdexe" },... };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

debug需要的一些log抓取

Some diag related issues seen when doing factory/RF tests are hard to debug and related to multiple technical areas, like diag/smd/usb/qmsl based tools.?
we always need comprehensive logs from all sides to begin our analysis and finally find root cause.

Here is a list of what logs are expected to be provided to Qcom to begin analysis.

QMSL log, Port trace log, USB analyzer log, diag debugfs status dump, ipc logging for diag smd channels, and ramdump with matchable elfs.

How the log collected:?
1. Power on device?
2. QPST recognized DIAG port?
3. Echo pr_debug for diagfwd.c/ diagchar_core.c?
4. Collect ipc_logging for smd channels?
5. Enable Port trace log?
6. Start USB analyzer log collection?
7. Begin the test - -when doing test, qmsl log is collected?
8. After see failure, stop Port trace log, stop USB analyzer log collection.?
9. Dump diag debugfs status?
10. Echo c to sysrq-trigger to trigger a panic and collect ramdump.

Where step 3-4 is done by script named “test.bat”?
If no usb analyzer, ignore step 6.?
9-10 is done by script named “diag_panic.bat”

test.bat

adb wait-for-devices?
adb shell “echo 1 >/sys/module/msm_poweroff/parameters/download_mode”?
adb shell “echo 1 > /proc/sys/kernel/sysrq”?
adb shell “echo ‘file diagfwd.c +p’ > /sys/kernel/debug/dynamic_debug/control”?
adb shell “echo ‘file diagchar_core.c +p’ > /sys/kernel/debug/dynamic_debug/control”?
adb shell cat /d/ipc_logging/smd/log_cont

diag_panic.bat

adb shell cat /sys/kernel/debug/diag/work_pending;?
adb shell cat /sys/kernel/debug/diag/status;?
adb shell cat /sys/kernel/debug/diag/table;?
adb shell cat /sys/kernel/debug/diag/mempool;?
adb shell dmesg >dmesg.txt?
adb shell “echo c > /proc/sysrq-trigger”

Appendix:

how to capture port trace log:

  • Bring up “QPST Configuration” and Highlight the port your phone is connected to
  • Do a Shift+right click on the highlighted item Select “Port Trace”?
    If you do not see ‘Port Trace’ in the drop-down menu, you may not have pressed ‘Shift’ while right-clicking
  • Set the value to either Turned Off, Debugging or Debugging & Port Traffic (see below for details) Close “QPST Configuration”?
    The port trace log will be saved in following location
  • Look for QPST Icon on right bottom of the PC, right click & then click on Open the Data Directory . You should see PortTrace_COMx.dbg (where x is the port number).
  • it is better you can enable the port trace before doing test. and disable it immediately after issue reproduced.?
    Too much logs is not preferred and it is hard for us to do filtering and analysis.

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Linux驱动基础:MSM平台AP/CP通信机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    在线草| 五月情婷婷| 成年美女黄网站色大片免费看 | 一级久久精品 | av在线看片| 99久久这里只有精品 | 色香蕉在线 | 久久婷婷丁香 | 91精品国产自产91精品 | 久久综合九色九九 | www.888av| 亚洲视频 一区 | av官网在线 | 很黄很污的视频网站 | 性色视频在线 | 在线观看精品视频 | 婷婷丁香花五月天 | 91专区在线观看 | 免费观看国产精品 | 欧美久久综合 | 成人影视免费看 | 91av在线免费看 | 亚洲国产精品女人久久久 | 在线电影a | 国产一区在线免费观看 | 色噜噜狠狠色综合中国 | 伊人va| 99色视频在线 | 久久成熟 | 欧美成人视 | 国产系列精品av | 国产精品高清在线观看 | 99精彩视频在线观看免费 | 中文字幕最新精品 | 欧美日韩精品网站 | 婷婷福利影院 | 精品亚洲网| 91精品一区二区三区蜜桃 | 亚洲久草网 | 欧美久久久久久久久久久久久 | 又黄又爽又色无遮挡免费 | 午夜精品一区二区三区免费视频 | 波多野结衣最新 | 久久精品久久久久电影 | 国产成人精品午夜在线播放 | 亚洲欧美视频网站 | 亚洲jizzjizz日本少妇 | a国产精品| 亚洲激情六月 | 91成人精品国产刺激国语对白 | 青青草久草在线 | 91精品久久香蕉国产线看观看 | 久久国产精品久久精品国产演员表 | 九月婷婷色 | 欧美日韩国产三级 | 日日夜夜精品免费 | 国产成人一区二区三区在线观看 | 欧美黑人巨大xxxxx | 99精品视频免费观看视频 | 91在线免费播放 | 亚洲乱码精品 | 伊甸园av在线 | 久久久久久久电影 | 日韩免费福利 | 97超级碰| 日韩精品一区二区不卡 | 区一区二区三在线观看 | 亚洲天天在线 | 精品9999 | 日韩精品欧美视频 | 人人看人人| 五月开心六月婷婷 | 国产96av | 久久久久这里只有精品 | 激情小说网站亚洲综合网 | 在线观看亚洲专区 | 国产精品黄网站在线观看 | 欧美一级欧美一级 | 亚洲视频免费 | 国产亚洲一区二区在线观看 | 日韩在线理论 | 色婷婷狠狠五月综合天色拍 | 欧美日韩精品影院 | 国产日韩在线视频 | 中文字幕资源在线 | 99爱这里只有精品 | 一级免费黄色 | 日日干美女| 日日夜夜网站 | 国产日韩欧美在线观看视频 | 黄色三级av| 亚洲 欧洲 国产 日本 综合 | 人人看黄色 | 欧美一级性生活 | 日韩欧美专区 | 国产精品视频大全 | 久热精品国产 | 国产日韩在线视频 | 欧美另类交人妖 | 欧美精品国产综合久久 | 丝袜一区在线 | 亚洲综合在线视频 | 97在线影视| 中文字幕亚洲不卡 | 国产成人亚洲在线观看 | 亚洲欧美日韩在线一区二区 | av资源免费在线观看 | 韩国av免费 | 日韩精品无 | 欧美色图亚洲图片 | 91精品成人 | 国产又粗又猛又爽 | 国产免费观看av | 欧美一区二区三区在线视频观看 | 99爱在线观看 | 人人干人人艹 | 国产精品免费久久久久 | 三级黄色在线 | 99精品国产亚洲 | 91大神免费视频 | 欧美91成人网 | 成 人 黄 色 视频播放1 | 免费国产视频 | 国产精品午夜久久 | 综合久久五月天 | 婷婷丁香五 | 97在线视频免费观看 | 中文字幕久久久精品 | 国产精品一区二区三区视频免费 | 国产精品久久久久久久电影 | 亚洲天堂香蕉 | 欧美亚洲专区 | 黄色免费av | 成人av电影在线 | 久久精品久久久久电影 | 高清国产午夜精品久久久久久 | 久久久片| 日本性生活一级片 | 黄色日本片 | 久久精品观看 | 久久精品老司机 | 91精品视频在线免费观看 | 欧美日韩国产一二三区 | 国产91国语对白在线 | 国产精品涩涩屋www在线观看 | 国产精品热视频 | 免费在线观看成人av | 久久精品永久免费 | 色就是色综合 | 国产精品久久久久久久久久尿 | 亚洲毛片久久 | 久久国产精品99久久久久 | 免费三级a| 成年人国产精品 | 欧美一级黄色视屏 | 色综合久久五月天 | 精品国产一区二区三区四区vr | 中文字幕日韩在线播放 | 久热久草 | 久草在线中文视频 | 亚洲一区视频在线播放 | 欧美日韩国产一区 | 日本精品久久久一区二区三区 | 成人国产精品免费 | 日本黄色一级电影 | 中文字幕高清在线 | av电影在线播放 | 日本精品一区二区三区在线播放视频 | 一区二区精品国产 | 91av视频免费观看 | 国产成人久久av免费高清密臂 | 亚洲精品1区2区3区 超碰成人网 | 亚洲一级电影 | 国产一区在线播放 | 成人在线一区二区三区 | 国产黄色片在线免费观看 | 免费毛片一区二区三区久久久 | 美女视频网站久久 | 果冻av在线 | 中文字幕日本在线观看 | 91精品视频在线免费观看 | 91久久国产综合精品女同国语 | 欧美va天堂在线电影 | av永久网址 | 四虎永久免费网站 | 成人va在线观看 | 国产v欧美| 国际精品久久久久 | 欧美日韩精品电影 | 日韩伦理片一区二区三区 | 久久九九免费 | 99久久er热在这里只有精品15 | 国产福利在线免费观看 | 日韩av女优视频 | 国偷自产中文字幕亚洲手机在线 | a黄色一级 | 热re99久久精品国产66热 | 天天曰天天干 | 日韩在线观看高清 | 日韩有码中文字幕在线 | 国产成人a亚洲精品 | 狠狠色丁香婷婷综合 | 精品成人免费 | 色噜噜日韩精品一区二区三区视频 | 国产欧美精品一区二区三区四区 | 精品国产一区二区三区久久久蜜臀 | 精品一区二区免费在线观看 | 国产黄色片在线免费观看 | 黄色毛片网站在线观看 | 日韩艹 | 精品美女视频 | 久久久免费精品 | 国产色 在线| 特级a毛片 | 国产精品一区二区久久久 | 久久国产精品久久精品 | 69av网| 免费观看久久久 | 超碰在线天天 | 久章操 | 五月天激情综合 | 97精品视频在线播放 | 亚洲伦理一区二区 | av在观看| 久久久久久久av麻豆果冻 | 一级黄色片毛片 | 五月av在线| 狠狠色狠狠色综合日日92 | 国产一区二区高清不卡 | 久久天天躁狠狠躁亚洲综合公司 | 9999精品| 日韩精品在线观看视频 | 在线观看免费福利 | 中文区中文字幕免费看 | 亚洲精品午夜视频 | 久久男人视频 | 天天干天天拍天天操天天拍 | 亚洲精品成人免费 | 一区二区精品在线 | 欧美亚洲精品在线观看 | 国产精品视频免费在线观看 | 就操操久久 | 精品在线视频一区二区三区 | 国产精品久免费的黄网站 | 这里有精品在线视频 | 欧美精品久久久久久久久久 | 日韩高清不卡一区二区三区 | а天堂中文最新一区二区三区 | 欧美一级专区免费大片 | 最新av在线播放 | 999精品 | 97免费在线视频 | 69久久夜色精品国产69 | 国产精品白丝av | 亚洲精品视频在线免费播放 | 888av| 最近中文字幕高清字幕免费mv | 人人澡人人爽欧一区 | 国产拍揄自揄精品视频麻豆 | 中文综合在线 | 欧美在线视频日韩 | 黄色成人影视 | 久久综合九色九九 | 开心激情网五月天 | 999成人网 | 在线日韩av| 久久极品 | 麻豆一级视频 | 免费a视频 | 国产在线欧美在线 | 波多野结衣在线观看一区二区三区 | 在线免费观看黄 | 成人在线免费观看网站 | 欧美va天堂va视频va在线 | 日韩一三区 | 欧美另类高潮 | 国产99一区二区 | 欧美一区二区三区在线播放 | 免费观看视频黄 | 在线免费观看视频a | 亚洲精品视频在线播放 | 国产视频资源在线观看 | 国产精品第一视频 | 91亚洲网 | 中文字幕成人网 | 亚洲国产精品成人女人久久 | 国产精品成人一区二区三区 | 99精品视频播放 | 久久综合久久综合久久综合 | 日日夜日日干 | 国产一区二区日本 | 久久久午夜电影 | 国产一区免费 | 色全色在线资源网 | 欧美最猛性xxxxx免费 | 国产黄色一级大片 | 99精品视频在线播放观看 | 成年人国产精品 | 狠狠色狠狠色综合系列 | 能在线观看的日韩av | 日韩在线视频不卡 | 97网站| 亚洲成人精品久久 | 91在线观看黄| 人人澡超碰碰97碰碰碰软件 | 九九久久免费视频 | 亚州av网站大全 | 日韩大片免费在线观看 | 亚洲欧美国内爽妇网 | 国产一级电影免费观看 | 天天天天色射综合 | 99视频这里只有 | 久久伊人热 | 99婷婷狠狠成为人免费视频 | 911国产精品 | 中文区中文字幕免费看 | 国内外成人免费在线视频 | 麻豆国产视频下载 | 日韩专区一区二区 | 最近的中文字幕大全免费版 | 亚洲精品一区中文字幕乱码 | 国产高清第一页 | 深夜免费小视频 | 国产一区网 | 亚洲精品久久久蜜臀下载官网 | 黄色在线小网站 | 91在线视频免费观看 | 97超碰在线久草超碰在线观看 | 国产精品观看在线亚洲人成网 | 六月激情 | a√资源在线 | 五月婷婷av | 日韩免费一二三区 | 天天干天天操天天搞 | 91影视成人 | 精品国产伦一区二区三区 | av在线等 | 在线观看av的网站 | 精品在线免费观看 | 日日干影院 | 999久久精品 | 国产手机视频在线播放 | 视频一区在线免费观看 | 草久久精品 | www.天堂av| 国产精品久久久久久久久久久久久 | 久久er99热精品一区二区三区 | 美女黄频在线观看 | 亚洲免费一级电影 | 亚洲午夜久久久久久久久电影网 | 91看片淫黄大片一级在线观看 | 99国产精品久久久久久久久久 | 人人爽久久涩噜噜噜网站 | 超黄视频网站 | 九九九热精品免费视频观看 | 天天操夜操视频 | 不卡av在线 | 欧美日本不卡 | 亚洲一区日韩精品 | 国产精品18久久久久久久久 | 婷婷激情五月综合 | 91激情| 国产成人精品av在线 | 国产精品一区一区三区 | 免费黄色a网站 | 国产精品嫩草影院123 | 精品一区二区影视 | 日韩影视在线观看 | 亚洲激情网站免费观看 | 99精品国产高清在线观看 | 国产黄免费看 | 狠狠色噜噜狠狠 | 超碰人人草人人 | 激情婷婷av| 五月天久久久 | 成人久久精品 | 欧美精品黑人性xxxx | 91理论片午午伦夜理片久久 | 国产精品美女久久久 | 亚洲精品裸体 | 美女国内精品自产拍在线播放 | 激情综合色播五月 | 午夜免费福利视频 | 日本精品在线视频 | 成年人视频在线免费 | 亚洲国产一区二区精品专区 | 69精品久久久 | 欧美精品乱码99久久影院 | 九九视频精品免费 | 国产小视频在线播放 | 操操爽| 狠狠操狠狠操 | 国产麻豆果冻传媒在线观看 | 久久久久麻豆v国产 | 91精品视频在线免费观看 | 久久国色夜色精品国产 | 成人免费大片黄在线播放 | 开心激情五月网 | 手机色在线 | 国产二区电影 | 怡春院av | 天天干天天综合 | 黄网站app在线观看免费视频 | 久久视频免费在线观看 | 五月婷婷中文网 | 97精品国自产拍在线观看 | 成人av网站在线观看 | 久久草在线视频国产 | 日韩激情一二三区 | 久久久久久久免费看 | 国产精品爽爽爽 | 亚洲人天堂| 9在线观看免费高清完整版 玖玖爱免费视频 | 西西44人体做爰大胆视频 | 国产99久久99热这里精品5 | 中文字幕精品一区二区三区电影 | 99爱在线| 久久综合九色 | 国产视频一 | 久久香蕉国产精品麻豆粉嫩av | 在线导航av| 精品在线观看一区二区三区 | 久久久免费精品国产一区二区 | 国产成人三级在线 | 日韩高清av | 久久99国产一区二区三区 | 国产一级做a | 少妇性色午夜淫片aaaze | 久久不色 | 三级黄色片子 | 在线天堂中文www视软件 | 最新av网站在线观看 | 久草观看视频 | av中文在线观看 | 亚洲天天 | 狠狠gao| 99久久999久久久精玫瑰 | 99视频免费看 | 在线视频手机国产 | 国产黄在线播放 | 精品欧美在线视频 | 香蕉网在线 | 欧美在线观看视频 | 一区 在线观看 | 久章草在线观看 | 一区三区在线欧 | 日韩美在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 成人av影视观看 | 久久理论影院 | 日韩午夜电影院 | 在线看的av网站 | 91九色老 | 天天艹天天 | 天天操天天操天天操天天操天天操 | 日韩xxxxxxxxx| 青草草在线视频 | 色综合天天综合 | 99精品免费观看 | 日韩欧美一区二区在线 | 国产精品麻豆视频 | 六月色婷 | 日韩免费视频观看 | 高清视频一区 | 国产精品综合久久久久久 | 免费人成在线观看网站 | 亚洲综合成人专区片 | 视频国产区| 国产原创在线 | 中文字幕资源网 国产 | 久久综合久色欧美综合狠狠 | 久久精品女人毛片国产 | 久久五月婷婷丁香社区 | 欧美日韩伦理在线 | 日韩电影一区二区在线 | 日本中文字幕视频 | 在线观看免费av网站 | 日韩区欠美精品av视频 | av日韩中文 | 在线观看日本高清mv视频 | 亚洲欧洲一区二区在线观看 | 97国产超碰在线 | 欧美日韩在线视频一区 | 日韩欧美一级二级 | 99高清视频有精品视频 | 黄色大片免费播放 | 99色国产 | a天堂最新版中文在线地址 久久99久久精品国产 | 一区二区国产精品 | 欧美精品被 | 一区二区三区日韩视频在线观看 | 色偷偷88888欧美精品久久 | 亚州av网站 | 久久视频这里只有精品 | 久久看毛片 | 久久99视频免费 | 欧美韩国日本在线 | 日韩中文字幕a | 国产在线观看99 | 中文字幕在线观看国产 | 亚洲第一区精品 | 天天干天天干天天 | 日韩精品视 | 一区二区欧美激情 | 久久人人爽人人爽人人 | 国产成人久久av977小说 | 五月天久久久久 | 国产清纯在线 | 色爽网站 | 欧美一级免费片 | 欧美极品少妇xbxb性爽爽视频 | 最新国产精品视频 | 日韩精品中文字幕久久臀 | 69av网| 日韩h在线观看 | 99久久精品视频免费 | 色综合久久久久 | 日本动漫做毛片一区二区 | 国产精品色 | 免费涩涩网站 | 香蕉视频免费看 | 国产精品国产三级国产专区53 | 久久久久五月天 | 免费在线观看日韩视频 | 欧美福利在线播放 | 免费观看完整版无人区 | 日本在线观看中文字幕 | 伊人va| 天天插伊人| 亚洲国产成人精品在线 | 69精品视频 | 国产成人亚洲在线观看 | 在线观看一二三区 | 18国产精品白浆在线观看免费 | 91人人澡人人爽人人精品 | 国产成人精品亚洲精品 | 免费精品国产 | 黄色com | 国产精品福利无圣光在线一区 | 中文字幕av免费 | 日韩在线视频观看 | 白丝av在线 | 91免费视频国产 | 欧美日韩国产成人 | 精品播放 | 六月色 | 欧美久久久久久久久久久久久 | 欧美美女激情18p | 一级免费黄视频 | 一区二区视频在线观看免费 | 黄色影院在线免费观看 | 日韩av不卡在线观看 | 国产午夜精品一区二区三区嫩草 | 中文字幕日韩高清 | av怡红院 | 欧美日韩精品影院 | 久久久亚洲影院 | 久久精品视频在线免费观看 | 亚洲黄色区 | av亚洲产国偷v产偷v自拍小说 | 国产成人精品亚洲日本在线观看 | 日韩欧美在线高清 | 天天操天天射天天插 | 亚洲综合视频网 | 国产精品久久久久久久av电影 | 蜜桃视频日韩 | 免费合欢视频成人app | 99视频精品在线 | 欧美精品久久久久久久 | 日本中文字幕在线一区 | 免费在线观看的av网站 | 免费精品国产 | 最新国产中文字幕 | 成人一级电影在线观看 | 亚洲综合视频在线播放 | 欧美日韩国产综合网 | av免费看av | 91女子私密保健养生少妇 | 一级一片免费观看 | 国产日韩在线视频 | 久久综合久久综合久久 | 色婷婷a| www.com黄| 日本精品中文字幕在线观看 | 最新日本中文字幕 | 五月综合激情婷婷 | 中文字幕.av.在线 | 亚洲视频,欧洲视频 | 中文字幕在线播放av | 西西www444| 午夜婷婷在线播放 | 69精品在线| 国产麻豆精品久久一二三 | 日韩精品视频在线观看免费 | 日本三级久久久 | 97人人人| 黄污在线看 | 黄色av网站在线免费观看 | 精品一二三区 | 96精品高清视频在线观看软件特色 | 中文在线中文资源 | 91成人免费视频 | 最新av免费在线 | 日日干夜夜骑 | 色婷婷电影| 国产一区久久 | 成人超碰97| 97色国产| 丁香六月在线观看 | 毛片1000部免费看 | 精品在线视频一区 | 国产精品美女视频 | www久久国产 | 在线国产视频 | 91av电影| 精品国产一区二区在线 | 亚洲视频每日更新 | 精品久久久久久亚洲 | 国产成人一区三区 | 综合色久 | 一区二区三区在线免费观看 | 天堂av在线网址 | 久久涩涩网站 | 色中文字幕在线观看 | 在线亚洲午夜片av大片 | 国产免费黄色 | 黄色小说免费观看 | 狠狠色狠狠色综合日日小说 | 亚洲自拍av在线 | 五月综合色婷婷 | 国产高清在线视频 | 久久久精品欧美一区二区免费 | 91久久影院 | 久久午夜电影网 | 一区二区三区四区五区在线视频 | av高清不卡 | 精品久久免费看 | 丁香花在线视频观看免费 | 免费视频你懂得 | av中文在线观看 | 成人在线电影观看 | 日韩在线观看一区二区三区 | 在线之家官网 | 国产精品理论在线观看 | 久艹在线播放 | 亚洲欧美精品一区二区 | 免费观看性生交大片3 | 97超碰在线资源 | 中文字幕在线观看视频免费 | 天天操欧美| 欧美日韩免费视频 | 国产一级片毛片 | 中文字幕视频三区 | 精品久久久久久综合 | 九色91在线 | 久久96 | 91麻豆精品 | 天天干天天射天天操 | 国产高清av免费在线观看 | 日本精品免费看 | 一区二区三区在线视频观看58 | 日韩视频免费在线 | 日韩在线免费 | 日韩欧美在线国产 | 婷婷久月 | 香蕉视频在线免费 | 午夜视频不卡 | 免费大片av | 四虎在线永久免费观看 | 日韩v在线| 久久久久久久久网站 | aaa免费毛片 | 高清一区二区三区av | 日韩特黄av | 久久免费视频在线观看 | 草久久久久 | 99精品久久久久久久久久综合 | 麻豆视屏 | 黄色三级在线看 | 伊甸园av在线 | 国产精品99爱 | 在线中文字幕av观看 | 狠狠色2019综合网 | 久久a v视频| 日本激情中文字幕 | 亚洲国产一区av | 午夜在线免费视频 | 国产高清视频在线 | 麻豆91精品91久久久 | av免费观看网站 | 在线看国产一区 | 三级在线国产 | 美女黄网站视频免费 | 国产综合在线视频 | 成人国产精品一区二区 | 最近中文字幕完整高清 | 欧美污污视频 | 免费视频你懂得 | 久久激情视频免费观看 | 成 人 黄 色 视频免费播放 | 又色又爽又激情的59视频 | 一区 二区 精品 | 在线日韩av| aaaaaa毛片| 国产亚洲精品成人av久久ww | 国产三级精品三级在线观看 | av高清免费 | 亚洲日本一区二区在线 | 国产无区一区二区三麻豆 | 国产成人高清在线 | 91精品伦理| 国产精品久久久久永久免费 | 豆豆色资源网xfplay | 亚洲精品免费在线观看 | 国产91aaa| 免费看的黄色网 | 天天射天天爱天天干 | 亚洲视屏在线播放 | 亚洲成av人片在线观看香蕉 | 免费av高清 | 亚洲精品国久久99热 | 九七视频在线 | 深爱婷婷激情 | 欧美日韩视频在线一区 | 亚洲高清视频在线观看 | www激情久久 | 精品96久久久久久中文字幕无 | 又黄又刺激的网站 | 久久成人人人人精品欧 | 精品九九久久 | 日韩在线中文字幕视频 | 日韩a在线观看 | 国产精品99久久久久久久久久久久 | 欧美午夜理伦三级在线观看 | 成年人免费在线观看网站 | 精选久久| 亚洲视频 视频在线 | 激情黄色一级片 | av免费观看在线 | 69国产成人综合久久精品欧美 | 九九精品视频在线看 | a特级毛片| 亚洲一二区精品 | 青青啪 | 亚洲视频综合在线 | av网站免费线看精品 | 在线国产能看的 | 国产 在线 高清 精品 | 日韩电影中文字幕在线 | www欧美xxxx| 日韩一区精品 | 国产精品久久久久aaaa | 九九涩涩av台湾日本热热 | 国产亚洲欧美一区 | www色网站 | 日韩欧美精品免费 | 深夜男人影院 | 久久99精品一区二区三区三区 | 国产成人精品亚洲日本在线观看 | 国产专区在线播放 | 91资源在线免费观看 | 亚洲高清视频在线观看免费 | 色综合久久久久综合 | 亚洲欧美日韩国产一区二区 | 亚洲开心激情 | 国产日韩欧美在线播放 | 天天舔天天射天天操 | 97精品视频在线播放 | 字幕网资源站中文字幕 | 国产精品精 | 久久综合九色99 | 最近乱久中文字幕 | 国产成人久久精品77777综合 | 特级aaa毛片 | 久久麻豆视频 | 亚洲精品88欧美一区二区 | 亚洲成免费 | 看av免费网站 | 99精品视频一区二区 | 波多野结衣资源 | 中文字幕免费不卡视频 | 国产日产亚洲精华av | 日日夜夜精品免费观看 | 激情欧美一区二区三区 | 久久综合九色综合网站 | 久久免费福利 | 久久久久女人精品毛片九一 | 免费三级黄 | av成人免费在线观看 | 日韩精品一区二区三区不卡 | 少妇视频一区 | 一区二区三区国 | 国产一区二区免费在线观看 | 天天操天天摸天天干 | 91成人精品 | 色多多视频在线观看 | 五月天婷婷在线播放 | 色婷婷99 | 日日婷婷夜日日天干 | 国产精品高清免费在线观看 | 日本久久免费电影 | 日韩av不卡在线观看 | 亚洲另类视频 | 国产综合精品一区二区三区 | 国产一卡二卡四卡国 | 午夜私人影院久久久久 | 国产无区一区二区三麻豆 | 国产视频日韩视频欧美视频 | 99国产在线观看 | 91亚洲激情 | 日韩精品最新在线观看 | 麻豆国产精品va在线观看不卡 | 五月天激情综合网 | 国产精品6999成人免费视频 | 超碰在线观看97 | 开心丁香婷婷深爱五月 | 中文字幕在线免费看线人 | 中文字幕 国产 一区 | 91久久久久久国产精品 | 99久久99久久精品国产片果冰 | 成人国产精品久久久久久亚洲 | 麻豆一区在线观看 | 天天天干天天天操 | 丁香五婷 | 麻豆国产电影 | 不卡在线一区 | 亚洲欧洲精品视频 | 中文字幕国产视频 | 九草视频在线 | 不卡视频国产 | 色综合久久88色综合天天人守婷 | 国产成人久久77777精品 | 五月香视频在线观看 | 91一区二区三区久久久久国产乱 | 天天干夜夜 | 经典三级一区 | 97天天综合网 | 久久久精品久久日韩一区综合 | 人人舔人人射 | 夜添久久精品亚洲国产精品 | 成人毛片久久 | 天天操天天舔天天干 | 91网在线观看 | 国产精品九九九 | 国产一区二区高清 | 亚洲黄色在线免费观看 | 91精选| 毛片1000部免费看 | 国产精品免费久久久久久久久久中文 | 午夜黄色大片 | 久久艹中文字幕 | 伊人婷婷| 国产精品久久久一区二区 | 亚洲天天干 | 韩国一区二区三区视频 | 国产精品嫩草影视久久久 | 亚洲精品久久久久中文字幕二区 | 国产小视频在线免费观看 | 国产精品久久一卡二卡 | 99re亚洲国产精品 | 成人黄色小说在线观看 | 天堂va欧美va亚洲va老司机 | 日韩在线视频在线观看 | 91成人网在线播放 | 豆豆色资源网xfplay | 欧美午夜精品久久久久 | 97精品久久人人爽人人爽 | 精品久久久久国产 | av综合av| 99操视频 | 成人黄色片在线播放 | 欧美精品三级 | av黄色免费在线观看 | 波多野结衣在线视频一区 | 天堂资源在线观看视频 | 色综合久久中文字幕综合网 | 天天干天天干天天色 | 麻豆国产在线视频 | 中文字幕一二三区 | 国产精品2区 | 精品久久久999| 天天操天天摸天天干 | 射射射av| 亚洲深夜影院 | 久久国产精品免费观看 | 欧美日韩视频一区二区 | 国产日韩亚洲 | 在线观看电影av | 成人免费在线观看入口 | 亚洲欧美日韩国产精品一区午夜 | 国产一级片免费播放 | 亚洲综合视频网 | 9797在线看片亚洲精品 | 中文 一区二区 | 国产精品第72页 | 99热最新| 国产欧美精品一区二区三区四区 | 国产精品久久久视频 | 五月天中文在线 | 精品日韩在线一区 | 超碰人人舔 | 国产手机在线观看 | 国产视频久 | 99精品电影 | 久久免费福利 | 91视频黄色| 欧美小视频在线观看 | 伊人伊成久久人综合网站 | 精品国产一区二区三区久久影院 | 午夜精品久久久久久 | 99久久久久久久久 | 久久草在线免费 | 日韩一区精品 | 日本在线观看一区二区三区 | 国内精品久久久久影院一蜜桃 | 亚洲国产播放 | 99精品在线看| 国产精品精 | 91豆花在线 | 久久久久久久久久久久电影 | 十八岁以下禁止观看的1000个网站 | 欧美一级片在线播放 | 精品视频中文字幕 | 黄色成人免费电影 | 国精产品满18岁在线 | 中文字幕4 | 欧美日韩免费观看一区二区三区 | 九九精品无码 | 欧美日韩亚洲精品在线 | 99久久日韩精品视频免费在线观看 | 美女黄频 | 日日操网 | 欧美日本啪啪无遮挡网站 | 免费无遮挡动漫网站 | 天天做天天爱夜夜爽 | 欧美日韩亚洲精品在线 | 日本精品小视频 | 久久久久久免费毛片精品 | 日韩免费看的电影 | 91传媒免费观看 | 丁香五月亚洲综合在线 | 久久精品波多野结衣 | 亚洲欧美国产视频 | 国产精品资源在线 | 91精品国产综合久久婷婷香蕉 | www.色午夜.com| 亚洲春色成人 | 国内免费久久久久久久久久久 | 亚洲色图美腿丝袜 | 色综合色综合久久综合频道88 | 人人要人人澡人人爽人人dvd | 国产天天爽 | 免费看污在线观看 | 精品一区久久 | 久久五月情影视 | 久久久久网站 | 伊人va | 久久精品激情 | 天天艹天天操 | 免费看黄在线观看 | 成年人免费av网站 | 国产精品一区二区av日韩在线 | 久久久久免费精品国产 | 国产在线播放一区二区三区 | 2021国产在线 | 日本精品久久久久影院 | 欧美色综合 | 久草在线官网 | 国产精品国产自产拍高清av | 日本黄色免费网站 | 伊人丁香| 久久91网| 五月激情av | 国产精品一区二区三区视频免费 | 成人av网站在线播放 | 久久免费黄色网址 | 日韩欧美一区二区在线播放 | 免费看片网站91 | 人人澡人人添人人爽一区二区 | 久草久视频 | 激情视频一区二区三区 | 草久视频在线观看 | 精品国产伦一区二区三区免费 | 国产成人精品一区二区 | 91成人在线观看高潮 | 丝袜制服综合网 | 狠狠狠色丁香婷婷综合激情 | 中国一级片在线观看 | 在线观看av中文字幕 | 在线观看日韩一区 | 久久黄色小说 | 激情视频综合网 | 国产成人99久久亚洲综合精品 | 久久久国产精品免费 | 欧美精品久久久久久久亚洲调教 | 亚洲黄色成人 | 99色 | 久久久久久久久久久免费av |