Closed Bug 852583 Opened 11 years ago Closed 11 years ago

B2G Emulator: support bluetooth emulation

Categories

(Firefox OS Graveyard :: General, defect)

ARM
Gonk (Firefox OS)
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: vicamo, Assigned: vicamo)

References

Details

Attachments

(8 files, 6 obsolete files)

96.60 KB, image/png
Details
7.78 KB, text/plain
Details
181 bytes, text/html
vicamo
: review+
Details
189 bytes, text/html
dhylands
: review+
tzimmermann
: review+
Details
179 bytes, text/html
mwu
: review+
jgriffin
: feedback+
Details
181 bytes, text/html
tzimmermann
: review+
Details
196 bytes, text/html
tzimmermann
: review+
Details
211 bytes, text/html
mwu
: review+
Details
Assignee: nobody → vyang
OS: Linux → Gonk (Firefox OS)
Hardware: x86_64 → ARM
Comment on attachment 726741 [details]
prebuilts/qemu-kernel/arm/kernel-qemu-armv7

Kernel images are too big to be attached in bugzilla. Here is the build instructions:

  1) cd B2G_SOURCE_TOP
  2) . build/envsetup.sh
  3) lunch 1
  4) cd KENER_SOURCE_TOP
  5) ${ANDROID_BUILD_TOP}/external/qemu/distrib/build-kernel.sh \
     --out=${ANDROID_BUILD_TOP}/prebuilts/qemu-kernel/arm \
     --armv7 --verbose

To build goldfish kernel (not goldfish_armv7):

  5) ${ANDROID_BUILD_TOP}/external/qemu/distrib/build-kernel.sh \
     --out=${ANDROID_BUILD_TOP}/prebuilts/qemu-kernel/arm \
     --config=goldfish --verbose

You may omit --verbose to disable the noises. And to config the kernel based on either goldfish_defconfig or goldfish_armv7_defconfig, append --menuconfig like:

  5) ${ANDROID_BUILD_TOP}/external/qemu/distrib/build-kernel.sh \
     --out=${ANDROID_BUILD_TOP}/prebuilts/qemu-kernel/arm \
     --armv7 --menuconfig

Note that you may need libncurse5-dev:amd64 for kernel menuconfig, however B2G needs libncurse5-dev:i386 and they can't co-exist on debian-based distros.
Attachment #726741 - Attachment is obsolete: true
Is this actually putting the full bluetooth stack into the emulator? Could you put the pre-built kernel up on people.m.o?
Flags: needinfo?(vyang)
(In reply to Clint Talbert ( :ctalbert ) from comment #3)
> Is this actually putting the full bluetooth stack into the emulator?

Yes, the emulator will then have full bluetooth support just like a real device.

> Could you put the pre-built kernel up on people.m.o?

Will, but don't know how right now ;)
Flags: needinfo?(vyang)
You'll need this patch to insert a emulated hci device to target for now. Will make it a default in updates later.
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #0)
> Bring up Bluetooth in emulator sucessfully

Current status:

1) target kernel uart device done, can bind hci h4 protocol with success
2) target kernel dummy rfkill driver installed, always returns success
3) emulator hci device creation done, supports multiple instances as well
4) hci traffic between target and host works
5) hciattach service and misc bluetooth related settings in init.goldfish.rc

TODOs:

1) link target rfkill driver with emulator host side
2) emulator hci traffic handling
3) make bluetooth a default enabled hw config, obsoletes attachment 726783 [details] [diff] [review]
4) more bluetooth related init services, settings: bluetoothd, dbus, etc.
5) emulator console commands for automation tests
Github WIP branch for kernel images:
https://github.com/vicamo/b2g_platform_prebuilts_qemu-kernel/tree/bluetooth

Kernel images for 2.6 ARMv7
https://github.com/vicamo/b2g_platform_prebuilts_qemu-kernel/raw/bluetooth/arm/kernel-qemu-armv7
https://github.com/vicamo/b2g_platform_prebuilts_qemu-kernel/raw/bluetooth/arm/vmlinux-qemu-armv7

Kernel images for 2.6 ARMv5
https://github.com/vicamo/b2g_platform_prebuilts_qemu-kernel/raw/bluetooth/arm/kernel-qemu
https://github.com/vicamo/b2g_platform_prebuilts_qemu-kernel/raw/bluetooth/arm/vmlinux-qemu

You don't need libncurse5-dev:amd64 if you don't want to re-configure kernel, and in my opinion, you don't really have to config kernel again. Just rebuild the kernel images locally or download them from above links. Or, you can create two chroots, one for building B2G and another for configuring the kernel.
TODOs 1), 3) done, a few more bits for 2).
Attachment #726783 - Attachment is obsolete: true
TODOs 5): kernel rfkill driver officially supports hardware block. Emulator console commands for testing rfkill are landed as well. Now we can write our first bluetooth test case based on Marionette.

