blob: 94183d9fcd806675e389859cec2fb597265471db (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# This .inc file allows you to build and deploy multiple sets of kernel + modules with different defconfigs
#
# Note that this include will NOT stage anything nor create packages, since that is virtually impossible
# Userspace should be built against the 'regular' kernel
#
# The intended usecase is for machines that have mutually exclusive drivers due to e.g. pinmuxing issues.
# For example the LogicPD omap-l138 experimenter board can have multiple mutually exclusive expansion boards
# like lcd, ethernet, sound, 20x2 character LCD, etc. To be able to easily test all of those you can use this .inc
#
# To make it easier finding the original defconfig from a running kernel, this also forcefully turns on
# CONFIG_IKCONFIG_PROC so people can do 'zcat /proc/config.gz' on the target.
require linux.inc
SRC_URI_append = " \
file://configs/ "
MULTI_CONFIG_BASE_SUFFIX = "multi-config-"
do_compileconfigs () {
# Compile and Install additional kernel configs if found
if [ -e ${WORKDIR}/configs/.empty ] ; then
echo "No configs found in configs/ directory, skipping to regular build"
else
echo "Multiple configs found, building those first"
# Context Save the regular 'defconfig'
cp ${WORKDIR}/defconfig ${WORKDIR}/defconfig.save
for config in ${WORKDIR}/configs/* ; do
# Copy in alternative config
cd ${S}
cp $config ${WORKDIR}/defconfig
# Enable config to be viewed on the target
echo "CONFIG_IKCONFIG=y" >> ${WORKDIR}/defconfig
echo "CONFIG_IKCONFIG_PROC=y" >> ${WORKDIR}/defconfig
# Build and Install this alternative kernel
do_configure
kernel_do_compile
kernel_do_install
# Drop the resulting images in the deploy dir
install -d ${DEPLOY_DIR_IMAGE}
install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).bin
if [ -d "${D}/lib" ]; then
fakeroot tar -cvzf ${DEPLOY_DIR_IMAGE}/${MODULES_IMAGE_BASE_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).tgz -C ${D} lib
fi
# Install the final config alongside the images
cp .config ${DEPLOY_DIR_IMAGE}/config-${PV}-${PR}-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).config
# Create symlinks
cd ${DEPLOY_DIR_IMAGE}
rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).bin
ln -sf ${KERNEL_IMAGE_BASE_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).bin ${KERNEL_IMAGE_SYMLINK_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).bin
rm -f modules-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).tgz
ln -sf ${MODULES_IMAGE_BASE_NAME}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).tgz modules-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).tgz
rm -f config-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).config
ln -sf config-${PV}-${PR}-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).config config-${MACHINE}.${MULTI_CONFIG_BASE_SUFFIX}$(basename $config).config
done
# Restore the regular 'defconfig'
cp ${WORKDIR}/defconfig.save ${WORKDIR}/defconfig
fi
}
# For reference, copy .config to deploy image
do_deploy_append () {
# Drop the regular defconfig along side the others for consistency
cd ${S}
cp .config ${DEPLOY_DIR_IMAGE}/config-${PV}-${PR}-${MACHINE}.config
# add symlink
cd ${DEPLOY_DIR_IMAGE}
rm -f config-${MACHINE}.config
ln -s config-${PV}-${PR}-${MACHINE}.config config-${MACHINE}.config
rm -f modules-${MACHINE}.tgz
ln -sf ${MODULES_IMAGE_BASE_NAME}.tgz modules-${MACHINE}.tgz
}
do_compileconfigs[depends] += "virtual/${TARGET_PREFIX}gcc:do_populate_staging virtual/${TARGET_PREFIX}gcc${KERNEL_CCSUFFIX}:do_populate_staging"
addtask compileconfigs after do_patch before do_configure
|