diff options
author | Bruce Ashfield <bruce.ashfield@windriver.com> | 2010-11-18 16:09:02 -0500 |
---|---|---|
committer | Saul Wold <Saul.Wold@intel.com> | 2010-12-10 22:01:36 -0800 |
commit | 0e7d9956a0cbe95cfe2919d13fcfcac705c4b104 (patch) | |
tree | faa2b5d6cb6cd2c1f9c27bac44986d88d074c4d8 /meta/recipes-kernel/linux/linux-yocto_git.bb | |
parent | 3ca38b7c104e96716a89b40df797dd3277334fa8 (diff) | |
download | poky-0e7d9956a0cbe95cfe2919d13fcfcac705c4b104.tar.gz |
yocto-kernel: factor common routes, update to 2.6.37 and branch renaming
In order to extend and create more kernel recipes based on the
supported yocto kernel common routines need to be placed in
re-usable blocks.
To accomplish this meta/recipes-kernel/linux/linux-yocto_git.bb
is broken into three parts:
- meta/classes/kernel-yocto.bbclass: contains common routines
for checking out and configuring a yocto kernel git repository.
This should be inherited by recipes that need this functionality.
- meta/recipes-kernel/linux/linux-yocto.inc: Contains the machine
mappings, compatibility, build directives and common task
definitions for a yocto kernel based recipe. This inherits
kernel-yocto, and is the typical point of entry for other recipes.
- meta/recipes-kernel/linux/linuux-tools.inc: tasks and function definitions
for kernel recipes that want to build/export perf
It also updates the linux-yocto recipe to default to 2.6.37.
As part of the update to 2.6.37 the branch naming and conventions
have been modified to show inheritance, and be more generic.
For example:
master
meta
yocto/base
yocto/standard/arm_versatile_926ejs
yocto/standard/base
yocto/standard/beagleboard
yocto/standard/common_pc/atom-pc
yocto/standard/common_pc/base
yocto/standard/common_pc_64
yocto/standard/fsl-mpc8315e-rdb
yocto/standard/intel_atom_z530
yocto/standard/intel_core_qm57_pch
yocto/standard/mti_malta32_be
yocto/standard/preempt_rt/base
yocto/standard/preempt_rt/common_pc
yocto/standard/preempt_rt/common_pc_64
yocto/standard/preempt_rt/intel_atom_z530
yocto/standard/preempt_rt/intel_core_qm57_pch
yocto/standard/qemu_ppc32
yocto/standard/routerstationpro
In this structure:
master: tracks the mainline kernel
meta: meta information for the BSPs and kernel features
yocto/base: baseline kernel branch
yocto/standard/base: 'standard' kernel, contains features
and configs for all BSPs
yocto/standard/<machine>: represents a BSP with specific
features or configurations
The tools, tree and libc-headers have all been updated to
deal with this new structure. Also in addition to dealing with
the new structure, they continue to work with the existing
tree and will adapt at runtime to the differences.
The linux-yocto-stable_git.bb recipe continues to build the
2.6.34 based tree,and linux-yocto_git.bb builds 2.6.37. As
boards are enabled for the new kernel they will move from
-stable to the development kernel. As of now, only the
emulated targets have moved to 2.6.37-rcX
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Diffstat (limited to 'meta/recipes-kernel/linux/linux-yocto_git.bb')
-rw-r--r-- | meta/recipes-kernel/linux/linux-yocto_git.bb | 219 |
1 files changed, 14 insertions, 205 deletions
diff --git a/meta/recipes-kernel/linux/linux-yocto_git.bb b/meta/recipes-kernel/linux/linux-yocto_git.bb index ef005aefca..1e3df478eb 100644 --- a/meta/recipes-kernel/linux/linux-yocto_git.bb +++ b/meta/recipes-kernel/linux/linux-yocto_git.bb | |||
@@ -1,21 +1,7 @@ | |||
1 | DESCRIPTION = "Yocto Kernel" | 1 | inherit kernel |
2 | SECTION = "kernel" | 2 | require linux-yocto.inc |
3 | LICENSE = "GPL" | ||
4 | |||
5 | # Set this to 'preempt_rt' in the local.conf if you want a real time kernel | ||
6 | LINUX_KERNEL_TYPE ?= standard | ||
7 | SRCREV_FORMAT = "meta_machine" | ||
8 | PV = "2.6.34+git${SRCPV}" | ||
9 | |||
10 | # To use a staged, on-disk bare clone of a Wind River Kernel, use a | ||
11 | # variant of the below | ||
12 | # SRC_URI = "git://///path/to/kernel/default_kernel.git;fullclone=1" | ||
13 | SRC_URI = "git://git.pokylinux.org/linux-2.6-windriver.git;protocol=git;fullclone=1;branch=${KBRANCH};name=machine \ | ||
14 | git://git.pokylinux.org/linux-2.6-windriver.git;protocol=git;noclone=1;branch=wrs_meta;name=meta" | ||
15 | 3 | ||
16 | # map the poky machine to a 'kernel machine' | 4 | KMACHINE_qemux86 = "common_pc/base" |
17 | KMACHINE = "UNDEFINED" | ||
18 | KMACHINE_qemux86 = "common_pc" | ||
19 | KMACHINE_qemux86-64 = "common_pc_64" | 5 | KMACHINE_qemux86-64 = "common_pc_64" |
20 | KMACHINE_qemuppc = "qemu_ppc32" | 6 | KMACHINE_qemuppc = "qemu_ppc32" |
21 | KMACHINE_qemumips = "mti_malta32_be" | 7 | KMACHINE_qemumips = "mti_malta32_be" |
@@ -25,199 +11,22 @@ KMACHINE_routerstationpro = "routerstationpro" | |||
25 | KMACHINE_mpc8315e-rdb = "fsl-mpc8315e-rdb" | 11 | KMACHINE_mpc8315e-rdb = "fsl-mpc8315e-rdb" |
26 | KMACHINE_beagleboard = "beagleboard" | 12 | KMACHINE_beagleboard = "beagleboard" |
27 | 13 | ||
28 | # Determine which branch to fetch and build. Not all branches are in the | 14 | LINUX_VERSION ?= "2.6.37" |
29 | # upstream repo (but will be locally created after the fetchers run) so | 15 | LINUX_VERSION_EXTENSION ?= "-yocto-${LINUX_KERNEL_TYPE}" |
30 | # a fallback branch needs to be chosen. | 16 | PR = "r14" |
31 | # | 17 | PV = "${LINUX_VERSION}+git${SRCPV}" |
32 | # The default machine 'UNDEFINED'. If the machine is not set to a specific | 18 | SRCREV_FORMAT = "meta_machine" |
33 | # branch in this recipe or in a recipe extension, then we fallback to a | ||
34 | # branch that is always present 'standard'. This sets the KBRANCH variable | ||
35 | # and is used in the SRC_URI. The machine is then set back to ${MACHINE}, | ||
36 | # since futher processing will use that to create local branches | ||
37 | python __anonymous () { | ||
38 | import bb, re | ||
39 | |||
40 | bb.data.setVar("KBRANCH", "${KMACHINE}-${LINUX_KERNEL_TYPE}", d) | ||
41 | mach = bb.data.getVar("KMACHINE", d, 1) | ||
42 | if mach == "UNDEFINED": | ||
43 | bb.data.setVar("KBRANCH", "standard", d) | ||
44 | bb.data.setVar("KMACHINE", "${MACHINE}", d) | ||
45 | # track the global configuration on a bootstrapped BSP | ||
46 | bb.data.setVar("SRCREV_machine", "${SRCREV_meta}", d) | ||
47 | bb.data.setVar("BOOTSTRAP", "t", d) | ||
48 | } | ||
49 | |||
50 | COMPATIBLE_MACHINE = "(qemuarm|qemux86|qemuppc|qemumips|qemux86-64|atom-pc|routerstationpro|mpc8315e-rdb|beagleboard)" | ||
51 | 19 | ||
52 | LINUX_VERSION = "v2.6.34" | 20 | SRC_URI = "git://git.pokylinux.org/linux-yocto-2.6.37;protocol=git;fullclone=1;branch=${KBRANCH};name=machine \ |
53 | LINUX_VERSION_EXTENSION = "-wr-${LINUX_KERNEL_TYPE}" | 21 | git://git.pokylinux.org/linux-yocto-2.6.37;protocol=git;noclone=1;branch=meta;name=meta" |
54 | PR = "r13" | ||
55 | 22 | ||
56 | S = "${WORKDIR}/linux" | ||
57 | B = "${WORKDIR}/linux-${KMACHINE}-${LINUX_KERNEL_TYPE}-build" | ||
58 | 23 | ||
59 | # functionality flags | 24 | # Functionality flags |
60 | KERNEL_REVISION_CHECKING ?= "t" | 25 | KERNEL_REVISION_CHECKING ?= "t" |
61 | KERNEL_FEATURES=features/netfilter | 26 | KERNEL_FEATURES=features/netfilter |
62 | 27 | ||
63 | do_patch() { | 28 | # extra tasks |
64 | cd ${S} | ||
65 | if [ -f ${WORKDIR}/defconfig ]; then | ||
66 | defconfig=${WORKDIR}/defconfig | ||
67 | fi | ||
68 | |||
69 | # simply ensures that a branch of the right name has been created | ||
70 | createme ${ARCH} ${KMACHINE}-${LINUX_KERNEL_TYPE} ${defconfig} | ||
71 | if [ $? -ne 0 ]; then | ||
72 | echo "ERROR. Could not create ${KMACHINE}-${LINUX_KERNEL_TYPE}" | ||
73 | exit 1 | ||
74 | fi | ||
75 | |||
76 | # updates or generates the target description | ||
77 | if [ -n "${KERNEL_FEATURES}" ]; then | ||
78 | addon_features="--features ${KERNEL_FEATURES}" | ||
79 | fi | ||
80 | updateme ${addon_features} ${ARCH} ${WORKDIR} | ||
81 | if [ $? -ne 0 ]; then | ||
82 | echo "ERROR. Could not update ${KMACHINE}-${LINUX_KERNEL_TYPE}" | ||
83 | exit 1 | ||
84 | fi | ||
85 | |||
86 | # executes and modifies the source tree as required | ||
87 | patchme ${KMACHINE}-${LINUX_KERNEL_TYPE} | ||
88 | if [ $? -ne 0 ]; then | ||
89 | echo "ERROR. Could not modify ${KMACHINE}-${LINUX_KERNEL_TYPE}" | ||
90 | exit 1 | ||
91 | fi | ||
92 | } | ||
93 | |||
94 | validate_branches() { | ||
95 | branch_head=`git show-ref -s --heads ${KBRANCH}` | ||
96 | meta_head=`git show-ref -s --heads wrs_meta` | ||
97 | target_branch_head="${SRCREV_machine}" | ||
98 | target_meta_head="${SRCREV_meta}" | ||
99 | |||
100 | if [ -n "$target_branch_head" ] && [ "$branch_head" != "$target_branch_head" ]; then | ||
101 | if [ -n "${KERNEL_REVISION_CHECKING}" ]; then | ||
102 | git show ${target_branch_head} > /dev/null 2>&1 | ||
103 | if [ $? -eq 0 ]; then | ||
104 | echo "Forcing branch ${KMACHINE}-${LINUX_KERNEL_TYPE} to ${target_branch_head}" | ||
105 | git branch -m ${KMACHINE}-${LINUX_KERNEL_TYPE} ${KMACHINE}-${LINUX_KERNEL_TYPE}-orig | ||
106 | git checkout -b ${KMACHINE}-${LINUX_KERNEL_TYPE} ${target_branch_head} | ||
107 | else | ||
108 | echo "ERROR ${target_branch_head} is not a valid commit ID." | ||
109 | echo "The kernel source tree may be out of sync" | ||
110 | exit 1 | ||
111 | fi | ||
112 | fi | ||
113 | fi | ||
114 | |||
115 | if [ "$meta_head" != "$target_meta_head" ]; then | ||
116 | if [ -n "${KERNEL_REVISION_CHECKING}" ]; then | ||
117 | git show ${target_meta_head} > /dev/null 2>&1 | ||
118 | if [ $? -eq 0 ]; then | ||
119 | echo "Forcing branch wrs_meta to ${target_meta_head}" | ||
120 | git branch -m wrs_meta wrs_meta-orig | ||
121 | git checkout -b wrs_meta ${target_meta_head} | ||
122 | else | ||
123 | echo "ERROR ${target_meta_head} is not a valid commit ID" | ||
124 | echo "The kernel source tree may be out of sync" | ||
125 | exit 1 | ||
126 | fi | ||
127 | fi | ||
128 | fi | ||
129 | } | ||
130 | |||
131 | do_kernel_checkout() { | ||
132 | if [ -d ${WORKDIR}/.git/refs/remotes/origin ]; then | ||
133 | echo "Fixing up git directory for ${KMACHINE}-${LINUX_KERNEL_TYPE}" | ||
134 | rm -rf ${S} | ||
135 | mkdir ${S} | ||
136 | mv ${WORKDIR}/.git ${S} | ||
137 | |||
138 | if [ -e ${S}/.git/packed-refs ]; then | ||
139 | cd ${S} | ||
140 | rm -f .git/refs/remotes/origin/HEAD | ||
141 | IFS=' | ||
142 | '; | ||
143 | |||
144 | for r in `git show-ref | grep remotes`; do | ||
145 | ref=`echo $r | cut -d' ' -f1`; | ||
146 | b=`echo $r | cut -d'/' -f4`; | ||
147 | echo $ref > .git/refs/heads/$b | ||
148 | done | ||
149 | cd .. | ||
150 | else | ||
151 | mv ${S}/.git/refs/remotes/origin/* ${S}/.git/refs/heads | ||
152 | rmdir ${S}/.git/refs/remotes/origin | ||
153 | fi | ||
154 | fi | ||
155 | cd ${S} | ||
156 | |||
157 | # checkout and clobber and unimportant files | ||
158 | git checkout -f ${KBRANCH} | ||
159 | |||
160 | if [ -z "${BOOTSTRAP}" ]; then | ||
161 | validate_branches | ||
162 | fi | ||
163 | |||
164 | # this second checkout is intentional, we want to leave ourselves | ||
165 | # on the branch to be built, but validate_branches could have changed | ||
166 | # our initial checkout. So we do it a second time to be sure | ||
167 | git checkout -f ${KBRANCH} | ||
168 | } | ||
169 | do_kernel_checkout[dirs] = "${S}" | ||
170 | |||
171 | addtask kernel_checkout before do_patch after do_unpack | ||
172 | |||
173 | do_kernel_configme() { | ||
174 | echo "Doing kernel configme" | ||
175 | |||
176 | cd ${S} | ||
177 | configme --reconfig | ||
178 | if [ $? -ne 0 ]; then | ||
179 | echo "ERROR. Could not configure ${KMACHINE}-${LINUX_KERNEL_TYPE}" | ||
180 | exit 1 | ||
181 | fi | ||
182 | |||
183 | echo "# CONFIG_WRNOTE is not set" >> ${B}/.config | ||
184 | echo "# Global settings from linux recipe" >> ${B}/.config | ||
185 | echo "CONFIG_LOCALVERSION="\"${LINUX_VERSION_EXTENSION}\" >> ${B}/.config | ||
186 | } | ||
187 | |||
188 | do_kernel_configcheck() { | ||
189 | echo "[INFO] validating kernel configuration" | ||
190 | cd ${B}/.. | ||
191 | kconf_check ${B}/.config ${B} ${S} ${B} ${LINUX_VERSION} ${KMACHINE}-${LINUX_KERNEL_TYPE} | ||
192 | } | ||
193 | |||
194 | do_kernel_link_vmlinux() { | ||
195 | if [ ! -d "${B}/arch/${ARCH}/boot" ]; then | ||
196 | mkdir ${B}/arch/${ARCH}/boot | ||
197 | fi | ||
198 | cd ${B}/arch/${ARCH}/boot | ||
199 | ln -sf ../../../vmlinux | ||
200 | } | ||
201 | |||
202 | do_compile_perf() { | ||
203 | oe_runmake -C ${S}/tools/perf CC="${KERNEL_CC}" LD="${KERNEL_LD}" prefix=${prefix} | ||
204 | } | ||
205 | |||
206 | do_install_perf() { | ||
207 | oe_runmake -C ${S}/tools/perf CC="${KERNEL_CC}" LD="${KERNEL_LD}" prefix=${prefix} DESTDIR=${D} install | ||
208 | } | ||
209 | |||
210 | do_patch[depends] = "kern-tools-native:do_populate_sysroot" | ||
211 | addtask kernel_configme before do_configure after do_patch | ||
212 | addtask kernel_link_vmlinux after do_compile before do_install | 29 | addtask kernel_link_vmlinux after do_compile before do_install |
213 | addtask kernel_configcheck after do_configure before do_compile | 30 | addtask validate_branches before do_patch after do_kernel_checkout |
214 | |||
215 | inherit kernel | ||
216 | |||
217 | # perf tasks | ||
218 | addtask compile_perf after do_compile before do_install | ||
219 | addtask install_perf after do_install before do_package do_deploy | ||
220 | 31 | ||
221 | do_compile_perf[depends] = "virtual/libc:do_populate_sysroot" | 32 | require linux-tools.inc |
222 | do_compile_perf[depends] =+ "elfutils:do_populate_sysroot" | ||
223 | RDEPENDS_perf += "python perl elfutils" | ||