summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorScott Rifenbark <srifenbark@gmail.com>2017-09-06 14:52:41 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-13 18:00:18 +0100
commitccbfdd795e36ca421b1c169343c1e9a886f515a7 (patch)
tree31c31c3681b76438b501a9ca36be833dc956f753 /documentation
parentd4be6ea72a18074282e3d9bfc0b70a65658736f2 (diff)
downloadpoky-ccbfdd795e36ca421b1c169343c1e9a886f515a7.tar.gz
kernel-dev: Added the host prep for kernel dev to the chapter.
(From yocto-docs rev: 7343f1108808bb3be182af58325f9e3195ff4d8e) Signed-off-by: Scott Rifenbark <srifenbark@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation')
-rw-r--r--documentation/kernel-dev/kernel-dev-common.xml577
1 files changed, 565 insertions, 12 deletions
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml
index de119c3e87..3af52eb352 100644
--- a/documentation/kernel-dev/kernel-dev-common.xml
+++ b/documentation/kernel-dev/kernel-dev-common.xml
@@ -3,20 +3,391 @@
3[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] > 3[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
4 4
5<chapter id='kernel-dev-common'> 5<chapter id='kernel-dev-common'>
6
7<title>Common Tasks</title> 6<title>Common Tasks</title>
8 7
9<para> 8 <para>
10 This chapter presents several common tasks you perform when you 9 This chapter presents several common tasks you perform when you
11 work with the Yocto Project Linux kernel. 10 work with the Yocto Project Linux kernel.
12 These tasks include preparing a layer, modifying an existing recipe, 11 These tasks include preparing your host development system for
13 iterative development, working with your own sources, and incorporating 12 kernel development, preparing a layer, modifying an existing recipe,
14 out-of-tree modules. 13 patching the kernel, iterative development, working with your own sources,
15 <note> 14 and incorporating out-of-tree modules.
16 The examples presented in this chapter work with the Yocto Project 15 <note>
17 1.2.2 Release and forward. 16 The examples presented in this chapter work with the Yocto Project
18 </note> 17 2.4 Release and forward.
19</para> 18 </note>
19 </para>
20
21 <section id='preparing-the-build-host-to-work-on-the-kernel'>
22 <title>Preparing the Build Host to Work on the Kernel</title>
23
24 <para>
25 Before you can do any kernel development, you need to be
26 sure your build host is set up to use the Yocto Project.
27 For information on how to get set up, see the
28 "<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Setting Up to Use the Yocto Project</ulink>"
29 section in the Yocto Project Development Manual.
30 Part of preparing the system is creating a local Git
31 repository of the
32 <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
33 (<filename>poky</filename>) on your system.
34 Follow the steps in the
35 "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
36 section in the Yocto Project Development Manual to set up your
37 Source Directory.
38 <note>
39 Be sure you check out the appropriate development branch or
40 by tag to get the version of Yocto Project you want.
41 See the
42 "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
43 and
44 "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
45 sections in the Yocto Project Development Manual for more
46 information.
47 </note>
48 </para>
49
50 <para>
51 Kernel development is best accomplished using
52 <ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename></ulink>
53 and not through traditional kernel workflow methods.
54 The remainder of this section provides information for both
55 scenarios.
56 </para>
57
58 <section id='getting-ready-to-develop-using-devtool'>
59 <title>Getting Ready to Develop using <filename>devtool</filename></title>
60
61 <para>
62 Follow these steps to prepare to update the kernel image using
63 <filename>devtool</filename>.
64 Completing this procedure leaves you with a clean kernel image
65 and ready to make modifications as described in the
66 "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
67 section:
68 <orderedlist>
69 <listitem><para>
70 <emphasis>Initialize the BitBake Environment:</emphasis>
71 Before building an extensible SDK, you need to
72 initialize the BitBake build environment by sourcing a
73 build environment script
74 (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>
75 or
76 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>):
77 <literallayout class='monospaced'>
78 $ cd ~/poky
79 $ source oe-init-build-env
80 </literallayout>
81 <note>
82 The previous commands assume the
83 <ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
84 (i.e. <filename>poky</filename>) have been cloned
85 using Git and the local repository is named
86 "poky".
87 </note>
88 </para></listitem>
89 <listitem><para>
90 <emphasis>Prepare Your <filename>local.conf</filename> File:</emphasis>
91 By default, the
92 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
93 variable is set to "qemux86", which is fine if you are
94 building for the QEMU emulator in 32-bit mode.
95 However, if you are not, you need to set the
96 <filename>MACHINE</filename> variable appropriately in
97 your <filename>conf/local.conf</filename> file found in
98 the
99 <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
100 (i.e. <filename>~/poky/build</filename> in this
101 example).</para>
102
103 <para>Also, since you are preparing to work on the
104 kernel image, you need to set the
105 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
106 variable to include kernel modules.</para>
107
108 <para>This example uses the default "qemux86" for the
109 <filename>MACHINE</filename> variable but needs to
110 add the "kernel-modules":
111 <literallayout class='monospaced'>
112 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
113 </literallayout>
114 </para></listitem>
115 <listitem><para>
116 <emphasis>Create a Layer for Patches:</emphasis>
117 You need to create a layer to hold patches created
118 for the kernel image.
119 You can use the <filename>yocto-layer</filename> command
120 as follows:
121 <literallayout class='monospaced'>
122 $ cd ~/poky
123 $ yocto-layer create my-kernel -o ../meta-my-kernel
124 Please enter the layer priority you'd like to use for the layer: [default: 6]
125 Would you like to have an example recipe created? (y/n) [default: n]
126 Would you like to have an example bbappend file created? (y/n) [default: n]
127
128 New layer created in ../meta-my-kernel.
129
130 Don't forget to add it to your BBLAYERS (for details see ../meta-my-kernel/README).
131 </literallayout>
132 </para></listitem>
133 <listitem><para>
134 <emphasis>Inform the BitBake Build Environment About
135 Your Layer:</emphasis>
136 As directed when you created your layer, you need to
137 add the layer to the
138 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
139 variable in the <filename>bblayers.conf</filename> file
140 as follows:
141 <literallayout class='monospaced'>
142 $ cd ~/poky/build
143 $ bitbake-layers add-layer ../../meta-my-kernel
144 </literallayout>
145 </para></listitem>
146 <listitem><para>
147 <emphasis>Build the Extensible SDK:</emphasis>
148 Use BitBake to build the extensible SDK specifically for
149 the Minnowboard:
150 <literallayout class='monospaced'>
151 $ cd ~/poky/build
152 $ bitbake core-image-minimal -c populate_sdk_ext
153 </literallayout>
154 Once the build finishes, you can find the SDK installer
155 file (i.e. <filename>*.sh</filename> file) in the
156 following directory:
157 <literallayout class='monospaced'>
158 ~/poky/build/tmp/deploy/sdk
159 </literallayout>
160 For this example, the installer file is named
161 <filename>poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh</filename>
162 </para></listitem>
163 <listitem><para>
164 <emphasis>Install the Extensible SDK:</emphasis>
165 Use the following command to install the SDK.
166 For this example, install the SDK in the default
167 <filename>~/poky_sdk</filename> directory:
168 <literallayout class='monospaced'>
169 $ cd ~/poky/build/tmp/deploy/sdk
170 $ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh
171 Poky (Yocto Project Reference Distro) Extensible SDK installer version &DISTRO;
172 ============================================================================
173 Enter target directory for SDK (default: ~/poky_sdk):
174 You are about to install the SDK to "/home/scottrif/poky_sdk". Proceed[Y/n]? Y
175 Extracting SDK......................................done
176 Setting it up...
177 Extracting buildtools...
178 Preparing build system...
179 Parsing recipes: 100% |#################################################################| Time: 0:00:52
180 Initializing tasks: 100% |############## ###############################################| Time: 0:00:04
181 Checking sstate mirror object availability: 100% |######################################| Time: 0:00:00
182 Parsing recipes: 100% |#################################################################| Time: 0:00:33
183 Initializing tasks: 100% |##############################################################| Time: 0:00:00
184 done
185 SDK has been successfully set up and is ready to be used.
186 Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
187 $ . /home/scottrif/poky_sdk/environment-setup-i586-poky-linux
188 </literallayout>
189 </para></listitem>
190 <listitem><para id='setting-up-the-esdk-terminal'>
191 <emphasis>Set Up a New Terminal to Work With the
192 Extensible SDK:</emphasis>
193 You must set up a new terminal to work with the SDK.
194 You cannot use the same BitBake shell used to build the
195 installer.</para>
196
197 <para>After opening a new shell, run the SDK environment
198 setup script as directed by the output from installing
199 the SDK:
200 <literallayout class='monospaced'>
201 $ source ~/poky_sdk/environment-setup-i586-poky-linux
202 "SDK environment now set up; additionally you may now run devtool to perform development tasks.
203 Run devtool --help for further details.
204 </literallayout>
205 <note>
206 If you get a warning about attempting to use the
207 extensible SDK in an environment set up to run
208 BitBake, you did not use a new shell.
209 </note>
210 </para></listitem>
211 <listitem><para>
212 <emphasis>Build the Clean Image:</emphasis>
213 The final step in preparing to work on the kernel is to
214 build an initial image using
215 <filename>devtool</filename> in the new terminal you
216 just set up and initialized for SDK work:
217 <literallayout class='monospaced'>
218 $ devtool build-image
219 Parsing recipes: 100% |##########################################| Time: 0:00:05
220 Parsing of 830 .bb files complete (0 cached, 830 parsed). 1299 targets, 47 skipped, 0 masked, 0 errors.
221 WARNING: No packages to add, building image core-image-minimal unmodified
222 Loading cache: 100% |############################################| Time: 0:00:00
223 Loaded 1299 entries from dependency cache.
224 NOTE: Resolving any missing task queue dependencies
225 Initializing tasks: 100% |#######################################| Time: 0:00:07
226 Checking sstate mirror object availability: 100% |###############| Time: 0:00:00
227 NOTE: Executing SetScene Tasks
228 NOTE: Executing RunQueue Tasks
229 NOTE: Tasks Summary: Attempted 2866 tasks of which 2604 didn't need to be rerun and all succeeded.
230 NOTE: Successfully built core-image-minimal. You can find output files in /home/scottrif/poky_sdk/tmp/deploy/images/qemux86
231 </literallayout>
232 If you were building for actual hardware and not for
233 emulation, you could flash the image to a USB stick
234 on <filename>/dev/sdd</filename> and boot your device.
235 For an example that uses a Minnowboard, see the
236 <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/KernelDevelopmentWithEsdk'>TipsAndTricks/KernelDevelopmentWithEsdk</ulink>
237 Wiki page.
238 </para></listitem>
239 </orderedlist>
240 </para>
241
242 <para>
243 At this point you have set up to start making modifications to
244 the kernel by using the extensible SDK.
245 For a continued example, see the
246 "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
247 section.
248 </para>
249 </section>
250
251 <section id='getting-ready-for-traditional-kernel-development'>
252 <title>Getting Ready for Traditional Kernel Development</title>
253
254 <para>
255 Getting ready for traditional kernel development using the Yocto
256 Project involves many of the same steps as described in the
257 previous section.
258 However, you need to establish a local copy of the kernel source
259 since you will be editing these files.
260 </para>
261
262 <para>
263 Follow these steps to prepare to update the kernel image using
264 traditional kernel development flow with the Yocto Project.
265 Completing this procedure leaves you ready to make modifications
266 to the kernel source as described in the
267 "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
268 section:
269 <orderedlist>
270 <listitem><para>
271 <emphasis>Initialize the BitBake Environment:</emphasis>
272 Before you can do anything using BitBake, you need to
273 initialize the BitBake build environment by sourcing a
274 build environment script
275 (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>
276 or
277 <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>):
278 <literallayout class='monospaced'>
279 $ cd ~/poky
280 $ source oe-init-build-env
281 </literallayout>
282 <note>
283 The previous commands assume the
284 <ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
285 (i.e. <filename>poky</filename>) have been cloned
286 using Git and the local repository is named
287 "poky".
288 </note>
289 </para></listitem>
290 <listitem><para>
291 <emphasis>Prepare Your <filename>local.conf</filename>
292 File:</emphasis>
293 By default, the
294 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
295 variable is set to "qemux86", which is fine if you are
296 building for the QEMU emulator in 32-bit mode.
297 However, if you are not, you need to set the
298 <filename>MACHINE</filename> variable appropriately in
299 your <filename>conf/local.conf</filename> file found
300 in the
301 <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
302 (i.e. <filename>~/poky/build</filename> in this
303 example).</para>
304
305 <para>Also, since you are preparing to work on the
306 kernel image, you need to set the
307 <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
308 variable to include kernel modules.</para>
309
310 <para>This example uses the default "qemux86" for the
311 <filename>MACHINE</filename> variable but needs to
312 add the "kernel-modules":
313 <literallayout class='monospaced'>
314 MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
315 </literallayout>
316 </para></listitem>
317 <listitem><para>
318 <emphasis>Create a Layer for Patches:</emphasis>
319 You need to create a layer to hold patches created
320 for the kernel image.
321 You can use the <filename>yocto-layer</filename> command
322 as follows:
323 <literallayout class='monospaced'>
324 $ cd ~/poky
325 $ yocto-layer create my-kernel -o ../meta-my-kernel
326 Please enter the layer priority you'd like to use for the layer: [default: 6]
327 Would you like to have an example recipe created? (y/n) [default: n]
328 Would you like to have an example bbappend file created? (y/n) [default: n]
329
330 New layer created in ../meta-my-kernel.
331
332 Don't forget to add it to your BBLAYERS (for details see ../meta-my-kernel/README).
333 </literallayout>
334 </para></listitem>
335 <listitem><para>
336 <emphasis>Inform the BitBake Build Environment About
337 Your Layer:</emphasis>
338 As directed when you created your layer, you need to add
339 the layer to the
340 <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
341 variable in the <filename>bblayers.conf</filename> file
342 as follows:
343 <literallayout class='monospaced'>
344 $ cd ~/poky/build
345 $ bitbake-layers add-layer ../../meta-my-kernel
346 </literallayout>
347 </para></listitem>
348 <listitem><para>
349 <emphasis>Create a Local Copy of the Kernel Git
350 Repository:</emphasis>
351 You can find Git repositories of supported Yocto Project
352 kernels organized under "Yocto Linux Kernel" in the
353 Yocto Project Source Repositories at
354 <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
355 </para>
356
357 <para>
358 For simplicity, it is recommended that you create your
359 copy of the kernel Git repository outside of the
360 <ulink url='&YOCTO_DOCS_REF_URL;source-directory'>Source Directory</ulink>,
361 which is usually named <filename>poky</filename>.
362 </para>
363
364 <para>
365 The following command shows how to create a local copy
366 of the <filename>linux-yocto-4.9</filename> kernel:
367 <literallayout class='monospaced'>
368 $ git clone git://git.yoctoproject.org/linux-yocto-4.9 linux-yocto-4.9.git
369 Cloning into 'linux-yocto-4.9.git'...
370 remote: Counting objects: 5094108, done.
371 remote: Compressing objects: 100% (765113/765113), done.
372 remote: Total 5094108 (delta 4294009), reused 5088388 (delta 4288312)
373 Receiving objects: 100% (5094108/5094108), 1.02 GiB | 7.82 MiB/s, done.
374 Resolving deltas: 100% (4294009/4294009), done.
375 Checking connectivity... done.
376 Checking out files: 100% (56233/56233), done.
377 </literallayout>
378 </para></listitem>
379 </orderedlist>
380 </para>
381
382 <para>
383 At this point you have set up to start making modifications to
384 the kernel using traditional kernel development steps.
385 For a continued example, see the
386 "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
387 section.
388 </para>
389 </section>
390 </section>
20 391
21 <section id='creating-and-preparing-a-layer'> 392 <section id='creating-and-preparing-a-layer'>
22 <title>Creating and Preparing a Layer</title> 393 <title>Creating and Preparing a Layer</title>
@@ -824,6 +1195,188 @@ NOTE: This stuff is how it would have been if a *.wic file was created
824 </orderedlist> 1195 </orderedlist>
825 </section> 1196 </section>
826 1197
1198 <section id="using-traditional-kernel-development-to-patch-the-kernel">
1199 <title>Using Traditional Kernel Development to Patch the Kernel</title>
1200
1201 <para>
1202 The steps in this procedure show you how you can patch the
1203 kernel using traditional kernel development (i.e. not using
1204 <filename>devtool</filename> and the extensible SDK as
1205 described in the
1206 "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
1207 section).
1208 <note>
1209 Before attempting this procedure, be sure you have performed
1210 the steps to get ready for updating the kernel as described
1211 in the
1212 "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
1213 section.
1214 </note>
1215 </para>
1216
1217 <para>
1218 Patching the kernel involves changing or adding configurations
1219 to an existing kernel, changing or adding recipes to the kernel
1220 that are needed to support specific hardware features, or even
1221 altering the source code itself.
1222 <note>
1223 You can also use the <filename>yocto-kernel</filename> script
1224 found in the
1225 <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
1226 under <filename>scripts</filename> to manage kernel patches
1227 and configuration.
1228 See the "<ulink url='&YOCTO_DOCS_BSP_URL;#managing-kernel-patches-and-config-items-with-yocto-kernel'>Managing kernel Patches and Config Items with yocto-kernel</ulink>"
1229 section in the Yocto Project Board Support Packages (BSP)
1230 Developer's Guide for more information.
1231 </note>
1232 </para>
1233
1234 <para>
1235 This example creates a simple patch by adding some QEMU emulator
1236 console output at boot time through <filename>printk</filename>
1237 statements in the kernel's <filename>calibrate.c</filename> source
1238 code file.
1239 Applying the patch and booting the modified image causes the added
1240 messages to appear on the emulator's console.
1241 <note>
1242 The example is a continuation of the setup procedure found in
1243 the
1244 "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
1245 Section.
1246 </note>
1247 </para>
1248
1249 <para>
1250 Also, for more information on patching the kernel, see the
1251 "<link linkend='applying-patches'>Applying Patches</link>"
1252 section.
1253 <orderedlist>
1254 <listitem><para>
1255 <emphasis>Know What Branch is Checked Out In Your Local
1256 Kernel Git Repository:</emphasis>
1257 Prior to this step, you should have used Git to create a
1258 local copy of the repository for your kernel.
1259 Assuming you created the repository as directed in the
1260 "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
1261 section, use the following commands to check out the
1262 <filename>standard/base</filename> branch of the
1263 Linux Yocto 4.9 kernel:
1264 <literallayout class='monospaced'>
1265 $ cd ~/linux-yocto-4.9
1266 $ git checkout -b standard/base origin/standard/base
1267 </literallayout>
1268 </para></listitem>
1269 <listitem><para>
1270 <emphasis>Edit the Source Files</emphasis>
1271 Follow these steps to make some simple changes to the source
1272 files:
1273 <orderedlist>
1274 <listitem><para>
1275 <emphasis>Change the working directory</emphasis>:
1276 You need to locate the source files in the
1277 local copy of the kernel Git repository:
1278 Change to where the kernel source code is before making
1279 your edits to the <filename>calibrate.c</filename> file:
1280 <literallayout class='monospaced'>
1281 $ cd ~/linux-yocto-4.9/init
1282 </literallayout>
1283 </para></listitem>
1284 <listitem><para>
1285 <emphasis>Edit the source file</emphasis>:
1286 Edit the <filename>calibrate.c</filename> file to have
1287 the following changes:
1288 <literallayout class='monospaced'>
1289 void calibrate_delay(void)
1290 {
1291 unsigned long lpj;
1292 static bool printed;
1293 int this_cpu = smp_processor_id();
1294
1295 printk("*************************************\n");
1296 printk("* *\n");
1297 printk("* HELLO YOCTO KERNEL *\n");
1298 printk("* *\n");
1299 printk("*************************************\n");
1300
1301 if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
1302 .
1303 .
1304 .
1305 </literallayout>
1306 </para></listitem>
1307 </orderedlist>
1308 </para></listitem>
1309 <listitem><para>
1310 <emphasis>Stage and Commit Your Changes:</emphasis>
1311 Use standard Git commands to stage and commit the changes
1312 you just made:
1313 <literallayout class='monospaced'>
1314 $ git add calibrate.c
1315 $ git commit -m "calibrate.c - Added some printk statements"
1316 </literallayout>
1317 If you do not stage and commit your changes, the OpenEmbedded
1318 Build System will not pick up the changes.
1319 </para></listitem>
1320 <listitem><para>
1321 <emphasis>Update Your <filename>local.conf</filename> File to Point to Your Source Files:</emphasis>
1322 In addition to your <filename>local.conf</filename> file
1323 specifying to use "kernel-modules" and the "qemux86" machine,
1324 it must also point to the updated kernel source files.
1325 Add the following commands to your
1326 <filename>local.conf</filename>:
1327 <literallayout class='monospaced'>
1328 $ cd ~/poky/build/conf
1329 <replaceable>Add the following:</replaceable>
1330
1331 SRC_URI_pn-linux-yocto = "git:///$HOME/linux-yocto-4.9;protocol=file;name=machine;branch=standard/base; \
1332 git:///home/scottrif/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-4.9;destsuffix=${KMETA}"
1333SRCREV_meta_qemux86 = "${AUTOREV}"
1334SRCREV_machine_qemux86 = "${AUTOREV}"
1335 </literallayout>
1336 You must be sure to specify the correct branch and machine
1337 types.
1338 For this example, the branch is
1339 <filename>standard/base</filename> and the machine is
1340 "qemux86".
1341 </para></listitem>
1342 <listitem><para>
1343 <emphasis>Build the Image:</emphasis>
1344 With the source modified, staged, and committed, and
1345 the <filename>local.conf</filename> file pointing to
1346 the kernel files, you can now use BitBake to build the
1347 image:
1348 <literallayout class='monospaced'>
1349 $ cd ~/poky/build
1350 $ bitbake core-image-minimal
1351 </literallayout>
1352 </para></listitem>
1353 <listitem><para>
1354 <emphasis>Boot the image</emphasis>:
1355 Boot the modified image in the QEMU emulator
1356 using this command.
1357 When prompted to login to the QEMU console, use "root"
1358 with no password:
1359 <literallayout class='monospaced'>
1360 $ runqemu qemux86
1361 </literallayout>
1362 </para></listitem>
1363 <listitem><para>
1364 <emphasis>Look for Your Changes:</emphasis>
1365 As QEMU booted, you might have seen your changes rapidly
1366 scroll by.
1367 If not, use these commands to see your changes:
1368 <literallayout class='monospaced'>
1369 # dmesg | less
1370 </literallayout>
1371 You should see the results of your
1372 <filename>printk</filename> statements
1373 as part of the output when you scroll down the
1374 console window.
1375 </para></listitem>
1376 </orderedlist>
1377 </para>
1378 </section>
1379
827 <section id='using-an-iterative-development-process'> 1380 <section id='using-an-iterative-development-process'>
828 <title>Using an Iterative Development Process</title> 1381 <title>Using an Iterative Development Process</title>
829 1382