aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-kexecboot.inc
blob: 89febbb5009bb2bca61212bfb211ecdb30ea0925 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# We set INC_PR here, since a change in the kexecboot recipe will need to get picked up by *all* the kernels:
INC_PR = "r37"

inherit kernel siteinfo

# Additional Sources for 2.6.24 and 2.6.26
RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
TKSRC = "http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches"

# Kernel bootlogo is distro-specific (default is OE logo).
# Logo resolution (qvga, vga, ...) is machine-specific.
LOGO_SIZE ?= "."
SRC_URI = "file://${LOGO_SIZE}/logo_linux_clut224.ppm.bz2"

# Set the verbosity of kernel messages during runtime
# You can define CMDLINE_DEBUG in your local.conf or distro.conf to override this behaviour..
CMDLINE_DEBUG ?= '${@base_conditional("DISTRO_TYPE", "release", "loglevel=3", "debug", d)}'

# Note how we set master console on serial to protect bootlogo.
CMDLINE_c7x0 = "console=tty1 console=ttyS0,115200n8 ${CMDLINE_DEBUG}"
CMDLINE_tosa = "console=tty1 console=ttyS0,115200n8 ${CMDLINE_DEBUG}"
CMDLINE_poodle = "console=tty1 console=ttyS0,115200n8 fbcon=rotate:1 ${CMDLINE_DEBUG}"
CMDLINE_akita = "console=tty1 console=ttyS0,115200n8 fbcon=rotate:1 ${CMDLINE_DEBUG}"
CMDLINE_collie = "console=tty1 console=ttySA0,115200n8 fbcon=rotate:1 mem=64M ${CMDLINE_DEBUG}"
CMDLINE_spitz = "console=tty1 console=ttyS0,115200n8 fbcon=rotate:1 ${CMDLINE_DEBUG}"
CMDLINE_hx4700 = "console=tty1 console=ttyS0,115200n8 fbcon=rotate:1 ${CMDLINE_DEBUG}"
CMDLINE_ben-nanonote = "console=tty0 console=ttyS0,57600n8 mem=32M ${CMDLINE_DEBUG}"

PACKAGES = ""
PROVIDES = ""

# Zaurus machines need kernel size-check
KERNEL_IMAGE_MAXSIZE_akita = "1294336"
KERNEL_IMAGE_MAXSIZE_c7x0 = "1294336"
KERNEL_IMAGE_MAXSIZE_collie = "1048576"
KERNEL_IMAGE_MAXSIZE_poodle = "1294336"
KERNEL_IMAGE_MAXSIZE_tosa = "1294336"
KERNEL_IMAGE_MAXSIZE_spitz = "1294336"

KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${PV}-${PR}-${MACHINE}"
KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-kexecboot-${MACHINE}"

LOCALVERSION ?= ""

# we want the smallest size
INITRAMFS_IMAGE = "initramfs-kexecboot-klibc-image"

# use custom function until base_version_less_or_equal is fixed
#
def kernel_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
    from bb import utils
    result = bb.utils.vercmp_part(bb.data.getVar(variable,d,True), checkvalue)
    if result <= 0:
        return truevalue
    else:
        return falsevalue

# force lzma compression for kernel (linux-kexecboot >= 2.6.32)
# force lzma compression for initramfs (linux-kexecboot >= 2.6.30)
DEPENDS += '${@kernel_version_less_or_equal("PV", "2.6.29", "", "lzma-native", d)}'

KERNEL_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.31", "", "CONFIG_KERNEL_LZMA=y", d)}'

INITRAMFS_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.29", "", "CONFIG_INITRAMFS_COMPRESSION_LZMA=y", d)}'
INITRAMFS_COMPRESSION_SUFFIX = '${@kernel_version_less_or_equal("PV", "2.6.29", "gz", "lzma", d)}'
RD_COMPRESSION = '${@kernel_version_less_or_equal("PV", "2.6.29", "", "CONFIG_RD_LZMA=y", d)}'