Links in comment #7 are still valid. All binaries are just updated.
It seems qemu has already a working virtual hci device implementation[1]. If we can take advantage of it, we might have a fully functional emulated bluetooth device in target os in a couple of days. :D

[1]: https://github.com/vicamo/b2g_platform_external_qemu/blob/bluetooth/hw/bt-hci.c#L2144
All TODOs listed in comment 6 are done, commits pushed. Emulator BT is now functional :) However, there seems to be two problems: BlueZ version compatibility and Gaia timing issue.

1) The BlueZ shipped in Unagi is from some proprietary source and Mozilla's WebBluetooth implementation depends on some of the proprietary dbus methods like DisconnectAllConnections. We reset to the same commit in external/bluetooth/bluez and external/bluetooth/glib to avoid UnknownMethod errors. Also an assertion in dbus was observed.

2) Gaia issues bluetooth requests even before bluetoothd is ready and results in dbus UnknownService errors and UI lock-up. Need more info.
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #11)
> All TODOs listed in comment 6 are done, commits pushed. Emulator BT is now
> functional :) However, there seems to be two problems: BlueZ version
> compatibility and Gaia timing issue.
> 
> 1) The BlueZ shipped in Unagi is from some proprietary source and Mozilla's
> WebBluetooth implementation depends on some of the proprietary dbus methods
> like DisconnectAllConnections. We reset to the same commit in
> external/bluetooth/bluez and external/bluetooth/glib to avoid UnknownMethod
> errors. Also an assertion in dbus was observed.

Welcome to android. :3

Google implemented all sorts of convenience functions inside android bluez because why the hell not. None of the functions that push around XML exist, all service channels are hardcoded, etc...

We have bug 793977 to implement the linux desktop specific backends for this, but what you're seeing now is part of why google never implemented BT in the emulator. We may just be out of luck for testing some of those things.

> 2) Gaia issues bluetooth requests even before bluetoothd is ready and
> results in dbus UnknownService errors and UI lock-up. Need more info.

