Android/Bluetooth 初始化流程
来源:互联网 发布:海关数据平台 编辑:程序博客网 时间:2024/05/28 19:24
=========================Kernel Space=========================
1. Board power init
MACHINE_START
init_machine = comet_init
bt_power_init
bluetooth_power
2. HCI device/connection manager, socket init
bt_init()
bt_sysfs_init
sock_register
hci_sock_init
3. HCI UART init( UART LINE DISCIPLINE)
hci_uart_init(open/close/read/write/ioctl,poll...)
h4_init
hci_uart_register_proto
4. Bluetooth Sleep Module,/proc/bluetooth
bluesleep_init()
platform_driver_register(&bluesleep_driver)
5. BT Power switch, RF kill
bluetooth_power_init()
bt_power_probe
6. L2CAP init
l2cap_init()
proto_register(&l2cap_proto, 0)
bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops)
hci_register_proto(&l2cap_hci_proto)
class_create_file(bt_class, &class_attr_l2cap)
7. SCO init
sco_init()
proto_register(&sco_proto, 0)
bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops)
hci_register_proto(&sco_hci_proto)
class_create_file(bt_class, &class_attr_sco)
8. RFCOMM Init
rfcomm_init()
hci_register_cb(&rfcomm_cb)
kthread_run(rfcomm_run, NULL, "krfcommd")
class_create_file(bt_class, &class_attr_rfcomm_dlc)
rfcomm_init_sockets
rfcomm_init_ttys()
9. BNEP Init
bnep_init()
bnep_sock_init()
10. thread running
rfcomm_run
rfcomm_l2sock_create
l2cap_sock_create: sock
l2cap_sock_init: sk
l2cap_sock_bind: sk
l2cap_sock_listen: sk
rfcomm_session_add: session
=========================命令行方式启动BT==============================
1.echo 1 > /sys/class/rfkill/rfkill0/state
*Bluetooth power switch: 1[bluetooth_power(), board_qsc8x50.c]
2. hci_qcomm_init -vvv -e
*hci_qcomm_init-d /dev/ttyHS0 -s 3200000 -i 115200 -r 19200000 (open HSUART COM port and initializeBTS402x)
3. hciattach /dev/ttyHS0 qualcomm 3000000 (HCI LINE DISCIPLINE)
hciattach/dev/ttyHS0 any 200 flow (attach serial device via UART HCI to BlueZstack )
=============user space===================
main()
init_uart()
ioctl(fd, HCIUARTSETPROTO, u->proto)
==============kernel space=================
hci_uart_tty_ioctl()
hci_uart_set_proto()
open()[h4_open()]
hci_uart_register_dev()
hci_register_dev()
hci_register_sysfs()
4. hciconfig hci0 up(open and initialize HCI device) [hdev->name == hci0]
==========user space====================
ctl=socket(AF_BLUETOOTH,SOCK_RAW,BTPROTO_HCI))
ioctl(ctl, HCIGETDEVINFO, (void *) &di)
hci_open_dev(di.dev_id)->bind(dd, (struct sockaddr *) &a, sizeof(a))
cmd_up
ioctl(ctl, HCIDEVUP, hdev)
==========kernel space================
hci_sock_ioctl
hci_dev_open
hci_dev_get
hdev->open [ hci_uart_open(hci_ldisc) ]
_hci_request(hdev, hci_init_req, 0,msecs_to_jiffies(HCI_INIT_TIMEOUT))
hci_init_req
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
......................
===========CMD Flow============================
hci_cmd_task: hci0 cmd 1
hci_send_frame: hci0 type 1 len 3
hci_sock_dev_event: hdev hci0 event 7
hci_send_to_sock: hdev (null) len 8
hci_uart_send_frame: hci0: type 1 len 3
h4_enqueue: hu c658f6c0 skb c662d340
hci_uart_tx_wakeup:
hci_uart_tty_wakeup:
hci_uart_tx_wakeup:
===========Event Flow===========================
h4_recv: hu c658f6c0 count 15 rx_state 0 rx_count 0
h4_recv: Event packet
h4_recv: Event header: evt 0x0e plen 12
h4_check_data_len: len 12 room 1046
h4_recv: Complete data
hci_rx_task: hci0
hci_cc_read_local_features: hci0 status 0x0
hci_cc_read_local_features: hci0 features 0xfffe8ffe9bff598
========================================BT TOOLS=======================================
hciattatch
hciconfig
hciconfig - HCI device configuration utility
Usage:
hciconfig
hciconfig [-a] hciX [command]
Commands:
up Open and initialize HCI device
down Close HCI device
reset Reset HCI device
rstat Reset statistic counters
auth Enable Authentication
noauth Disable Authentication
encrypt Enable Encryption
noencrypt Disable Encryption
piscan Enable Page and Inquiry scan
noscan Disable scan
iscan Enable Inquiry scan
pscan Enable Page scan
ptype [type] Get/Set default packet type
lm [mode] Get/Set default link mode
lp [policy] Get/Set default link policy
name [name] Get/Set local name
class [class] Get/Set class of device
voice [voice] Get/Set voice setting
iac [iac] Get/Set inquiry access code
inqtpl [level] Get/Set inquiry transmit power level
inqmode [mode] Get/Set inquiry mode
inqdata [data] Get/Set inquiry data
inqtype [type] Get/Set inquiry scan type
inqparms [win:int] Get/Set inquiry scan window and interval
pageparms [win:int] Get/Set page scan window and interval
pageto [to] Get/Set page timeout
afhmode [mode] Get/Set AFH mode
sspmode [mode] Get/Set Simple Pairing Mode
aclmtu Set ACL MTU and number of packets
scomtu Set SCO MTU and number of packets
putkey Store link key on the device
delkey Delete link key from the device
oobdata Display local OOB data
commands Display supported commands
features Display device features
version Display version information
revision Display revision information
bttest
hcitool cmd
hcitool scan
hcidump
hcidump -B -w /data/test.cfa [Log HCI packets as FTS btsnoopformat]
hcidump -XVt [Print HCI packets that can be readable with timestamps and payloads]
sdptool
sdptool add -channel=10 HFAG (add HFAG service records to be supported)
sdptool del [record_handle] (remove service from local SDP)
sdptool browse local [Browse all local service records]
l2ping [Run L2CAPping-to-peer device]
========================================android 脚本执行过程===============================
2. init.rc
3. init.qcom.rc
4. init.qcom.bt.sh
1. Board power init
MACHINE_START
init_machine = comet_init
bt_power_init
bluetooth_power
2. HCI device/connection manager, socket init
bt_init()
bt_sysfs_init
sock_register
hci_sock_init
3. HCI UART init( UART LINE DISCIPLINE)
hci_uart_init(open/close/read/write/ioctl,poll...)
h4_init
hci_uart_register_proto
4. Bluetooth Sleep Module,/proc/bluetooth
bluesleep_init()
platform_driver_register(&bluesleep_driver)
5. BT Power switch, RF kill
bluetooth_power_init()
bt_power_probe
6. L2CAP init
l2cap_init()
proto_register(&l2cap_proto, 0)
bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops)
hci_register_proto(&l2cap_hci_proto)
class_create_file(bt_class, &class_attr_l2cap)
7. SCO init
sco_init()
proto_register(&sco_proto, 0)
bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops)
hci_register_proto(&sco_hci_proto)
class_create_file(bt_class, &class_attr_sco)
8. RFCOMM Init
rfcomm_init()
hci_register_cb(&rfcomm_cb)
kthread_run(rfcomm_run, NULL, "krfcommd")
class_create_file(bt_class, &class_attr_rfcomm_dlc)
rfcomm_init_sockets
rfcomm_init_ttys()
9. BNEP Init
bnep_init()
bnep_sock_init()
10. thread running
rfcomm_run
rfcomm_l2sock_create
l2cap_sock_create: sock
l2cap_sock_init: sk
l2cap_sock_bind: sk
l2cap_sock_listen: sk
rfcomm_session_add: session
=========================命令行方式启动BT==============================
1.echo 1 > /sys/class/rfkill/rfkill0/state
*Bluetooth power switch: 1[bluetooth_power(), board_qsc8x50.c]
2. hci_qcomm_init -vvv -e
*hci_qcomm_init-d /dev/ttyHS0 -s 3200000 -i 115200 -r 19200000 (open HSUART COM port and initializeBTS402x)
3. hciattach /dev/ttyHS0 qualcomm 3000000 (HCI LINE DISCIPLINE)
hciattach/dev/ttyHS0 any 200 flow (attach serial device via UART HCI to BlueZstack )
=============user space===================
main()
init_uart()
ioctl(fd, HCIUARTSETPROTO, u->proto)
==============kernel space=================
hci_uart_tty_ioctl()
hci_uart_set_proto()
open()[h4_open()]
hci_uart_register_dev()
hci_register_dev()
hci_register_sysfs()
4. hciconfig hci0 up(open and initialize HCI device) [hdev->name == hci0]
==========user space====================
ctl=socket(AF_BLUETOOTH,SOCK_RAW,BTPROTO_HCI))
ioctl(ctl, HCIGETDEVINFO, (void *) &di)
hci_open_dev(di.dev_id)->bind(dd, (struct sockaddr *) &a, sizeof(a))
cmd_up
ioctl(ctl, HCIDEVUP, hdev)
==========kernel space================
hci_sock_ioctl
hci_dev_open
hci_dev_get
hdev->open [ hci_uart_open(hci_ldisc) ]
_hci_request(hdev, hci_init_req, 0,msecs_to_jiffies(HCI_INIT_TIMEOUT))
hci_init_req
hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
......................
===========CMD Flow============================
hci_cmd_task: hci0 cmd 1
hci_send_frame: hci0 type 1 len 3
hci_sock_dev_event: hdev hci0 event 7
hci_send_to_sock: hdev (null) len 8
hci_uart_send_frame: hci0: type 1 len 3
h4_enqueue: hu c658f6c0 skb c662d340
hci_uart_tx_wakeup:
hci_uart_tty_wakeup:
hci_uart_tx_wakeup:
===========Event Flow===========================
h4_recv: hu c658f6c0 count 15 rx_state 0 rx_count 0
h4_recv: Event packet
h4_recv: Event header: evt 0x0e plen 12
h4_check_data_len: len 12 room 1046
h4_recv: Complete data
hci_rx_task: hci0
hci_cc_read_local_features: hci0 status 0x0
hci_cc_read_local_features: hci0 features 0xfffe8ffe9bff598
========================================BT TOOLS=======================================
hciattatch
hciconfig
hciconfig - HCI device configuration utility
Usage:
hciconfig
hciconfig [-a] hciX [command]
Commands:
up Open and initialize HCI device
down Close HCI device
reset Reset HCI device
rstat Reset statistic counters
auth Enable Authentication
noauth Disable Authentication
encrypt Enable Encryption
noencrypt Disable Encryption
piscan Enable Page and Inquiry scan
noscan Disable scan
iscan Enable Inquiry scan
pscan Enable Page scan
ptype [type] Get/Set default packet type
lm [mode] Get/Set default link mode
lp [policy] Get/Set default link policy
name [name] Get/Set local name
class [class] Get/Set class of device
voice [voice] Get/Set voice setting
iac [iac] Get/Set inquiry access code
inqtpl [level] Get/Set inquiry transmit power level
inqmode [mode] Get/Set inquiry mode
inqdata [data] Get/Set inquiry data
inqtype [type] Get/Set inquiry scan type
inqparms [win:int] Get/Set inquiry scan window and interval
pageparms [win:int] Get/Set page scan window and interval
pageto [to] Get/Set page timeout
afhmode [mode] Get/Set AFH mode
sspmode [mode] Get/Set Simple Pairing Mode
aclmtu Set ACL MTU and number of packets
scomtu Set SCO MTU and number of packets
putkey Store link key on the device
delkey Delete link key from the device
oobdata Display local OOB data
commands Display supported commands
features Display device features
version Display version information
revision Display revision information
bttest
hcitool cmd
hcitool scan
hcidump
hcidump -B -w /data/test.cfa [Log HCI packets as FTS btsnoopformat]
hcidump -XVt [Print HCI packets that can be readable with timestamps and payloads]
sdptool
sdptool add -channel=10 HFAG (add HFAG service records to be supported)
sdptool del [record_handle] (remove service from local SDP)
sdptool browse local [Browse all local service records]
l2ping [Run L2CAPping-to-peer device]
========================================android 脚本执行过程===============================
2. init.rc
3. init.qcom.rc
4. init.qcom.bt.sh
- Android/Bluetooth 初始化流程
- Android Bluetooth初始化流程
- Android/Bluetooth 初始化流程
- Android/Bluetooth 初始化流程
- Android Bluetooth初始化流程
- Android/Bluetooth 初始化流程
- Android/Bluetooth 初始化流程
- android Bluetooth开发基本流程
- Android Bluetooth framework启动流程
- Bluetooth--- Android 蓝牙开发基本流程
- Android: Bluetooth Input 连接流程分析
- Android蓝牙技术Bluetooth使用流程(详解)
- Android Bluetooth蓝牙技术使用流程详解
- Android Bluetooth蓝牙技术使用流程详解
- Android bluetooth 流程分析(一)createBond
- Android的初始化流程
- Android初始化流程
- Android初始化流程
- 内存对齐
- 假如1=5,2=25,3=225,4=1125,那5=?
- 《操作系统概念-第七版》概念复习笔记第7章
- Linux Bluetooth编程(九) SDP层编程
- java 获取鼠标单双击事件
- Android/Bluetooth 初始化流程
- 凸透镜的放大倍数
- javascript里如何获取当前时间
- .net IL 指令速查
- Wireless Tether 无线共享
- Sending and Receiving Packets
- Ext.MessageBox
- ioctl操作ARP缓存表(ZZ)
- DTIM 的含义