diff options
4 files changed, 483 insertions, 339 deletions
diff --git a/doc/book-enea-nfv-access-guide-intel/doc/eltf_params_updated.xml b/doc/book-enea-nfv-access-guide-intel/doc/eltf_params_updated.xml index 1db30fd..9143847 100644 --- a/doc/book-enea-nfv-access-guide-intel/doc/eltf_params_updated.xml +++ b/doc/book-enea-nfv-access-guide-intel/doc/eltf_params_updated.xml | |||
| @@ -42,14 +42,14 @@ export PATH=~/bin:$PATH</programlisting></para> | |||
| 42 | correct also compared to the "previous" REL VER in pardoc-distro.xml | 42 | correct also compared to the "previous" REL VER in pardoc-distro.xml |
| 43 | "prev_baseline".</bridgehead> | 43 | "prev_baseline".</bridgehead> |
| 44 | 44 | ||
| 45 | <para id="EneaLinux_REL_VER"><phrase>1.1</phrase></para> | 45 | <para id="EneaLinux_REL_VER"><phrase>2.0</phrase></para> |
| 46 | 46 | ||
| 47 | <para id="Yocto_VER"><phrase>2.1</phrase></para> | 47 | <para id="Yocto_VER"><phrase>2.4</phrase></para> |
| 48 | 48 | ||
| 49 | <para id="Yocto_NAME"><phrase>krogoth</phrase></para> | 49 | <para id="Yocto_NAME"><phrase>rocko</phrase></para> |
| 50 | 50 | ||
| 51 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink | 51 | <para id="ULINK_YOCTO_PROJECT_DOWNLOAD"><ulink |
| 52 | url="http://www.yoctoproject.org/downloads/core/krogoth/21">http://www.yoctoproject.org/downloads/core/krogoth/21</ulink></para> | 52 | url="http://www.yoctoproject.org/downloads/core/rocko/242">http://www.yoctoproject.org/downloads/core/rocko/242</ulink></para> |
| 53 | 53 | ||
| 54 | <para id="ULINK_ENEA_LINUX_URL"><ulink | 54 | <para id="ULINK_ENEA_LINUX_URL"><ulink |
| 55 | url="https://linux.enea.com/6">https://linux.enea.com/6</ulink></para> | 55 | url="https://linux.enea.com/6">https://linux.enea.com/6</ulink></para> |
| @@ -162,4 +162,4 @@ repo sync</programlisting></para> | |||
| 162 | </informaltable></para> | 162 | </informaltable></para> |
| 163 | </section> | 163 | </section> |
| 164 | </section> | 164 | </section> |
| 165 | </section> \ No newline at end of file | 165 | </section> |
diff --git a/doc/book-enea-nfv-access-guide-intel/doc/using_nfv_access_sdks.xml b/doc/book-enea-nfv-access-guide-intel/doc/using_nfv_access_sdks.xml index 4b10d2a..25090c6 100644 --- a/doc/book-enea-nfv-access-guide-intel/doc/using_nfv_access_sdks.xml +++ b/doc/book-enea-nfv-access-guide-intel/doc/using_nfv_access_sdks.xml | |||
| @@ -1,102 +1,137 @@ | |||
| 1 | <?xml version="1.0" encoding="ISO-8859-1"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | 2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" |
| 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | 3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| 4 | <chapter id="workflow"> | 4 | <chapter id="using_sdks"> |
| 5 | <title>Using Enea NFV Access SDKs</title> | 5 | <title>Using the Enea NFV Access SDKs</title> |
| 6 | 6 | ||
| 7 | <para>Enea NFV Access comes with a standard SDK which can be used to develop | 7 | <para>Enea NFV Access comes with two Software Development Kits (SDK), the |
| 8 | user-applications and kernel modules for both host and guest images.</para> | 8 | "Standard SDK" and the "Extensible SDK". Standard SDK can be used to develop |
| 9 | 9 | user-applications and kernel modules on host to run on target device (i.e. | |
| 10 | <para>The standard SDK consists of:</para> | 10 | on ARM, PPC, x86, ..). The standard SDK can also be used for cross debugging |
| 11 | 11 | your kernel or application.</para> | |
| 12 | <itemizedlist> | 12 | |
| 13 | <listitem> | 13 | <para><emphasis role="bold">Benefits of Extensible |
| 14 | <para>Cross-Development Toolchain: cross-compiler and | 14 | SDK:</emphasis><orderedlist> |
| 15 | cross-debugger</para> | ||
| 16 | </listitem> | ||
| 17 | |||
| 18 | <listitem> | ||
| 19 | <para>Libraries, Headers and Symbols that are specific to the | ||
| 20 | image</para> | ||
| 21 | </listitem> | ||
| 22 | |||
| 23 | <listitem> | ||
| 24 | <para>Environment Setup Script which defines the environment | ||
| 25 | variables</para> | ||
| 26 | </listitem> | ||
| 27 | </itemizedlist> | ||
| 28 | |||
| 29 | <para>To install the SDK on your host development machine, there is an | ||
| 30 | installation script available under the Download section on <emphasis | ||
| 31 | role="bold">portal.enea.com</emphasis>:</para> | ||
| 32 | |||
| 33 | <itemizedlist> | ||
| 34 | <listitem> | ||
| 35 | <para>x86_64/install/install-sdk.sh</para> | ||
| 36 | </listitem> | ||
| 37 | </itemizedlist> | ||
| 38 | |||
| 39 | <para>After installing the SDK, a developer will be able to compile and | ||
| 40 | generate executables for the preferred target machine. Cross-gdb | ||
| 41 | (<filename>x86_64-enea-linux-gdb</filename>) is created by the | ||
| 42 | Cross-Development toolchain. It can be used to debug applications on the | ||
| 43 | target platform from the development workstation. For kernel debugging, | ||
| 44 | <command>ftrace</command> and <command>kgdb</command> are enabled on the | ||
| 45 | host sdk image.</para> | ||
| 46 | |||
| 47 | <para>Various user-space tools helpful in the development process, are also | ||
| 48 | provided. The tools include <emphasis role="bold">LatencyTop</emphasis>, | ||
| 49 | <emphasis role="bold">Perf</emphasis>, <emphasis | ||
| 50 | role="bold">CrossTap</emphasis>, <emphasis role="bold">OProfile</emphasis>, | ||
| 51 | <emphasis role="bold">Lttng-ust</emphasis> and <emphasis | ||
| 52 | role="bold">GDBserver</emphasis>.</para> | ||
| 53 | |||
| 54 | <section id="install-crosscomp"> | ||
| 55 | <title>Installing the Cross-Compilation Toolchain</title> | ||
| 56 | |||
| 57 | <para>Before cross-compiling applications for your target, you need to | ||
| 58 | install the corresponding toolchain on your workstation. To do that, | ||
| 59 | simply run the installer and follow the steps included with it:</para> | ||
| 60 | |||
| 61 | <orderedlist> | ||
| 62 | <listitem> | 15 | <listitem> |
| 63 | <para><programlisting>$ ./install-sdk.sh</programlisting>When | 16 | <para>Shared development environment</para> |
| 64 | prompted, select to install the toolchain in the desired directory, | ||
| 65 | referred to as <literal>sdkdir</literal>.</para> | ||
| 66 | |||
| 67 | <para>A default path where the toolchain will be installed will be | ||
| 68 | shown in the prompt. The installer unpacks the environment setup | ||
| 69 | script in <literal>sdkdir</literal> and the toolchain under | ||
| 70 | <literal>sdkdir/sysroots</literal>.</para> | ||
| 71 | |||
| 72 | <note> | ||
| 73 | <para>Choose a unique directory for each toolchain. Installing a | ||
| 74 | second toolchain of any type in the same directory as a previously | ||
| 75 | installed one will break the <literal>$PATH</literal> variable of | ||
| 76 | the first one.</para> | ||
| 77 | </note> | ||
| 78 | </listitem> | 17 | </listitem> |
| 79 | 18 | ||
| 80 | <listitem> | 19 | <listitem> |
| 81 | <para>Setup the toolchain environment for your target by sourcing the | 20 | <para>Easy to add new apps and libraries, modify source of an existing |
| 82 | environment-setup script. Example: <programlisting>$ source sdkdir/environment-setup-corei7-64-enea-linux</programlisting></para> | 21 | component or add new layers/recipes</para> |
| 22 | </listitem> | ||
| 23 | |||
| 24 | <listitem> | ||
| 25 | <para>Shared state for faster builds</para> | ||
| 26 | </listitem> | ||
| 27 | |||
| 28 | <listitem> | ||
| 29 | <para>Devtool support</para> | ||
| 30 | </listitem> | ||
| 31 | |||
| 32 | <listitem> | ||
| 33 | <para>Install SDK once, update, extend as needed</para> | ||
| 34 | </listitem> | ||
| 35 | |||
| 36 | <listitem> | ||
| 37 | <para>Runs on a range of host operating systems (Windows, Mac)</para> | ||
| 38 | </listitem> | ||
| 39 | </orderedlist></para> | ||
| 40 | |||
| 41 | <section id="std_sdk"> | ||
| 42 | <title>Standard SDK</title> | ||
| 43 | |||
| 44 | <para>The Standard SDK consists of:</para> | ||
| 45 | |||
| 46 | <itemizedlist> | ||
| 47 | <listitem> | ||
| 48 | <para>Cross-Development Toolchain: cross-compiler and | ||
| 49 | cross-debugger</para> | ||
| 83 | </listitem> | 50 | </listitem> |
| 84 | </orderedlist> | ||
| 85 | </section> | ||
| 86 | 51 | ||
| 87 | <section id="crosscomp-apps"> | 52 | <listitem> |
| 88 | <title>Cross-Compiling Applications from Command Line</title> | 53 | <para>Libraries, Headers and Symbols that are specific to the |
| 54 | image</para> | ||
| 55 | </listitem> | ||
| 56 | |||
| 57 | <listitem> | ||
| 58 | <para>Environment Setup Script which defines the environment | ||
| 59 | variables</para> | ||
| 60 | </listitem> | ||
| 61 | </itemizedlist> | ||
| 89 | 62 | ||
| 90 | <para>Once the environment-setup script is sourced, you can make your | 63 | <para>To install the SDK on your host development machine, there is an |
| 91 | applications as per usual and get them compiled for your target. Below you | 64 | installation script available under the Download section on <emphasis |
| 92 | see how to cross-compile from command line.</para> | 65 | role="bold">portal.enea.com</emphasis>:</para> |
| 93 | 66 | ||
| 94 | <orderedlist> | 67 | <itemizedlist> |
| 95 | <listitem> | 68 | <listitem> |
| 96 | <para>Create a Makefile for your application. Example: a simple | 69 | <para>x86_64/install/install-sdk.sh</para> |
| 97 | Makefile and application:</para> | 70 | </listitem> |
| 71 | </itemizedlist> | ||
| 72 | |||
| 73 | <para>After installing the SDK, a developer will be able to compile and | ||
| 74 | generate executables for the preferred target machine. Cross-gdb | ||
| 75 | (<filename>x86_64-enea-linux-gdb</filename>) is created by the | ||
| 76 | Cross-Development toolchain. It can be used to debug applications on the | ||
| 77 | target platform from the development workstation. For kernel debugging, | ||
| 78 | <command>ftrace</command> and <command>kgdb</command> are enabled on the | ||
| 79 | host sdk image.</para> | ||
| 80 | |||
| 81 | <para>Various user-space tools helpful in the development process, are | ||
| 82 | also provided. The tools include <emphasis | ||
| 83 | role="bold">LatencyTop</emphasis>, <emphasis role="bold">Perf</emphasis>, | ||
| 84 | <emphasis role="bold">CrossTap</emphasis>, <emphasis | ||
| 85 | role="bold">OProfile</emphasis>, <emphasis | ||
| 86 | role="bold">Lttng-ust</emphasis> and <emphasis | ||
| 87 | role="bold">GDBserver</emphasis>.</para> | ||
| 88 | |||
| 89 | <section id="install-crosscomp"> | ||
| 90 | <title>Installing the Cross-Compilation Toolchain</title> | ||
| 91 | |||
| 92 | <para>Before cross-compiling applications for your target, you need to | ||
| 93 | install the corresponding toolchain on your workstation. To do that, | ||
| 94 | simply run the installer and follow the steps included with it:</para> | ||
| 95 | |||
| 96 | <orderedlist> | ||
| 97 | <listitem> | ||
| 98 | <para><programlisting>$ ./install-sdk.sh</programlisting>When | ||
| 99 | prompted, select to install the toolchain in the desired directory, | ||
| 100 | referred to as <literal>sdkdir</literal>.</para> | ||
| 101 | |||
| 102 | <para>A default path where the toolchain will be installed will be | ||
| 103 | shown in the prompt. The installer unpacks the environment setup | ||
| 104 | script in <literal>sdkdir</literal> and the toolchain under | ||
| 105 | <literal>sdkdir/sysroots</literal>.</para> | ||
| 106 | |||
| 107 | <note> | ||
| 108 | <para>Choose a unique directory for each toolchain. Installing a | ||
| 109 | second toolchain of any type in the same directory as a previously | ||
| 110 | installed one will break the <literal>$PATH</literal> variable of | ||
| 111 | the first one.</para> | ||
| 112 | </note> | ||
| 113 | </listitem> | ||
| 114 | |||
| 115 | <listitem> | ||
| 116 | <para>Setup the toolchain environment for your target by sourcing | ||
| 117 | the environment-setup script. Example: <programlisting>$ source sdkdir/environment-setup-corei7-64-enea-linux</programlisting></para> | ||
| 118 | </listitem> | ||
| 119 | </orderedlist> | ||
| 120 | </section> | ||
| 98 | 121 | ||
| 99 | <programlisting>helloworld:helloworld.o | 122 | <section id="crosscomp-apps"> |
| 123 | <title>Cross-Compiling Applications from Command Line</title> | ||
| 124 | |||
| 125 | <para>Once the environment-setup script is sourced, you can make your | ||
| 126 | applications as per usual and get them compiled for your target. Below | ||
| 127 | you see how to cross-compile from command line.</para> | ||
| 128 | |||
| 129 | <orderedlist> | ||
| 130 | <listitem> | ||
| 131 | <para>Create a Makefile for your application. Example: a simple | ||
| 132 | Makefile and application:</para> | ||
| 133 | |||
| 134 | <programlisting>helloworld:helloworld.o | ||
| 100 | $(CC) -o helloworld helloworld.o | 135 | $(CC) -o helloworld helloworld.o |
| 101 | clean: | 136 | clean: |
| 102 | rm -f *.o helloworld | 137 | rm -f *.o helloworld |
| @@ -105,42 +140,43 @@ int main(void) { | |||
| 105 | printf("Hello World\n"); | 140 | printf("Hello World\n"); |
| 106 | return 0; | 141 | return 0; |
| 107 | }</programlisting> | 142 | }</programlisting> |
| 108 | </listitem> | 143 | </listitem> |
| 109 | 144 | ||
| 110 | <listitem> | 145 | <listitem> |
| 111 | <para>Run <command>make</command> to cross-compile your application | 146 | <para>Run <command>make</command> to cross-compile your application |
| 112 | according to the environment set up:</para> | 147 | according to the environment set up:</para> |
| 113 | 148 | ||
| 114 | <programlisting>$ make</programlisting> | 149 | <programlisting>$ make</programlisting> |
| 115 | </listitem> | 150 | </listitem> |
| 116 | 151 | ||
| 117 | <listitem> | 152 | <listitem> |
| 118 | <para>Deploy the helloworld program to your target and run it:</para> | 153 | <para>Deploy the helloworld program to your target and run |
| 154 | it:</para> | ||
| 119 | 155 | ||
| 120 | <programlisting># ./helloworld | 156 | <programlisting># ./helloworld |
| 121 | hello world</programlisting> | 157 | hello world</programlisting> |
| 122 | </listitem> | 158 | </listitem> |
| 123 | </orderedlist> | 159 | </orderedlist> |
| 124 | </section> | 160 | </section> |
| 125 | 161 | ||
| 126 | <section id="crosscomp-kern-mod"> | 162 | <section id="crosscomp-kern-mod"> |
| 127 | <title>Cross-Compiling Kernel Modules</title> | 163 | <title>Cross-Compiling Kernel Modules</title> |
| 128 | 164 | ||
| 129 | <para>Before cross-compiling kernle modules, you need to make sure the | 165 | <para>Before cross-compiling kernle modules, you need to make sure the |
| 130 | installed toolchain includes the kernel source tree, which should be | 166 | installed toolchain includes the kernel source tree, which should be |
| 131 | available at: | 167 | available at: |
| 132 | <literal>sdkdir/sysroots/targetarch-enea-linux/usr/src/kernel</literal>.</para> | 168 | <literal>sdkdir/sysroots/targetarch-enea-linux/usr/src/kernel</literal>.</para> |
| 133 | 169 | ||
| 134 | <para>Once the environment-setup script is sourced, you can make your | 170 | <para>Once the environment-setup script is sourced, you can make your |
| 135 | kernel modules as usual and get them compiled for your target. Below you | 171 | kernel modules as usual and get them compiled for your target. Below you |
| 136 | see how to cross-compile a kernel module.</para> | 172 | see how to cross-compile a kernel module.</para> |
| 137 | 173 | ||
| 138 | <orderedlist> | 174 | <orderedlist> |
| 139 | <listitem> | 175 | <listitem> |
| 140 | <para>Create a Makefile for the kernel module. Example: a simple | 176 | <para>Create a Makefile for the kernel module. Example: a simple |
| 141 | Makefile and kernel module:</para> | 177 | Makefile and kernel module:</para> |
| 142 | 178 | ||
| 143 | <programlisting>obj-m := hello.o | 179 | <programlisting>obj-m := hello.o |
| 144 | PWD := $(shell pwd) | 180 | PWD := $(shell pwd) |
| 145 | 181 | ||
| 146 | KERNEL_SRC := full path to kernel source tree | 182 | KERNEL_SRC := full path to kernel source tree |
| @@ -171,302 +207,414 @@ module_init(hello_start); | |||
| 171 | module_exit(hello_end); | 207 | module_exit(hello_end); |
| 172 | 208 | ||
| 173 | MODULE_LICENSE("GPL");</programlisting> | 209 | MODULE_LICENSE("GPL");</programlisting> |
| 174 | </listitem> | 210 | </listitem> |
| 175 | 211 | ||
| 176 | <listitem> | 212 | <listitem> |
| 177 | <para>Run <command>make</command> to cross-compile your kernel module | 213 | <para>Run <command>make</command> to cross-compile your kernel |
| 178 | according to the environment set up:</para> | 214 | module according to the environment set up:</para> |
| 179 | 215 | ||
| 180 | <programlisting>$ make</programlisting> | 216 | <programlisting>$ make</programlisting> |
| 181 | </listitem> | 217 | </listitem> |
| 182 | 218 | ||
| 183 | <listitem> | 219 | <listitem> |
| 184 | <para>Deploy the kernel module <literal>hello.ko</literal> to your | 220 | <para>Deploy the kernel module <literal>hello.ko</literal> to your |
| 185 | target and install/remove it:</para> | 221 | target and install/remove it:</para> |
| 186 | 222 | ||
| 187 | <programlisting># insmod hello.ko | 223 | <programlisting># insmod hello.ko |
| 188 | # rmmod hello.ko | 224 | # rmmod hello.ko |
| 189 | # dmesg | 225 | # dmesg |
| 190 | [...] Loading hello module... | 226 | [...] Loading hello module... |
| 191 | [...] Hello, world | 227 | [...] Hello, world |
| 192 | [...] Goodbye, world</programlisting> | 228 | [...] Goodbye, world</programlisting> |
| 193 | </listitem> | 229 | </listitem> |
| 194 | </orderedlist> | 230 | </orderedlist> |
| 195 | </section> | 231 | </section> |
| 196 | |||
| 197 | <section id="deploy-artifacts"> | ||
| 198 | <title>Deploying your artifacts</title> | ||
| 199 | 232 | ||
| 200 | <section id="deploy_onhost"> | 233 | <section id="deploy-artifacts"> |
| 201 | <title>Deploying on host</title> | 234 | <title>Deploying your artifacts</title> |
| 202 | 235 | ||
| 203 | <para>You can use <literal>ssh</literal> to deploy your artifacts on the | 236 | <para>You can use <literal>ssh</literal> to deploy your artifacts on the |
| 204 | host target. For this you will need a network connection to the target, | 237 | host target. For this you will need a network connection to the target, |
| 205 | to use <literal>scp</literal> to copy to the desired location.</para> | 238 | to use <literal>scp</literal> to copy to the desired location.</para> |
| 206 | 239 | ||
| 207 | <para><programlisting># scp helloworld root@<target_ip_address>:/tmp</programlisting></para> | 240 | <programlisting># scp helloworld root@<target_ip_address>:/tmp</programlisting> |
| 208 | </section> | 241 | </section> |
| 209 | 242 | ||
| 210 | <section id="deploy_onguest"> | 243 | <section id="crossdebugging"> |
| 211 | <title>Deploying on guest</title> | 244 | <title>Cross-Debugging on Enea NFV Access</title> |
| 212 | 245 | ||
| 213 | <para>You can deploy your artifacts onto the guest VM running on the | 246 | <para>The cross-debugger (<literal>x86_64-enea-linux-gdb</literal>) is |
| 214 | target, by using TAP Networking. You can use the | 247 | created when installing the SDK on the development machine. It is |
| 215 | <filename>/etc/qemu-ifup</filename> script to create the tap interface | 248 | helpful for debugging both the kernel and user-applications. In order to |
| 216 | on the host and attach it to the existing virtual bridge | 249 | perform this task, we need the following tools to be available on the |
| 217 | (<literal>virbr0</literal>). This bridge interface is created by the | 250 | target machine:</para> |
| 218 | <filename>libvirt</filename> library and can be used to connect to the | ||
| 219 | outside network. To be able to transfer files to the guest via | ||
| 220 | <literal>scp</literal>, port forwarding should be enabled on the host. | ||
| 221 | The script sets iptables rules to forward traffic from a host port to | ||
| 222 | the guest default SSH port (22).</para> | ||
| 223 | 251 | ||
| 224 | <para>Follow the steps below to create this setup:</para> | 252 | <itemizedlist> |
| 225 | |||
| 226 | <orderedlist> | ||
| 227 | <listitem> | 253 | <listitem> |
| 228 | <para>On the host, run the <literal>qemu-ifup</literal> script | 254 | <para>Kgdb – for kernel cross-debugging</para> |
| 229 | located in <literal>/etc</literal> directory:</para> | ||
| 230 | |||
| 231 | <para><programlisting># /etc/qemu-ifup –t tap0 –a 192.168.122.10 –p 1050 –g 22</programlisting></para> | ||
| 232 | |||
| 233 | <itemizedlist> | ||
| 234 | <listitem> | ||
| 235 | <para><emphasis role="bold">tap0</emphasis> - the tap interface | ||
| 236 | name which will be created and added to the virtual bridge | ||
| 237 | (virbr0).</para> | ||
| 238 | </listitem> | ||
| 239 | |||
| 240 | <listitem> | ||
| 241 | <para><emphasis role="bold">192.168.122.10</emphasis> - the IP | ||
| 242 | address of the guest virtual network device. It has to be in the | ||
| 243 | same network with the IP address of the virbr0 interface.</para> | ||
| 244 | </listitem> | ||
| 245 | |||
| 246 | <listitem> | ||
| 247 | <para><emphasis role="bold">1050</emphasis> - the host port | ||
| 248 | which is set to forward traffic from the host to the | ||
| 249 | guest.</para> | ||
| 250 | </listitem> | ||
| 251 | |||
| 252 | <listitem> | ||
| 253 | <para><emphasis role="bold">22</emphasis> - the default SSH | ||
| 254 | guest port used in port forwarding.</para> | ||
| 255 | </listitem> | ||
| 256 | </itemizedlist> | ||
| 257 | </listitem> | 255 | </listitem> |
| 258 | 256 | ||
| 259 | <listitem> | 257 | <listitem> |
| 260 | <para>Launch the virtual machine specifying the newly created tap | 258 | <para>GDBServer – for application cross-debugging</para> |
| 261 | interface:</para> | ||
| 262 | |||
| 263 | <para><programlisting>-device e1000,netdev=net0 \ | ||
| 264 | -netdev tap,id=net0,ifname=tap0,script=no,downscript=no</programlisting></para> | ||
| 265 | </listitem> | 259 | </listitem> |
| 260 | </itemizedlist> | ||
| 266 | 261 | ||
| 267 | <listitem> | 262 | <para>The Host Development image provides both of these tools and has to |
| 268 | <para>On the guest, after logging, configure the virtual network | 263 | be booted on the target machine for cross-debugging sessions.</para> |
| 269 | device and set the default gateway as the <literal>virbr0</literal> | 264 | |
| 270 | ip address:</para> | 265 | <section id="ua_debug_host"> |
| 271 | 266 | <title>User-application Cross-Debugging</title> | |
| 272 | <para><programlisting>ip addr add 192.168.122.10/24 dev enp0s2 | 267 | |
| 273 | ip link set enp0s2 up | 268 | <para>To debug a user-application on host, a TCP connection has to be |
| 274 | ip route add default via 192.168.122.1 dev enp0s2</programlisting></para> | 269 | established between the host and development machines. GDBserver is |
| 275 | </listitem> | 270 | the program which runs on the target machine and allows you to run GDB |
| 271 | on your workstation. Below you can find how a simple | ||
| 272 | <filename>helloworld</filename> application can be debugged using | ||
| 273 | GDBServer and cross-gdb.</para> | ||
| 274 | |||
| 275 | <para>On target, launch the GDBServer, specifying how to communicate | ||
| 276 | with GDB and the name of your program:<programlisting># gdbserver :<port_no> /tmp/helloworld</programlisting>The | ||
| 277 | target will now be listening on the port given as a parameter to the | ||
| 278 | gdbserver. On the development machine, from the | ||
| 279 | <literal><sdkdir></literal>, start the | ||
| 280 | cross-gdb:<programlisting># x86_64-enea-linux-gdb <path_to_the_program>/helloworld</programlisting>Connect | ||
| 281 | the GDB to the target: <programlisting>(gdb) target remote <target_ip_address>:<port_no></programlisting>Now | ||
| 282 | remote debugging is started and the GDB commands are available to | ||
| 283 | debug your program from the target machine.</para> | ||
| 284 | </section> | ||
| 285 | |||
| 286 | <section id="kernel_crossdebug"> | ||
| 287 | <title>Kernel Cross-Debugging</title> | ||
| 288 | |||
| 289 | <para>In order to debug the kernel, a serial connection is required | ||
| 290 | between the development and target machines. Debugging commands will | ||
| 291 | be sent from your workstation to the target machine via a serial | ||
| 292 | port.</para> | ||
| 293 | |||
| 294 | <para>The KGDB kernel options are enabled in the Enea NFV Access Host | ||
| 295 | SDK image and the tool can be used in the following way:</para> | ||
| 296 | |||
| 297 | <itemizedlist> | ||
| 298 | <listitem> | ||
| 299 | <para>On target, once serial communication is established, | ||
| 300 | configure <literal>kgdboc</literal> after the kernel | ||
| 301 | boots:<programlisting># echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc</programlisting></para> | ||
| 302 | </listitem> | ||
| 303 | |||
| 304 | <listitem> | ||
| 305 | <para>In order to connect to gdb via kgdboc, the kernel must first | ||
| 306 | be stopped:<programlisting># echo g > /proc/sysrq-trigger</programlisting></para> | ||
| 307 | </listitem> | ||
| 308 | |||
| 309 | <listitem> | ||
| 310 | <para>Close the console to the target, eg.: <command>Ctrl + | ||
| 311 | ]</command> for a telnet session.</para> | ||
| 312 | </listitem> | ||
| 313 | |||
| 314 | <listitem> | ||
| 315 | <para>On your development machine, start cross-gdb using the | ||
| 316 | vmlinux kernel image as a parameter. The image is located in | ||
| 317 | <filename><sdkdir>/sysroots/corei7-64-enea-linux/boot/</filename> | ||
| 318 | and should be the same as the image found in the | ||
| 319 | <literal>/boot</literal> directory from the | ||
| 320 | target.<programlisting># x86_64-enea-linux-gdb / | ||
| 321 | ./sysroots/corei7-64-enea-linux/boot/vmlinux-4.9.30-intel-pk-standard</programlisting></para> | ||
| 322 | </listitem> | ||
| 276 | 323 | ||
| 277 | <listitem> | 324 | <listitem> |
| 278 | <para>Now you can use <literal>scp</literal> from your development | 325 | <para>Connect GDB to the target machine using target command and |
| 279 | machine to deploy your artifacts on the guest, by giving the host | 326 | the serial device:<programlisting>(gdb) set remotebaud 115200 |
| 280 | port for forwarding as a command parameter: <programlisting>scp -P 1050 helloworld root@target_ip_address:/tmp</programlisting></para> | 327 | (gdb) target remote /dev/ttyS0</programlisting></para> |
| 281 | </listitem> | 328 | </listitem> |
| 329 | </itemizedlist> | ||
| 282 | 330 | ||
| 283 | <listitem> | 331 | <para>The kernel can now be debugged in a similar manner as an |
| 284 | <para>On the host, after finishing the deployment session and | 332 | application program.</para> |
| 285 | stopping the virtual machine, you can use the | 333 | </section> |
| 286 | <literal>qemu-ifdown</literal> script to clean up the configuration | ||
| 287 | on host. The following command will remove the tap interface and all | ||
| 288 | the iptables rules for the specific ip address: <programlisting># /etc/qemu-ifdown –t tap0 –a 192.168.122.10</programlisting>If | ||
| 289 | we need to remove only a particular port forwarding rule from | ||
| 290 | iptables, this should be run: <programlisting># /etc/qemu-ifdown –t tap0 –a 192.168.122.10 –p 1050 –g 22</programlisting></para> | ||
| 291 | </listitem> | ||
| 292 | </orderedlist> | ||
| 293 | </section> | 334 | </section> |
| 294 | </section> | 335 | </section> |
| 295 | 336 | ||
| 296 | <section id="crossdebugging"> | 337 | <section id="esdk"> |
| 297 | <title>Cross-Debugging on Enea NFV Access</title> | 338 | <title>Extensible SDK</title> |
| 298 | 339 | ||
| 299 | <para>The cross-debugger (<literal>x86_64-enea-linux-gdb</literal>) is | 340 | <para>The Extensible SDK provides features that help you easily build an |
| 300 | created when installing the SDK on the development machine. It is helpful | 341 | exsiting or a new component. The Extensible SDK consits of:</para> |
| 301 | for debugging both the kernel and user-applications. In order to perform | ||
| 302 | this task, we need the following tools to be available on the target | ||
| 303 | machine:</para> | ||
| 304 | 342 | ||
| 305 | <itemizedlist> | 343 | <itemizedlist> |
| 306 | <listitem> | 344 | <listitem> |
| 307 | <para>Kgdb – for kernel cross-debugging</para> | 345 | <para>Cross-Development Toolchain</para> |
| 308 | </listitem> | 346 | </listitem> |
| 309 | 347 | ||
| 310 | <listitem> | 348 | <listitem> |
| 311 | <para>GDBServer – for application cross-debugging</para> | 349 | <para>Libraries, Headers and Symbols for x86 architecture</para> |
| 312 | </listitem> | 350 | </listitem> |
| 313 | </itemizedlist> | ||
| 314 | 351 | ||
| 315 | <para>The Host Development image provides both of these tools and has to | 352 | <listitem> |
| 316 | be booted on the target machine for cross-debugging sessions.</para> | 353 | <para>Environment Setup Script which defines the environment |
| 317 | 354 | variables</para> | |
| 318 | <section id="ua_debug_host"> | 355 | </listitem> |
| 319 | <title>User-application Cross-Debugging on Host</title> | ||
| 320 | |||
| 321 | <para>To debug a user-application on host, a TCP connection has to be | ||
| 322 | established between the host and development machines. GDBserver is the | ||
| 323 | program which runs on the target machine and allows you to run GDB on | ||
| 324 | your workstation. Below you can find how a simple | ||
| 325 | <filename>helloworld</filename> application can be debugged using | ||
| 326 | GDBServer and cross-gdb.</para> | ||
| 327 | |||
| 328 | <para>On target, launch the GDBServer, specifying how to communicate | ||
| 329 | with GDB and the name of your program:<programlisting># gdbserver :<port_no> /tmp/helloworld</programlisting>The | ||
| 330 | target will now be listening on the port given as a parameter to the | ||
| 331 | gdbserver. On the development machine, from the | ||
| 332 | <literal><sdkdir></literal>, start the cross-gdb:<programlisting># x86_64-enea-linux-gdb <path_to_the_program>/helloworld</programlisting>Connect | ||
| 333 | the GDB to the target: <programlisting>(gdb) target remote <target_ip_address>:<port_no></programlisting>Now | ||
| 334 | remote debugging is started and the GDB commands are available to debug | ||
| 335 | your program from the target machine.</para> | ||
| 336 | </section> | ||
| 337 | 356 | ||
| 338 | <section id="us_debug_guest"> | 357 | <listitem> |
| 339 | <title>User-application Cross-Debugging on Guest</title> | 358 | <para>Devtool (to add, build and deploy the application to target |
| 359 | device)</para> | ||
| 360 | </listitem> | ||
| 361 | </itemizedlist> | ||
| 340 | 362 | ||
| 341 | <para>To debug a user-application on guest, a TCP connection has to be | 363 | <section id="install-esdk"> |
| 342 | established between the host and development machines. Similarly, as | 364 | <title>Installing the Extensible SDK</title> |
| 343 | when deploying artifacts on guest, for a cross-debugging session, TAP | ||
| 344 | Networking is required.</para> | ||
| 345 | 365 | ||
| 346 | <para>A tap interface should be added to the existing virtual bridge | 366 | <para>To install the Extensible SDK on your host development machine run |
| 347 | (<literal>virbr0</literal>), along with port forwarding rules created in | 367 | the installation script and follow the steps included with it:</para> |
| 348 | iptables. In order to do this, the script | ||
| 349 | <filename>/etc/qemu-ifup</filename> can pe used:</para> | ||
| 350 | 368 | ||
| 351 | <orderedlist> | 369 | <orderedlist> |
| 352 | <listitem> | 370 | <listitem> |
| 353 | <para>On the host, run the script <literal>qemu-ifup</literal> | 371 | <para><programlisting>$ ./install-esdk.sh</programlisting>When |
| 354 | located in <literal>/etc</literal> directory: <programlisting># /etc/qemu-ifup –t tap0 –a 192.168.122.10 –p 1051 –g 1025</programlisting></para> | 372 | prompted, select to install the toolchain in the desired directory, |
| 355 | 373 | referred to as <literal>sdkdir</literal>.</para> | |
| 356 | <itemizedlist> | 374 | |
| 357 | <listitem> | 375 | <para>A default path where the toolchain will be installed will be |
| 358 | <para><emphasis role="bold">tap0</emphasis> - the tap interface | 376 | shown in the prompt. The installer unpacks the environment setup |
| 359 | name which will be created and added to virtual bridge | 377 | script in <literal>sdkdir</literal> and the toolchain under |
| 360 | (virbr0).</para> | 378 | <literal>sdkdir/sysroots</literal>.</para> |
| 361 | </listitem> | 379 | |
| 362 | 380 | <note> | |
| 363 | <listitem> | 381 | <para>Choose a unique directory for each toolchain. Installing a |
| 364 | <para><emphasis role="bold">192.168.122.10</emphasis> - the IP | 382 | second toolchain of any type in the same directory as a previously |
| 365 | address of the guest virtual network device. It has to be in the | 383 | installed one will break the <literal>$PATH</literal> variable of |
| 366 | same network with the IP address of the virbr0 interface.</para> | 384 | the first one.</para> |
| 367 | </listitem> | 385 | </note> |
| 368 | |||
| 369 | <listitem> | ||
| 370 | <para><emphasis role="bold">1051</emphasis> – the host | ||
| 371 | port which is set to forward traffic from the host to the guest | ||
| 372 | and is used by gdb target remote command.</para> | ||
| 373 | </listitem> | ||
| 374 | |||
| 375 | <listitem> | ||
| 376 | <para><emphasis role="bold">1025</emphasis>– the port used | ||
| 377 | by GDBServer on guest for listening.</para> | ||
| 378 | </listitem> | ||
| 379 | </itemizedlist> | ||
| 380 | </listitem> | 386 | </listitem> |
| 381 | 387 | ||
| 382 | <listitem> | 388 | <listitem> |
| 383 | <para>Launch the virtual machine, specifying the newly created tap | 389 | <para>Setup the toolchain environment for your target by sourcing |
| 384 | interface:<programlisting>-device e1000,netdev=net0 \ | 390 | the environment-setup script. Example: <programlisting>$ source sdkdir/environment-setup-corei7-64-enea-linux |
| 385 | -netdev tap,id=net0,ifname=tap0,script=no,downscript=no</programlisting></para> | 391 | SDK environment now set up; additionally you may now run devtool to |
| 392 | perform development tasks. | ||
| 393 | Run devtool --help for further details.</programlisting></para> | ||
| 386 | </listitem> | 394 | </listitem> |
| 395 | </orderedlist> | ||
| 396 | </section> | ||
| 397 | |||
| 398 | <section id="mod_comp_esdk"> | ||
| 399 | <title>Modifying an existing component</title> | ||
| 387 | 400 | ||
| 401 | <orderedlist> | ||
| 388 | <listitem> | 402 | <listitem> |
| 389 | <para>On the guest, after logging, configure the virtual network | 403 | <para>Extract source and add recipe to workspace:</para> |
| 390 | device and set the default gateway to virbr0 ip | 404 | |
| 391 | address:<programlisting>ip addr add 192.168.122.10/24 dev enp0s2 | 405 | <programlisting>$ devtool modify -x recipename myapp /path/to/source</programlisting> |
| 392 | ip link set enp0s2 up | ||
| 393 | ip route add default via 192.168.122.1 dev enp0s2</programlisting></para> | ||
| 394 | </listitem> | 406 | </listitem> |
| 395 | 407 | ||
| 396 | <listitem> | 408 | <listitem> |
| 397 | <para>GDBserver is the program which runs on the guest VM and allows | 409 | <para>Edit the source code and build it:</para> |
| 398 | you to run GDB on your workstation. On the guest, launch GBDserver | 410 | |
| 399 | specifying how to communicate with GDB and the name of your program: | 411 | <programlisting>$ devtool build recipename </programlisting> |
| 400 | <programlisting># gdbserver :1025 /tmp/helloworld</programlisting>The | ||
| 401 | guest is now listening on port 1025, given as a parameter to the | ||
| 402 | gdbserver.</para> | ||
| 403 | </listitem> | 412 | </listitem> |
| 404 | 413 | ||
| 405 | <listitem> | 414 | <listitem> |
| 406 | <para>On the development machine, from the<filename> | 415 | <para>Push source code changes, or generate as patches on top of |
| 407 | <sdkdir></filename>, start the cross-gdb:<programlisting># x86_64-enea-linux-gdb <path_to_the_program>/helloworld</programlisting></para> | 416 | recipe:</para> |
| 417 | |||
| 418 | <programlisting>$ devtool updaterecipe recipename</programlisting> | ||
| 408 | </listitem> | 419 | </listitem> |
| 420 | </orderedlist> | ||
| 421 | </section> | ||
| 422 | |||
| 423 | <section id="add_comp_esdk"> | ||
| 424 | <title>Adding a new component</title> | ||
| 409 | 425 | ||
| 426 | <orderedlist> | ||
| 410 | <listitem> | 427 | <listitem> |
| 411 | <para>Connect GDB to the target:<programlisting>(gdb) target remote <target_ip_address>:1051</programlisting>Now | 428 | <para>Add application to workspace:</para> |
| 412 | remote debugging is started and the GDB commands are available to | 429 | |
| 413 | debug your program from the guest VM.</para> | 430 | <programlisting>$ devtool add myapp /path/to/source</programlisting> |
| 414 | </listitem> | 431 | </listitem> |
| 415 | 432 | ||
| 416 | <listitem> | 433 | <listitem> |
| 417 | <para>On the host, after finishing the cross-debugging session and | 434 | <para>Build it:</para> |
| 418 | stopping the virtual machine, you can use the | 435 | |
| 419 | <filename>qemu-ifdown</filename> script to clean up the | 436 | <programlisting>$ devtool build myapp </programlisting> |
| 420 | configuration on host:<programlisting># /etc/qemu-ifdown -t tap0 -a 192.168.122.10</programlisting></para> | ||
| 421 | </listitem> | 437 | </listitem> |
| 422 | </orderedlist> | 438 | </orderedlist> |
| 423 | </section> | 439 | </section> |
| 424 | 440 | ||
| 425 | <section id="kernel_crossdebug"> | 441 | <section id="create_recipe_esdk"> |
| 426 | <title>Kernel Cross-Debugging</title> | 442 | <title>Creating recipe for a new application </title> |
| 427 | 443 | ||
| 428 | <para>In order to debug the kernel, a serial connection is required | 444 | <para>Devtool provides a number of features that help you easily to |
| 429 | between the development and target machines. Debugging commands will be | 445 | build, test and package software within the extensible SDK, and |
| 430 | sent from your workstation to the target machine via a serial | 446 | optionally deploy it to target device:</para> |
| 431 | port.</para> | ||
| 432 | 447 | ||
| 433 | <para>The KGDB kernel options are enabled in the Enea NFV Access Host | 448 | <para>This example will show how to generate a recipe from the existing |
| 434 | SDK image and the tool can be used in the following way:</para> | 449 | application code and Makefile, edit the recipe in order to provide an |
| 450 | installation path for the application, build the recipe, and deploy the | ||
| 451 | output on a target, or create a DEB package from the recipe and install | ||
| 452 | the package.</para> | ||
| 435 | 453 | ||
| 436 | <itemizedlist> | 454 | <orderedlist> |
| 437 | <listitem> | 455 | <listitem> |
| 438 | <para>On target, once serial communication is established, configure | 456 | <para>Create a simple application and Makefile in |
| 439 | <literal>kgdboc</literal> after the kernel boots:<programlisting># echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc</programlisting></para> | 457 | <literal><workspace_dir>/my_app</literal>:</para> |
| 458 | |||
| 459 | <para><literal><workspace_dir>/my_app/my_hello_app.c</literal></para> | ||
| 460 | |||
| 461 | <programlisting>#include <stdio.h> | ||
| 462 | |||
| 463 | int main(void) | ||
| 464 | { | ||
| 465 | printf("Hello world!\n"); | ||
| 466 | return 0; | ||
| 467 | }</programlisting> | ||
| 468 | |||
| 469 | <para><literal><workspace_dir>/my_app/Makefile</literal></para> | ||
| 470 | |||
| 471 | <programlisting>my_hello_app:</programlisting> | ||
| 440 | </listitem> | 472 | </listitem> |
| 441 | 473 | ||
| 442 | <listitem> | 474 | <listitem> |
| 443 | <para>In order to connect to gdb via kgdboc, the kernel must first | 475 | <para>Generate a recipe (my-hello-recipe) using the source tree of |
| 444 | be stopped:<programlisting># echo g > /proc/sysrq-trigger</programlisting></para> | 476 | the application |
| 477 | (<literal><workspace_dir>/my_app</literal>):</para> | ||
| 478 | |||
| 479 | <programlisting>$ devtool add my-hello-recipe <workspace_dir>/my_app | ||
| 480 | NOTE: Using source tree as build directory since that would be the default for this | ||
| 481 | recipe | ||
| 482 | NOTE: Recipe <SDK_dir>/workspace/recipes/my-hello-recipe/my-hello-recipe.bb has been | ||
| 483 | automatically created; further editing may be required to make it fully functional</programlisting> | ||
| 484 | |||
| 485 | <programlisting>$ cat <SDK_dir>/workspace/recipes/my-hello-recipe/my-hello-recipe.bb | ||
| 486 | # Recipe created by recipetool | ||
| 487 | # This is the basis of a recipe and may need further editing in order to be fully | ||
| 488 | # functional. | ||
| 489 | # (Feel free to remove these comments when editing.) | ||
| 490 | # | ||
| 491 | # Unable to find any files that looked like license statements. Check the | ||
| 492 | # accompanying documentation and source headers and set LICENSE and | ||
| 493 | # LIC_FILES_CHKSUM accordingly. | ||
| 494 | # | ||
| 495 | # NOTE: LICENSE is being set to "CLOSED" to allow you to at least start building - if | ||
| 496 | # this is not accurate with respect to the licensing of the software being built (it | ||
| 497 | # will not be in most cases) you must specify the correct value before using this | ||
| 498 | # recipe for anything other than initial testing/development! | ||
| 499 | LICENSE = "CLOSED" | ||
| 500 | LIC_FILES_CHKSUM = "" | ||
| 501 | |||
| 502 | # No information for SRC_URI yet (only an external source tree was specified) | ||
| 503 | SRC_URI = "" | ||
| 504 | |||
| 505 | |||
| 506 | # NOTE: this is a Makefile-only piece of software, so we cannot generate much of the | ||
| 507 | # recipe automatically - you will need to examine the Makefile yourself and ensure | ||
| 508 | # that the appropriate arguments are passed in. | ||
| 509 | |||
| 510 | do_configure () { | ||
| 511 | # Specify any needed configure commands here | ||
| 512 | : | ||
| 513 | } | ||
| 514 | |||
| 515 | do_compile () { | ||
| 516 | # You will almost certainly need to add additional arguments here | ||
| 517 | oe_runmake | ||
| 518 | } | ||
| 519 | |||
| 520 | do_install () { | ||
| 521 | # NOTE: unable to determine what to put here - there is a Makefile but no | ||
| 522 | # target named "install", so you will need to define this yourself | ||
| 523 | : | ||
| 524 | }</programlisting> | ||
| 445 | </listitem> | 525 | </listitem> |
| 446 | 526 | ||
| 447 | <listitem> | 527 | <listitem> |
| 448 | <para>Close the console to the target, eg.: <command>Ctrl + | 528 | <para>Edit the recipe to provide an installation path for the |
| 449 | ]</command> for a telnet session.</para> | 529 | application:</para> |
| 530 | |||
| 531 | <programlisting>$ devtool edit-recipe my-hello-recipe</programlisting> | ||
| 532 | |||
| 533 | <programlisting>$ cat <SDK_dir>/workspace/recipes/my-hello-recipe/my-hello-recipe.bb | ||
| 534 | ... | ||
| 535 | do_install () { | ||
| 536 | # NOTE: unable to determine what to put here - there is a Makefile but no | ||
| 537 | # target named "install", so you will need to define this yourself | ||
| 538 | install -d ${D}${bindir} | ||
| 539 | install -m 0777 ${S}/my_hello_app ${D}${bindir} | ||
| 540 | } | ||
| 541 | ...</programlisting> | ||
| 450 | </listitem> | 542 | </listitem> |
| 451 | 543 | ||
| 452 | <listitem> | 544 | <listitem> |
| 453 | <para>On your development machine, start cross-gdb using the vmlinux | 545 | <para>Build the recipe:</para> |
| 454 | kernel image as a parameter. The image is located in | 546 | |
| 455 | <filename><sdkdir>/sysroots/corei7-64-enea-linux/boot/</filename> | 547 | <programlisting>$ devtool build my-hello-recipe</programlisting> |
| 456 | and should be the same as the image found in the | 548 | |
| 457 | <literal>/boot</literal> directory from the target.<programlisting># x86_64-enea-linux-gdb / | 549 | <para>The recipe build results can be seen here: |
| 458 | ./sysroots/corei7-64-enea-linux/boot/vmlinux-4.9.30-intel-pk-standard</programlisting></para> | 550 | <literal><SDK_dir>/tmp/work/<arch>-enea-linux/my-hello-recipe/1.0-r0/</literal></para> |
| 459 | </listitem> | 551 | </listitem> |
| 460 | 552 | ||
| 461 | <listitem> | 553 | <listitem> |
| 462 | <para>Connect GDB to the target machine using target command and the | 554 | <para>Deploy the output (in this case, the application) on |
| 463 | serial device:<programlisting>(gdb) set remotebaud 115200 | 555 | target:</para> |
| 464 | (gdb) target remote /dev/ttyS0</programlisting></para> | 556 | |
| 557 | <programlisting>$ devtool deploy-target my-hello-recipe root@<target_ip_address> | ||
| 558 | Parsing recipes..done. | ||
| 559 | NOTE: Successfully deployed | ||
| 560 | <SDK_dir>/tmp/work/<arch>-enea-linux/my-hello-recipe/1.0-r0/image</programlisting> | ||
| 561 | |||
| 562 | <para>As an alternative you can create a DEB package:</para> | ||
| 563 | |||
| 564 | <programlisting>$ devtool package my-hello-recipe | ||
| 565 | ...NOTE: Your packages are in <SDK_dir>/tmp/deploy/deb</programlisting> | ||
| 566 | |||
| 567 | <para>Then copy the DEB package on the target and install it using | ||
| 568 | dpkg:</para> | ||
| 569 | |||
| 570 | <programlisting># dpkg -i my-hello-recipe-1.0-r0.1.<arch>.deb</programlisting> | ||
| 465 | </listitem> | 571 | </listitem> |
| 466 | </itemizedlist> | 572 | </orderedlist> |
| 573 | </section> | ||
| 574 | |||
| 575 | <section id="update_esdk"> | ||
| 576 | <title>Updating and Extending the Extensible SDK</title> | ||
| 577 | |||
| 578 | <para>Update and Extend your Extensible SDK:</para> | ||
| 579 | |||
| 580 | <orderedlist> | ||
| 581 | <listitem> | ||
| 582 | <para>Update your SDK</para> | ||
| 583 | |||
| 584 | <programlisting>$ devtool sdk-update [url]</programlisting> | ||
| 585 | |||
| 586 | <para>The recipe build results can be seen here: | ||
| 587 | <literal><SDK_dir>/tmp/work/<arch>-enea-linux/my-hello-recipe/1.0-r0/</literal></para> | ||
| 588 | </listitem> | ||
| 589 | |||
| 590 | <listitem> | ||
| 591 | <para>Extend your SDK</para> | ||
| 592 | |||
| 593 | <programlisting>$ devtool search package-name | ||
| 594 | $ devtool sdk -install [-s] recipe-name | ||
| 595 | Ex: | ||
| 596 | $ devtool sdk-install meta-extsdk-toolchain</programlisting> | ||
| 597 | |||
| 598 | <para>The recipe build results can be seen here: | ||
| 599 | <literal><SDK_dir>/tmp/work/<arch>-enea-linux/my-hello-recipe/1.0-r0/</literal></para> | ||
| 600 | </listitem> | ||
| 601 | </orderedlist> | ||
| 602 | </section> | ||
| 603 | |||
| 604 | <section id="deploy-artifacts-esdk"> | ||
| 605 | <title>Deploying your artifacts</title> | ||
| 606 | |||
| 607 | <para>You can use <literal>ssh</literal> to deploy your artifacts on the | ||
| 608 | host target. For this you will need a network connection to the target | ||
| 609 | device: </para> | ||
| 610 | |||
| 611 | <programlisting>$ devtool deploytarget myapp device</programlisting> | ||
| 612 | </section> | ||
| 613 | |||
| 614 | <section id="create_docker_image"> | ||
| 615 | <title>Creating and Deploying a Docker image </title> | ||
| 467 | 616 | ||
| 468 | <para>The kernel can now be debugged in a similar manner as an | 617 | <para>You can build a docker image ....</para> |
| 469 | application program.</para> | ||
| 470 | </section> | 618 | </section> |
| 471 | </section> | 619 | </section> |
| 472 | </chapter> \ No newline at end of file | 620 | </chapter> \ No newline at end of file |
diff --git a/doc/book-enea-nfv-access-release-info/doc/about_release.xml b/doc/book-enea-nfv-access-release-info/doc/about_release.xml index 5e48116..0f5e5e5 100644 --- a/doc/book-enea-nfv-access-release-info/doc/about_release.xml +++ b/doc/book-enea-nfv-access-release-info/doc/about_release.xml | |||
| @@ -19,11 +19,11 @@ | |||
| 19 | 19 | ||
| 20 | <itemizedlist> | 20 | <itemizedlist> |
| 21 | <listitem> | 21 | <listitem> |
| 22 | <para>DPDK 17.08</para> | 22 | <para>DPDK 18.02</para> |
| 23 | </listitem> | 23 | </listitem> |
| 24 | 24 | ||
| 25 | <listitem> | 25 | <listitem> |
| 26 | <para>OVS 2.8</para> | 26 | <para>OVS 2.9</para> |
| 27 | </listitem> | 27 | </listitem> |
| 28 | 28 | ||
| 29 | <listitem condition="intel"> | 29 | <listitem condition="intel"> |
| @@ -320,4 +320,4 @@ | |||
| 320 | <para>A detailed list of all security patches included with this release | 320 | <para>A detailed list of all security patches included with this release |
| 321 | is available in the Enea NFV Access Security Report document.</para> | 321 | is available in the Enea NFV Access Security Report document.</para> |
| 322 | </section> | 322 | </section> |
| 323 | </chapter> \ No newline at end of file | 323 | </chapter> |
diff --git a/doc/book-enea-nfv-access-release-info/doc/main_changes.xml b/doc/book-enea-nfv-access-release-info/doc/main_changes.xml index 00cf31f..48e913f 100644 --- a/doc/book-enea-nfv-access-release-info/doc/main_changes.xml +++ b/doc/book-enea-nfv-access-release-info/doc/main_changes.xml | |||
| @@ -17,15 +17,11 @@ | |||
| 17 | 17 | ||
| 18 | <itemizedlist> | 18 | <itemizedlist> |
| 19 | <listitem> | 19 | <listitem> |
| 20 | <para>DPDK 17.08</para> | 20 | <para>DPDK 18.02</para> |
| 21 | </listitem> | 21 | </listitem> |
| 22 | 22 | ||
| 23 | <listitem> | 23 | <listitem> |
| 24 | <para>OVS 2.8</para> | 24 | <para>OVS 2.9</para> |
| 25 | </listitem> | ||
| 26 | |||
| 27 | <listitem condition="arm"> | ||
| 28 | <para>ODP</para> | ||
| 29 | </listitem> | 25 | </listitem> |
| 30 | </itemizedlist> | 26 | </itemizedlist> |
| 31 | </listitem> | 27 | </listitem> |
| @@ -119,4 +115,4 @@ | |||
| 119 | in this release, any applications dependent on these components are not | 115 | in this release, any applications dependent on these components are not |
| 120 | compatible with the current release.</para> | 116 | compatible with the current release.</para> |
| 121 | </section> | 117 | </section> |
| 122 | </chapter> \ No newline at end of file | 118 | </chapter> |