Which requests is it issuing, exactly?
DisconnectAllConnections added by qualcomm so this is why we don't see code in aosp.
Wow, didn't realize there was QC additions on top of the google additions. :(
Most people don't realize it. And then their code breaks on pandaboard or emulator.
Hmmm. As much as I hate to ask, do we have any QC specific ifdefs? BTW, this came in with bug 834816.
There are none as far as I know.
QC specific code from codeaurora fixed some of donez compatibility problems and extends LE part. During Bluetooth turn off process disconnecting all ACL connections will be initiated. If we don't use extend bluez api (AOSP version), we still need to do disconnection gracefully one profile by profile, otherwise we could suffer many bugs if the ACL link Link Timeout value is large.
If we disconnect per profile (currently only HFP profile), the time of turning off Bluetooth could take much longer.
So can we just put in a fallback for the functionality to do it the slow way if DisconnectAllConnections doesn't exist? I'm mainly worried about when we start trying to do pandaboard or non-qc-chipset testing.
Attached file gaia-lockup-after-enable-bt.txt (obsolete) —
The last hci command is OGF_HOST_CTL:OCF_READ_SCAN_ENABLE in line 1093, and we have response {status: 0, enable: SCAN_PAGE} in line 1128 of the log file. And in bluez/src/adapter.c, function adapter_mode_changed, it seems that we're going to emit a property signal, but somehow Gaia gets a UnknownService DbusError first, so that signal is never delivered to Gaia and results in UI lock-up.
If DisconnectAllConnections doesn't exist, i think dbus just prints Unknown method error but turning-off thing shall still can work. DisconnectAllConnections in bluez does not do vendor specific HCI command but just tear down ACL link using standard hci command, it won't behave differntly with other Bluetooth wireless chipsets. And yes, it's nice to have centralized graceful shutdown process in gecko. Eric, please correct me if i'm wrong.
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #20)
> Created attachment 729632 [details]
> gaia-lockup-after-enable-bt.txt
> 
> The last hci command is OGF_HOST_CTL:OCF_READ_SCAN_ENABLE in line 1093, and
> we have response {status: 0, enable: SCAN_PAGE} in line 1128 of the log
> file. And in bluez/src/adapter.c, function adapter_mode_changed, it seems
> that we're going to emit a property signal, but somehow Gaia gets a
> UnknownService DbusError first, so that signal is never delivered to Gaia
> and results in UI lock-up.
Also got UnknownService DbusError here after applying your latest patches and run b2g emulator. Logcat shows bluetoothd crashes in some bluez sdp function. (Attachment later)
(In reply to John Lin[:jolin][:jhlin] from comment #22)
> Also got UnknownService DbusError here after applying your latest patches
> and run b2g emulator. Logcat shows bluetoothd crashes in some bluez sdp
> function. (Attachment later)

Great! Maybe that's why Gaia can't get a service.
(In reply to John Lin[:jolin][:jhlin] from comment #22)
> Also got UnknownService DbusError here after applying your latest patches
> and run b2g emulator. Logcat shows bluetoothd crashes in some bluez sdp
> function. (Attachment later)

No much time to work on this recently. But I haven't found a bluetoothd/dbus-daemon crash yet. And bluetoothd had registered itself to dbus, or it should have exited with errors.
Attached file [gaia-lockup-after-enable-bt] success (obsolete) —
Gaia installs onadatperadded callback in line 180. That callback is then called in line 279.
Attachment #729632 - Attachment is obsolete: true
Attached file [gaia-lockup-after-enable-bt] failed (obsolete) —
Gaia installs onadatperadded callback in line 174. That callback is never called near line 278 even BluetoothManager dispatches that signal!
Thanks GinaYeh, the Gaia lock-up problem is now proven bug 847851. I'll then do some more clean-ups and file pull requests for basic Bluetooth emulation support :)
Depends on: 847851
Comment on attachment 731930 [details]
[gaia-lockup-after-enable-bt] success

Bug 847851 is already landed in master branch.
Attachment #731930 - Attachment is obsolete: true
Attachment #731932 - Attachment is obsolete: true
(In reply to John Lin[:jolin][:jhlin] from comment #23)
> Emulator bluetoothd crash log

I still have no luck to reproduce such crash. Let's file a new bug for it later.
Attachment #732219 - Flags: review?(mwu)
Attached file Github PR for platform/system/core (obsolete) —
platform/system/core is not yet a repository in git.mozilla.org/b2g. Its master branch HEAD is actually aosp/ics-plus-aosp.
Attachment #732228 - Flags: review?(mwu)
Attachment #732234 - Flags: review?(htsai)
Attached file Github PR for manifest
Attachment #732252 - Flags: review?(mwu)
Push kernel commits to Github takes a while. I'll file PRs for both kernel source and prebuilt kernel images tomorrow.
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #30)
> (In reply to John Lin[:jolin][:jhlin] from comment #23)
> > Emulator bluetoothd crash log
> 
> I still have no luck to reproduce such crash. Let's file a new bug for it
> later.
Looks like that's a false alarm. After a clean rebuild the crash went away.
Attachment #732655 - Flags: review?(tzimmermann)
Attachment #732656 - Flags: review?(tzimmermann)
I'm currently traveling. I won't get to the review until early net week.
Blocks: 860698
Blocks: 860697
Blocks: 860696
One thing I forgot to mention - for any new files you add with a copyright, make sure it's copyright Mozilla Foundation.
Comment on attachment 732219 [details]
Github PR for platform/build

Merged in Github: https://github.com/mozilla-b2g/platform_build/commit/a56a09f9b3342e5d5cb05699288913035f4f6e48
Attachment #732219 - Flags: review?(mwu) → review+
(In reply to Vicamo Yang (@Telefonica 6F) [:vicamo][:vyang] from comment #32)
> Created attachment 732228 [details]
> Github PR for platform/system/core
> 
> platform/system/core is not yet a repository in git.mozilla.org/b2g. Its
> master branch HEAD is actually aosp/ics-plus-aosp.

Will fork device/generic/goldfish instead.
Comment on attachment 732655 [details]
Github PR for kernel/goldfish

r-'ing this for now.
Attachment #732655 - Flags: review?(tzimmermann) → review-
Attachment #732656 - Flags: review?(tzimmermann) → review-
Deprecates PR for platform/system/core to keep device specific changes in device/.
Attachment #732228 - Attachment is obsolete: true
Attachment #732228 - Flags: review?(mwu)
Attachment #745085 - Flags: review?(mwu)
Comment on attachment 732234 [details]
Github PR for platform/external/qemu

Hi Vicamo,

Sorry for the late response. I just glanced through your patches which look cool, but I feel like I am not confident enough to review them. Do you think you can find another reviewer for your patches?
Attachment #732234 - Flags: review?(htsai)
Comment on attachment 732655 [details]
Github PR for kernel/goldfish

Updated on GitHub.
Attachment #732655 - Flags: review- → review?(tzimmermann)
Attachment #732656 - Flags: review- → review?
Attachment #732234 - Flags: review?
Comment on attachment 732234 [details]
Github PR for platform/external/qemu

May I have your review?
Attachment #732234 - Flags: review?(tzimmermann)
Attachment #732234 - Flags: review?(dhylands)
Attachment #732234 - Flags: review?
Attachment #745085 - Flags: review?(mwu) → review+
Comment on attachment 732252 [details]
Github PR for manifest

You may need to talk to jgriffin about deploying emulator changes when this is ready.
Attachment #732252 - Flags: review?(mwu) → review+
Comment on attachment 732234 [details]
Github PR for platform/external/qemu

I'm not famailiar with this script or this tree, but the changes seem reasonable to me, provided we're not planning on trying to upstream the changes. I made a couple of nit comments on some of the echos.
Attachment #732234 - Flags: review?(dhylands) → review+
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #44)
> Created attachment 745085 [details]
> Github PR for device/generic/goldfish

Merged on Github https://github.com/mozilla-b2g/device_generic_goldfish/commit/b1f212165a53315155cdd942d1ee36d4763989ed
(In reply to Michael Wu [:mwu] from comment #48)
> Comment on attachment 732252 [details]
> Github PR for manifest
> 
> You may need to talk to jgriffin about deploying emulator changes when this
> is ready.

This pull request doesn't depend on other PRs, and even some of other PRs are merged, we still get a working emulator.  Only when all PRs listed are merged, we have bluetooth emulation.  But, for sure, I'll ask jgriffin for deploying these changes after everything is done here.
Comment on attachment 732234 [details]
Github PR for platform/external/qemu

I reviewed the changes and left some suggestions for improving the commits at

>  https://github.com/vicamo/b2g_platform_external_qemu/commit/a45f6219e86ef74a41046d17fbb4f6ebfc8cf388

and

>  https://github.com/vicamo/b2g_platform_external_qemu/commit/08177526b4376a8b10c37ac44eb3b50435a55a8e
Attachment #732234 - Flags: review?(tzimmermann) → review+
Attachment #732655 - Flags: review?(tzimmermann) → review+
Comment on attachment 732656 [details]
Github PR for platform/prebuilts/qemu-kernel

Depends on attachment 732655 [details].
Attachment #732656 - Flags: review? → review+
(In reply to Thomas Zimmermann [:tzimmermann] from comment #52)
> Comment on attachment 732234 [details]
> Github PR for platform/external/qemu

Merged on GitHub https://github.com/mozilla-b2g/platform_external_qemu/commit/64ed2dc60e08783c500b69d8d80a659cc58cad29
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #38)
> Created attachment 732656 [details]
> Github PR for platform/prebuilts/qemu-kernel

Merged on GitHub https://github.com/mozilla-b2g/platform_prebuilts_qemu-kernel/commit/1c1aedebe8b5c854df5fa3bd3690b67859e44388
(In reply to Vicamo Yang [:vicamo][:vyang] from comment #46)
> Comment on attachment 732655 [details]
> Github PR for kernel/goldfish

Merged on GitHub, branch b2g-goldfish-2.6.29 (not part of emulator build repos) https://github.com/mozilla-b2g/kernel_goldfish/commit/5bfbccc708adbd98faae978aed59b5b15351c343
Comment on attachment 732252 [details]
Github PR for manifest

Hi, all necessary parts are now merged, but still need this manifest change to take effects.  Without this manifest, only emulator parts are built.  You should already find an additional goldfish_tty device and a new goldfish_rfkill device.

To land this change, do you think we should have device/generic/goldfish and prebuilts/qemu-kernel forked on git.mozilla.org instead?  Or do you have any other comments?  Thank you.
Attachment #732252 - Flags: feedback?(jgriffin)
Comment on attachment 732252 [details]
Github PR for manifest

I think it's OK as-is.
Attachment #732252 - Flags: feedback?(jgriffin) → feedback+
All PRs are merged.
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
This appears to have busted builds, since the manifest repos may not be synced to git.m.o yet.
The manifest change was backed out because the vcs syncing tool is not currently able to handle new repositories being added to the manifest without releng/it setup.

There is nothing that I know of that points to this code being a problem or broken, this is an infrastructural need to back out.

Backout commit: aa03bc4a8c53d4a11c2a1b460a69afdccba64d10
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Whiteboard: RN5/29
Whiteboard: RN5/29
Since 877290 has been resolved, I've relanded the b2g-manifest change as cb7f3fe24e4093aec411cb3b1fc8a05fe5f7004b
Manifest has been re-landed.
Status: REOPENED → RESOLVED
Closed: 11 years ago11 years ago
Resolution: --- → FIXED
Blocks: 972274
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: