异常解决

异常解决

星期日, 02. 九月 2018 11:58下午 – beautifulzzzz

 

图片 1

1、Install gcc-arm-none-eabi

1. Introduction

Bluez is the default Bluetooth protocol stack on Linux. It should be
present and installed on your Linux distribution. If not, building and
installing from source is not too difficult:

  • Download the latest stable source release of Bluez from here. Unzip
    the compressed file you downloaded.
  • Install the headers and libraries required for Bluez compilation:

图片 2

https://devzone.nordicsemi.com/tutorials/7/ This
link shows that development with GCC and Eclipse, As it say we should
download
extract and configure arm-none-eabi-gcc. But I find it's hard to download arm-none-eabi-gcc in China(You can chose XunLei to download). Besides I find a easy way to install it in Ubuntu-16.04 as following:

2. Download And Install

I follow the blog (Installing Bluez 5.44 onto
Raspbian?)
to install bluez-5.50.

Download the most recent version from the official
page:.

For example, at the time of writing it was 5.50, so I used(on my pi):

wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.50.tar.xz

Then I extracted it and built it:

tar -xf bluez-5.50.tar.xz
cd bluez-5.50

Read the README! It lists the dependencies and the configure
switches:

Install the dependencies first: (glib, dbus, libdbus, udev, etc.)

sudo apt install libdbus-1-dev libudev-dev libical-dev libreadline-dev

note: If you do not install the libdbus-1-dev, you will later get
this strange error:

configure: error: D-Bus >= 1.6 is required

once you’ve installed dependencies, you can configure switches:

./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var  --enable-experimental

then do:

make
sudo make install

It takes maybe 10 minutes to compile. After installing, you should find
bluetoothd in /usr/libexec/bluetooth. You should also see bluetoothd
in /usr/lib/bluetooth.

Go to each of these directories and type

./bluetoothd --version

You’ll note that the one in libexec is new and the one in lib is old.

In order to make sure that d-bus is talking to you new BlueZ 5.50
and not your old BlueZ 5.43, you need to tell systemd to use the new
bluetooth daemon:

sudo vim /lib/systemd/system/bluetooth.service

Make sure the exec.start line points to your new daemon in
/usr/libexec/bluetooth.

For me, that wasn’t enough. No matter what, upon restart I always got
bluetoothd 5.43… So I just created a symlink from the old one to the
new.

First rename the old file:

sudo mv /usr/lib/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd-543.orig

Create the symlink:

sudo ln -s /usr/libexec/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd
sudo systemctl daemon-reload

That should do it.

图片 3

beautifulzzzz@lpc:~$ arm-none-eabi-gcc --version
The program 'arm-none-eabi-gcc' is currently not installed. You can install it by typing:
sudo apt install gcc-arm-none-eabi
beautifulzzzz@lpc:~$ sudo apt install gcc-arm-none-eabi

3. How to use the bluez and hcitool

 

3.1 setup bluetooth service

Start the bluetooth service and enable automatic startup, assuming
you’re using systemd as the init daemon:

sudo systemctl start bluetooth.service
sudo systemctl enable bluetooth.service

2、Download Nordic nRF5x SDK

3.2 hcitool scan for bluetooth devices

Before start scanning make sure that your bluetooth device is turned on
and not blocked, you can check that with the rfkill command:

sudo rfkill list

If the bluetooth device is blocked (soft or hard blocked), unblock it
with the rfkill command again:

sudo rfkill unblock bluetooth

Bring up the bluetooth device with hciconfig command and start scanning,
make sure the target device’s bluetooth is on and It’s discoverable:

sudo hciconfig hci0 up
hcitool scan

Wait few moment to complete the hcitool scan or hcitool lescan, the
results will be something like bellow:

图片 4

图片 5

Here 00:1A:7D:DA:71:0A is the bluetooth MAC address and SHEN-PC is the
name of the bluetooth device, i.e. an PC.

note: use hcitool lescan will forever scan ble devices, if use
ctrl+c stop it, it will show error(ref to LINKS
4
to solve):

hcitool lescan
Set scan parameters failed: Input/output error

Download the least nRF5x SDK
from  (the same to the
arm-none-eabi-gcc, you can chose the XunLei to download) ,and then
extract it in SDK-DIR(as you wish). The following shows the composition
of SDK:

