73 lines
2.7 KiB
ReStructuredText
73 lines
2.7 KiB
ReStructuredText
|
Porting Layer
|
||
|
=============
|
||
|
|
||
|
nimBLE supports being built as part of different OS, not only their mynewt
|
||
|
RTOS. A porting layer was written for NuttX, which was mostly a copy of
|
||
|
the Linux porting layer.
|
||
|
|
||
|
Modifying the porting layer
|
||
|
---------------------------
|
||
|
|
||
|
NuttX is supported in nimBLE by adding an entry in the porting layer
|
||
|
used to support different OSs. However, nimBLE supports each OS
|
||
|
by generating a configuration header (``syscfg.h``) from YAML configuration
|
||
|
files. If you want to modify the porting layer and change its configuration
|
||
|
you will need to regenerate this header. This process is a bit involved since
|
||
|
nimBLE uses its own ``newt`` build tool to do so and also somewhat assumes it will
|
||
|
be built for their mynewt OS, so it actually may fail to build completely but
|
||
|
it will still get to generate the required files.
|
||
|
|
||
|
So, first is to get the newt tool::
|
||
|
|
||
|
$ cd apps/nimble
|
||
|
$ git clone https://github.com/apache/mynewt-newt
|
||
|
$ cd mynewt-newt
|
||
|
|
||
|
At the moment, you will probably require unstable version
|
||
|
instead of a release so select a known working::
|
||
|
|
||
|
$ git checkout c14c47bb683d
|
||
|
$ ./build.sh
|
||
|
|
||
|
There should be now a ``newt`` binary under ``mynewt-newt/newt``.
|
||
|
Extend your path so that it is visible::
|
||
|
|
||
|
$ export PATH=mynewt-newt/newt:$PATH
|
||
|
|
||
|
Now, create a ``newt`` project::
|
||
|
|
||
|
$ newt new foo
|
||
|
|
||
|
We want latest master version of mynewt OS and stack, so edit
|
||
|
``foo/project.yml`` and change the ``vers`` variable to ``0.0.0``. Now
|
||
|
do::
|
||
|
|
||
|
$ cd foo/
|
||
|
$ newt upgrade
|
||
|
|
||
|
Under ``foo/repos`` there will be a clone of both mynewt and nimble
|
||
|
repo. Since this app already downloads nimble repo outside of ``foo``,
|
||
|
you can delete ``foo/repos/apache-mynewt-nimble`` and simply make a
|
||
|
link to the ``mynewt-nimble`` directory, so that you can work on the
|
||
|
nimBLE code directly.
|
||
|
|
||
|
Now you can make any changes to the ``yml`` files such as
|
||
|
``porting/targets/nuttx/syscfg.yml``. Finally, you can build with::
|
||
|
|
||
|
$ newt build @apache-mynewt-nimble/porting/targets/nuttx
|
||
|
|
||
|
This will most likely fail to complete but the generated headers
|
||
|
should be there. So now copy them to the appropriate location in
|
||
|
the ``nuttx`` target directory::
|
||
|
|
||
|
$ cd foo/
|
||
|
$ cp bin/@apache-mynewt-nimble/porting/targets/nuttx/generated/include/logcfg/logcfg.h \
|
||
|
repos/apache-mynewt-nimble/porting/examples/nuttx/include/logcfg
|
||
|
$ cp bin/@apache-mynewt-nimble/porting/targets/nuttx/generated/include/syscfg/syscfg.h \
|
||
|
repos/apache-mynewt-nimble/porting/examples/nuttx/include/syscfg
|
||
|
|
||
|
If these changes are done to fix a problem with NuttX porting layer in nimBLE, you
|
||
|
should open a pull-request to nimBLE repository to include the updated header files.
|
||
|
It is recommended to mention the issue in NuttX mailing list first to ensure the change
|
||
|
is needed.
|