diff options
-rw-r--r-- | meta/lib/oeqa/runtime/cases/stap.py | 2 | ||||
-rw-r--r-- | meta/recipes-core/images/build-appliance-image_15.0.0.bb | 6 | ||||
-rw-r--r-- | meta/recipes-kernel/linux/kernel-devsrc.bb | 239 |
3 files changed, 197 insertions, 50 deletions
diff --git a/meta/lib/oeqa/runtime/cases/stap.py b/meta/lib/oeqa/runtime/cases/stap.py index fc728bfc55..96e197a2d6 100644 --- a/meta/lib/oeqa/runtime/cases/stap.py +++ b/meta/lib/oeqa/runtime/cases/stap.py | |||
@@ -25,7 +25,7 @@ class StapTest(OERuntimeTestCase): | |||
25 | def test_stap(self): | 25 | def test_stap(self): |
26 | cmds = [ | 26 | cmds = [ |
27 | 'cd /usr/src/kernel && make scripts prepare', | 27 | 'cd /usr/src/kernel && make scripts prepare', |
28 | 'cd /lib/modules/`uname -r` && (if [ ! -L build ]; then ln -s /usr/src/kernel build; fi)', | 28 | 'cd /lib/modules/`uname -r` && (if [ ! -e build ]; then ln -s /usr/src/kernel build; fi)', |
29 | 'stap --disable-cache -DSTP_NO_VERREL_CHECK /tmp/hello.stp' | 29 | 'stap --disable-cache -DSTP_NO_VERREL_CHECK /tmp/hello.stp' |
30 | ] | 30 | ] |
31 | for cmd in cmds: | 31 | for cmd in cmds: |
diff --git a/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/meta/recipes-core/images/build-appliance-image_15.0.0.bb index db2f58dfb9..7b210f0969 100644 --- a/meta/recipes-core/images/build-appliance-image_15.0.0.bb +++ b/meta/recipes-core/images/build-appliance-image_15.0.0.bb | |||
@@ -59,8 +59,10 @@ fakeroot do_populate_poky_src () { | |||
59 | cp ${WORKDIR}/README_VirtualBox_Toaster.txt ${IMAGE_ROOTFS}/home/builder/ | 59 | cp ${WORKDIR}/README_VirtualBox_Toaster.txt ${IMAGE_ROOTFS}/home/builder/ |
60 | 60 | ||
61 | # Create a symlink, needed for out-of-tree kernel modules build | 61 | # Create a symlink, needed for out-of-tree kernel modules build |
62 | rm -f ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build | 62 | if [ ! -e ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build ]; then |
63 | lnr ${IMAGE_ROOTFS}${KERNEL_SRC_PATH} ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build | 63 | rm -f ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build |
64 | lnr ${IMAGE_ROOTFS}${KERNEL_SRC_PATH} ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build | ||
65 | fi | ||
64 | 66 | ||
65 | echo "INHERIT += \"rm_work\"" >> ${IMAGE_ROOTFS}/home/builder/poky/build/conf/auto.conf | 67 | echo "INHERIT += \"rm_work\"" >> ${IMAGE_ROOTFS}/home/builder/poky/build/conf/auto.conf |
66 | echo "export LC_ALL=en_US.utf8" >> ${IMAGE_ROOTFS}/home/builder/.bashrc | 68 | echo "export LC_ALL=en_US.utf8" >> ${IMAGE_ROOTFS}/home/builder/.bashrc |
diff --git a/meta/recipes-kernel/linux/kernel-devsrc.bb b/meta/recipes-kernel/linux/kernel-devsrc.bb index 8bbfa23e4b..b3f529237a 100644 --- a/meta/recipes-kernel/linux/kernel-devsrc.bb +++ b/meta/recipes-kernel/linux/kernel-devsrc.bb | |||
@@ -30,57 +30,202 @@ do_populate_sysroot[noexec] = "1" | |||
30 | S = "${STAGING_KERNEL_DIR}" | 30 | S = "${STAGING_KERNEL_DIR}" |
31 | B = "${STAGING_KERNEL_BUILDDIR}" | 31 | B = "${STAGING_KERNEL_BUILDDIR}" |
32 | 32 | ||
33 | KERNEL_VERSION = "${@get_kernelversion_headers('${S}')}" | ||
34 | |||
35 | PACKAGE_ARCH = "${MACHINE_ARCH}" | 33 | PACKAGE_ARCH = "${MACHINE_ARCH}" |
36 | 34 | ||
35 | KERNEL_BUILD_ROOT="/lib/modules/" | ||
36 | |||
37 | do_install() { | 37 | do_install() { |
38 | kerneldir=${D}${KERNEL_SRC_PATH} | 38 | kerneldir=${D}${KERNEL_BUILD_ROOT}${KERNEL_VERSION} |
39 | install -d $kerneldir | 39 | install -d $kerneldir |
40 | 40 | ||
41 | # | 41 | # create the directory structure |
42 | # Copy the staging dir source (and module build support) into the devsrc structure. | 42 | rm -f $kerneldir/build |
43 | # We can keep this copy simple and take everything, since a we'll clean up any build | 43 | rm -f $kerneldir/source |
44 | # artifacts afterwards, and the extra i/o is not significant | 44 | mkdir -p $kerneldir/build |
45 | # | 45 | |
46 | cd ${B} | 46 | # for compatibility with some older variants of this package, we |
47 | find . -type d -name '.git*' -prune -o -path '.debug' -prune -o -type f -print0 | cpio --null -pdlu $kerneldir | 47 | # create a /usr/src/kernel symlink to /lib/modules/<version>/source |
48 | cd ${S} | 48 | mkdir -p ${D}/usr/src |
49 | find . -type d -name '.git*' -prune -o -type d -name '.kernel-meta' -prune -o -type f -print0 | cpio --null -pdlu $kerneldir | 49 | ( |
50 | 50 | cd ${D}/usr/src | |
51 | # Explicitly set KBUILD_OUTPUT to ensure that the image directory is cleaned and not | 51 | ln -s ${KERNEL_BUILD_ROOT}${KERNEL_VERSION}/source kernel |
52 | # The main build artifacts. We clean the directory to avoid QA errors on mismatched | 52 | ) |
53 | # architecture (since scripts and helpers are native format). | 53 | |
54 | KBUILD_OUTPUT="$kerneldir" | 54 | # for on target purposes, we unify build and source |
55 | oe_runmake -C $kerneldir CC="${KERNEL_CC}" LD="${KERNEL_LD}" clean _mrproper_scripts | 55 | ( |
56 | # make clean generates an absolute path symlink called "source" | 56 | cd $kerneldir |
57 | # in $kerneldir points to $kerneldir, which doesn't make any | 57 | ln -s build source |
58 | # sense, so remove it. | 58 | ) |
59 | if [ -L $kerneldir/source ]; then | 59 | |
60 | bbnote "Removing $kerneldir/source symlink" | 60 | # first copy everything |
61 | rm -f $kerneldir/source | 61 | ( |
62 | fi | 62 | cd ${S} |
63 | 63 | cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") $kerneldir/build | |
64 | # As of Linux kernel version 3.0.1, the clean target removes | 64 | cp --parents $(find -type f -name "Build" -o -name "Build.include") $kerneldir/build |
65 | # arch/powerpc/lib/crtsavres.o which is present in | 65 | ) |
66 | # KBUILD_LDFLAGS_MODULE, making it required to build external modules. | 66 | |
67 | if [ ${ARCH} = "powerpc" ]; then | 67 | # then drop all but the needed Makefiles/Kconfig files |
68 | mkdir -p $kerneldir/arch/powerpc/lib/ | 68 | rm -rf $kerneldir/build/Documentation |
69 | cp ${B}/arch/powerpc/lib/crtsavres.o $kerneldir/arch/powerpc/lib/crtsavres.o | 69 | rm -rf $kerneldir/build/scripts |
70 | fi | 70 | rm -rf $kerneldir/build/include |
71 | 71 | ||
72 | # Remove fixdep/objtool as they won't be target binaries | 72 | # now copy in parts from the build that we'll need later |
73 | for i in fixdep objtool; do | 73 | ( |
74 | if [ -e $kerneldir/tools/objtool/$i ]; then | 74 | cd ${B} |
75 | rm -rf $kerneldir/tools/objtool/$i | 75 | |
76 | fi | 76 | cp Module.symvers $kerneldir/build |
77 | done | 77 | cp System.map* $kerneldir/build |
78 | 78 | if [ -s Module.markers ]; then | |
79 | chown -R root:root ${D} | 79 | cp Module.markers $kerneldir/build |
80 | fi | ||
81 | |||
82 | cp .config $kerneldir/build | ||
83 | |||
84 | # This scripts copy blow up QA, so for now, we require a more | ||
85 | # complex 'make scripts' to restore these, versus copying them | ||
86 | # here. Left as a reference to indicate that we know the scripts must | ||
87 | # be dealt with. | ||
88 | # cp -a scripts $kerneldir/build | ||
89 | |||
90 | if [ -d arch/${ARCH}/scripts ]; then | ||
91 | cp -a arch/${ARCH}/scripts $kerneldir/build/arch/${ARCH} | ||
92 | fi | ||
93 | if [ -f arch/${ARCH}/*lds ]; then | ||
94 | cp -a arch/${ARCH}/*lds $kerneldir/build/arch/${ARCH} | ||
95 | fi | ||
96 | |||
97 | rm -f $kerneldir/build/scripts/*.o | ||
98 | rm -f $kerneldir/build/scripts/*/*.o | ||
99 | |||
100 | if [ "${ARCH}" = "powerpc" ]; then | ||
101 | if [ -e arch/powerpc/lib/crtsavres.S ] || | ||
102 | [ -e arch/powerpc/lib/crtsavres.o ]; then | ||
103 | cp -a --parents arch/powerpc/lib/crtsavres.[So] $kerneldir/build/ | ||
104 | fi | ||
105 | fi | ||
106 | |||
107 | if [ "${ARCH}" = "arm64" ]; then | ||
108 | cp -a --parents arch/arm64/kernel/vdso/vdso.lds $kerneldir/build/ | ||
109 | fi | ||
110 | |||
111 | cp -a include $kerneldir/build/include | ||
112 | ) | ||
113 | |||
114 | # now grab the chunks from the source tree that we need | ||
115 | ( | ||
116 | cd ${S} | ||
117 | |||
118 | cp -a scripts $kerneldir/build | ||
119 | |||
120 | # if our build dir had objtool, it will also be rebuilt on target, so | ||
121 | # we copy what is required for that build | ||
122 | if [ -f ${B}/tools/objtool/objtool ]; then | ||
123 | # these are a few files associated with objtool, since we'll need to | ||
124 | # rebuild it | ||
125 | cp -a --parents tools/build/Build.include $kerneldir/build/ | ||
126 | cp -a --parents tools/build/Build $kerneldir/build/ | ||
127 | cp -a --parents tools/build/fixdep.c $kerneldir/build/ | ||
128 | cp -a --parents tools/scripts/utilities.mak $kerneldir/build/ | ||
129 | |||
130 | # extra files, just in case | ||
131 | cp -a --parents tools/objtool/* $kerneldir/build/ | ||
132 | cp -a --parents tools/lib/str_error_r.c $kerneldir/build/ | ||
133 | cp -a --parents tools/lib/string.c $kerneldir/build/ | ||
134 | cp -a --parents tools/lib/subcmd/* $kerneldir/build/ | ||
135 | |||
136 | cp -a --parents tools/include/* $kerneldir/build/ | ||
137 | fi | ||
138 | |||
139 | if [ "${ARCH}" = "arm64" ]; then | ||
140 | # arch/arm64/include/asm/xen references arch/arm | ||
141 | cp -a --parents arch/arm/include/asm/xen $kerneldir/build/ | ||
142 | # arch/arm64/include/asm/opcodes.h references arch/arm | ||
143 | cp -a --parents arch/arm/include/asm/opcodes.h $kerneldir/build/ | ||
144 | |||
145 | cp -a --parents arch/arm64/kernel/vdso/gettimeofday.S $kerneldir/build/ | ||
146 | cp -a --parents arch/arm64/kernel/vdso/sigreturn.S $kerneldir/build/ | ||
147 | cp -a --parents arch/arm64/kernel/vdso/note.S $kerneldir/build/ | ||
148 | cp -a --parents arch/arm64/kernel/vdso/gen_vdso_offsets.sh $kerneldir/build/ | ||
149 | fi | ||
150 | |||
151 | # include the machine specific headers for ARM variants, if available. | ||
152 | if [ "${ARCH}" = "arm" ]; then | ||
153 | cp -a --parents arch/${ARCH}/mach-*/include $kerneldir/build/ | ||
154 | |||
155 | # include a few files for 'make prepare' | ||
156 | cp -a --parents arch/arm/tools/gen-mach-types $kerneldir/build/ | ||
157 | cp -a --parents arch/arm/tools/mach-types $kerneldir/build/ | ||
158 | cp -a --parents arch/arm/tools/syscall* $kerneldir/build/ | ||
159 | fi | ||
160 | |||
161 | if [ -d arch/${ARCH}/include ]; then | ||
162 | cp -a --parents arch/${ARCH}/include $kerneldir/build/ | ||
163 | fi | ||
164 | |||
165 | cp -a include $kerneldir/build | ||
166 | |||
167 | cp -a --parents tools/include/tools/le_byteshift.h $kerneldir/build/ | ||
168 | cp -a --parents tools/include/tools/be_byteshift.h $kerneldir/build/ | ||
169 | |||
170 | # required for generate missing syscalls prepare phase | ||
171 | cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $kerneldir/build | ||
172 | |||
173 | if [ "${ARCH}" = "x86" ]; then | ||
174 | # files for 'make prepare' to succeed with kernel-devel | ||
175 | cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl $kerneldir/build/ | ||
176 | cp -a --parents arch/x86/entry/syscalls/syscalltbl.sh $kerneldir/build/ | ||
177 | cp -a --parents arch/x86/entry/syscalls/syscallhdr.sh $kerneldir/build/ | ||
178 | cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl $kerneldir/build/ | ||
179 | cp -a --parents arch/x86/tools/relocs_32.c $kerneldir/build/ | ||
180 | cp -a --parents arch/x86/tools/relocs_64.c $kerneldir/build/ | ||
181 | cp -a --parents arch/x86/tools/relocs.c $kerneldir/build/ | ||
182 | cp -a --parents arch/x86/tools/relocs_common.c $kerneldir/build/ | ||
183 | cp -a --parents arch/x86/tools/relocs.h $kerneldir/build/ | ||
184 | cp -a --parents arch/x86/purgatory/purgatory.c $kerneldir/build/ | ||
185 | |||
186 | # 4.18 + have unified the purgatory files, so we ignore any errors if | ||
187 | # these files are not present | ||
188 | cp -a --parents arch/x86/purgatory/sha256.h $kerneldir/build/ 2>/dev/null || : | ||
189 | cp -a --parents arch/x86/purgatory/sha256.c $kerneldir/build/ 2>/dev/null || : | ||
190 | |||
191 | cp -a --parents arch/x86/purgatory/stack.S $kerneldir/build/ | ||
192 | cp -a --parents arch/x86/purgatory/string.c $kerneldir/build/ | ||
193 | cp -a --parents arch/x86/purgatory/setup-x86_64.S $kerneldir/build/ | ||
194 | cp -a --parents arch/x86/purgatory/entry64.S $kerneldir/build/ | ||
195 | cp -a --parents arch/x86/boot/string.h $kerneldir/build/ | ||
196 | cp -a --parents arch/x86/boot/string.c $kerneldir/build/ | ||
197 | cp -a --parents arch/x86/boot/ctype.h $kerneldir/build/ | ||
198 | fi | ||
199 | |||
200 | if [ "${ARCH}" = "mips" ]; then | ||
201 | cp -a --parents arch/mips/Kbuild.platforms $kerneldir/build/ | ||
202 | cp --parents $(find -type f -name "Platform") $kerneldir/build | ||
203 | cp --parents arch/mips/boot/tools/relocs* $kerneldir/build | ||
204 | cp -a --parents arch/mips/kernel/asm-offsets.c $kerneldir/build | ||
205 | cp -a --parents kernel/time/timeconst.bc $kerneldir/build | ||
206 | cp -a --parents kernel/bounds.c $kerneldir/build | ||
207 | cp -a --parents Kbuild $kerneldir/build | ||
208 | fi | ||
209 | ) | ||
210 | |||
211 | # Make sure the Makefile and version.h have a matching timestamp so that | ||
212 | # external modules can be built | ||
213 | touch -r $kerneldir/build/Makefile $kerneldir/build/include/generated/uapi/linux/version.h | ||
214 | |||
215 | # Copy .config to include/config/auto.conf so "make prepare" is unnecessary. | ||
216 | cp $kerneldir/build/.config $kerneldir/build/include/config/auto.conf | ||
217 | |||
218 | chown -R root:root ${D} | ||
80 | } | 219 | } |
220 | |||
81 | # Ensure we don't race against "make scripts" during cpio | 221 | # Ensure we don't race against "make scripts" during cpio |
82 | do_install[lockfiles] = "${TMPDIR}/kernel-scripts.lock" | 222 | do_install[lockfiles] = "${TMPDIR}/kernel-scripts.lock" |
83 | 223 | ||
84 | PACKAGES = "kernel-devsrc" | 224 | FILES_${PN} = "${KERNEL_BUILD_ROOT} ${KERNEL_SRC_PATH}" |
85 | FILES_${PN} = "${KERNEL_SRC_PATH}" | 225 | FILES_${PN}-dbg += "${KERNEL_BUILD_ROOT}*/build/scripts/*/.debug/*" |
86 | RDEPENDS_${PN} = "bc" | 226 | |
227 | RDEPENDS_${PN} = "bc python flex bison ${TCLIBC}-utils" | ||
228 | # 4.15+ needs these next two RDEPENDS | ||
229 | RDEPENDS_${PN} += "openssl-dev util-linux" | ||
230 | # and x86 needs a bit more for 4.15+ | ||
231 | RDEPENDS_${PN} += "${@bb.utils.contains('ARCH', 'x86', 'elfutils', '', d)}" | ||