do_configure_prepend() {

        # Rename getline in ./scripts/unifdef.c
        # Kernels up to 2.6.29 are currently failing to build unifdef.c,
        # clashing with exposed getline() from <stdio.h>
        # see https://patchwork.kernel.org/patch/11166/
        # committed in 2.6.29 (commit d15bd1067b1fcb2b7250d22bc0c7c7fea0b759f7)

        if [ -e ${S}/scripts/unifdef.c ]; then
                sed -i -e 's/getline/parseline/g' ${S}/scripts/unifdef.c
        fi

        echo "" > ${S}/.config

        #
        # CONFIG_CMDLINE mangling
        #
        echo "CONFIG_CMDLINE_BOOL=y" >> ${S}/.config
        echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config

        # mips and x86
        echo "CONFIG_CMDLINE_OVERRIDE=y" >> ${S}/.config

        # sh only
        echo "CONFIG_CMDLINE_OVERWRITE=y" >> ${S}/.config
        echo "# CONFIG_CMDLINE_EXTEND is not set" >> ${S}/.config

        #
        # endian support
        #
        if [ "${SITEINFO_ENDIANNESS}" = "be" ]; then
                echo "CONFIG_CPU_BIG_ENDIAN=y"          >> ${S}/.config
        fi

        #
        # logo support, if you supply logo_linux_clut224.ppm in SRC_URI, then it is going to be used
        #
        if [ -e ${WORKDIR}/${LOGO_SIZE}/logo_linux_clut224.ppm ]; then
                install -m 0644 ${WORKDIR}/${LOGO_SIZE}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
                echo "CONFIG_LOGO=y"                    >> ${S}/.config
                echo "CONFIG_LOGO_LINUX_CLUT224=y"      >> ${S}/.config
        fi

        # When enabling thumb for userspace we also need thumb support in the kernel
        if [ "${ARM_INSTRUCTION_SET}" = "thumb" ] ; then
            sed -i -e /CONFIG_ARM_THUMB/d ${WORKDIR}/defconfig 
            echo "CONFIG_ARM_THUMB=y" >> ${S}/.config
        fi

        sed -e '/CONFIG_CMDLINE=/d' \
            -e '/CONFIG_CMDLINE_BOOL/d' \
            -e '/CONFIG_CMDLINE_OVERRIDE/d' \
            -e '/CONFIG_CMDLINE_OVERWRITE/d' \
            -e '/CONFIG_CMDLINE_EXTEND/d' \
            -e '/CONFIG_CPU_BIG_ENDIAN/d' \
            -e '/CONFIG_LOGO=/d' \
            -e '/CONFIG_LOGO_LINUX_CLUT224=/d' \
            -e '/CONFIG_LOCALVERSION/d' \
            -e '/CONFIG_LOCALVERSION_AUTO/d' \
            < '${WORKDIR}/defconfig' >>'${S}/.config'

        echo 'CONFIG_LOCALVERSION="${LOCALVERSION}"' >>${S}/.config
        echo '# CONFIG_LOCALVERSION_AUTO is not set' >>${S}/.config

        # Force sane defaults for kexec-enabled kernels and keep size small
        sed -i -e /CONFIG_BLK_DEV_INITRD/d \
               -e /CONFIG_KEXEC/d \
               -e /=m/d \
               -e /CONFIG_MODULES/d \
               -e /CONFIG_DEBUG_ERRORS/d \
               -e /CONFIG_DEBUG_BUGVERBOSE/d \
               -e /CONFIG_DEBUG_KERNEL/d \
               ${S}/.config

               echo 'CONFIG_BLK_DEV_INITRD=y' >>${S}/.config
               echo 'CONFIG_KEXEC=y' >>${S}/.config
               echo '# CONFIG_MODULES is not set' >> ${S}/.config

        # Force lzma for arm kernels only
        if [ "${ARCH}" = "arm" ] ; then

            sed -i -e /CONFIG_KERNEL/d \
               -e /CONFIG_INITRAMFS_COMPRESSION/d \
               -e /CONFIG_INITRAMFS_SOURCE/d \
               -e /CONFIG_RD/d \
               ${S}/.config

               echo '${KERNEL_COMPRESSION}' >>${S}/.config
               echo '${INITRAMFS_COMPRESSION}' >>${S}/.config
               echo 'CONFIG_INITRAMFS_SOURCE="initramfs.cpio.${INITRAMFS_COMPRESSION_SUFFIX}"' >>${S}/.config
               echo '${RD_COMPRESSION}' >>${S}/.config
        fi

        yes '' | oe_runmake oldconfig
}

do_populate_sysroot() {
}

do_install() {
}

python do_package() {
}


# With 2.6.37 mips has no uImage target upstream.
# use custom task in the meantime

DEPENDS_mipsel += "u-boot-mkimage-native"

do_uboot_mkimage_mipsel() {
        cd ${S}
        kernel_entry=`nm vmlinux | grep " kernel_entry" | cut -d' ' -f1`

        cd ${S}/arch/mips/boot
        rm -f vmlinux.bin.gz
        gzip -c9 vmlinux.bin > vmlinux.bin.gz

        uboot-mkimage -A ${UBOOT_ARCH} -O linux -T kernel -C gzip -a 0x80010000 -e 0x${kernel_entry} \
        -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d vmlinux.bin.gz uImage-kexecboot-${PV}-${PR}-${MACHINE}.bin

        install -d ${DEPLOY_DIR_IMAGE}
        install -m 0644 uImage-kexecboot-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}
}

do_savedefconfig() {
	oe_runmake savedefconfig
}

addtask savedefconfig after do_configure