3.3 bluetooth service discovery

Now we have the bluetooth MAC address of the target device, use the
sdptool command to know which services (like DUN, Handsfree audio) are
available on that target device.

sdptool browse 28:ED:6A:A0:26:B7

You can also use the interactive bluetoothctl tool for this purpose.

If the target device is present, you can ping it with l2ping command,
requires root privilege:

➜  bluez-5.50  sudo l2ping 94:87:E0:B3:AC:6F
Ping: 94:87:E0:B3:AC:6F from B8:27:EB:8E:CC:51 (data size 44) ...
44 bytes from 94:87:E0:B3:AC:6F id 0 time 53.94ms
44 bytes from 94:87:E0:B3:AC:6F id 1 time 77.12ms
44 bytes from 94:87:E0:B3:AC:6F id 2 time 38.63ms
44 bytes from 94:87:E0:B3:AC:6F id 3 time 46.13ms
44 bytes from 94:87:E0:B3:AC:6F id 4 time 59.96ms
5 sent, 5 received, 0% loss

So, bluetooth service discovery is useful to determine the type of the
device, like if it’s a bluetooth mp3 player or it’s a keyboard.

图片 6

beautifulzzzz@lpc:~/Documents/nRF5_SDK_12.2.0_f012efa$ tree -L 2
.
├── components
│   ├── ant
│   ├── ble
│   ├── boards
│   ├── device
│   ├── drivers_ext
│   ├── drivers_nrf
│   ├── libraries
│   ├── nfc
│   ├── proprietary_rf
│   ├── sdk_validation.h
│   ├── serialization
│   ├── softdevice
│   └── toolchain
├── documentation
│   ├── index.html
│   ├── license.txt
│   ├── NordicS.jpg
│   ├── nRF5x_series_logo.png
│   └── release_notes.txt
├── examples
│   ├── ant
│   ├── ble_central
│   ├── ble_central_and_peripheral
│   ├── ble_peripheral
│   ├── crypto
│   ├── dfu
│   ├── dtm
│   ├── multiprotocol
│   ├── nfc
│   ├── peripheral
│   ├── proprietary_rf
│   └── readme.txt
├── external
│   ├── cifra_AES128-EAX
│   ├── fatfs
│   ├── freertos
│   ├── licenses_external.txt
│   ├── micro-ecc
│   ├── nano-pb
│   ├── nfc_adafruit_library
│   ├── nrf_cc310
│   ├── protothreads
│   ├── rtx
│   ├── segger_rtt
│   └── tiny-AES128
├── licenses.txt
├── nRF5x_MDK_8_11_1_IAR.msi
├── nRF5x_MDK_8_11_1_Keil4.msi
└── svd
    ├── nrf51.svd
    ├── nrf52840.svd
    └── nrf52.svd

LINKS

  • 1.Bluetooth on Modern Linux by Szymon
    Janc
  • 2.dbus-python
    tutorial
  • 3.Linux bluetooth setup with bluez and
    hcitool
  • 4.hcitool lescan shows I/O
    error

图片 7

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

 

3、Before Use Makefile To Bulid nRF51 Project

To build an example in the SDK you first need to set the toolchain path
in makefile.windows or makefile.posix depending on platform you are
using. That is, the .posix should be edited if your are working on
either Linux or OS X. These files are located in:

<SDK>/components/toolchain/gcc

Open the file in a text editor, and make sure that the
GNU_INSTALL_ROOT variable is pointing to your Gnu tools for ARM
embedded Processors
 install directory.

Correct values for my current setup(my arm-none-eabi-gcc install in
/usr/bin):

GNU_INSTALL_ROOT :=/usr
GNU_VERSION := 4.9.3
GNU_PREFIX := arm-none-eabi

 

4、Use Makefile To Bulid nRF51 Project

Now you can try to build one of the example projects. Will use
the blinky example
here to keep it simple:

Open terminal and change directory to:

<SDK>/examples/peripheral/<board name>/blank/armgcc/

Type ‘make’. GNU Make should start the build using the Makefile and
output the result in the _build directory. If everything works you
should get the output shown in the screenshot below. 

图片 8

If you instead get an error saying something like “the sysem cannot find
the files specified” it typically means that the GNU toolchain path is
set incorrectly. Verify the path in makefile.windows/posix if you get
this.

网站地图xml地图