summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-altera.inc
blob: 3a8ac1de187407aa072394c689a18438dd71278c (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
PR = "r1"

KERNEL_REPO?="git://git.rocketboards.org/linux-socfpga.git"
KERNEL_PROT?="http"
KERNEL_DEFCONFIG?="socfpga_defconfig"
KERNEL_TAG?="${AUTOREV}"

SRC_URI = "${KERNEL_REPO};protocol=${KERNEL_PROT};branch=${KERNEL_BRANCH}"

SRCREV_pn-${PN} = "${KERNEL_TAG}"

inherit kernel
SECTION = "kernel"
DESCRIPTION = "Altera Linux kernel"
LICENSE = "GPLv2"

COMPATIBLE_MACHINE = "socfpga"

LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"

S = "${WORKDIR}/git"

MACHINE_DEFCONFIG = "${KERNEL_DEFCONFIG}"

do_configure() {
	export INITRAMFS_IMAGE_FILE="${INITRAMFS_IMAGE}-${MACHINE}.cpio"

	unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
	export CROSS_COMPILE="${TARGET_PREFIX}"
	export ARCH=${ARCH}
	
	oe_runmake ${MACHINE_DEFCONFIG} CONFIG_BLK_DEV_INITRD=y
	
	cp .config .config.ori

	grep CONFIG_BLK_DEV_INITRD .config || echo "CONFIG_BLK_DEV_INITRD=y" >> .config
	grep CONFIG_INITRAMFS_SOURCE .config || echo "CONFIG_INITRAMFS_SOURCE=\"\"" >> .config
	grep CONFIG_INITRAMFS_ROOT_UID .config || echo "CONFIG_INITRAMFS_ROOT_UID=0" >> .config
	grep CONFIG_INITRAMFS_ROOT_GID .config || echo "CONFIG_INITRAMFS_ROOT_GID=0" >> .config
	grep CONFIG_INITRAMFS_COMPRESSION_NONE .config || echo "CONFIG_INITRAMFS_COMPRESSION_NONE=y" >> .config

	if [ ! -z ${INITRAMFS_IMAGE} ] && [ -e ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_FILE} ]; then
		cp ${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_FILE} .
		echo "Found valid initramfs ${INITRAMFS_IMAGE_FILE}"
		sed -i "s|^.*CONFIG_BLK_DEV_INITRD[ =].*$|CONFIG_BLK_DEV_INITRD=y|g" .config
		sed -i "s|^.*CONFIG_INITRAMFS_SOURCE[ =].*$|CONFIG_INITRAMFS_SOURCE=\"${INITRAMFS_IMAGE_FILE}\"|g" .config
		sed -i "s|^.*CONFIG_INITRAMFS_ROOT_UID[ =].*$|CONFIG_INITRAMFS_ROOT_UID=0|g" .config
		sed -i "s|^.*CONFIG_INITRAMFS_ROOT_GID[ =].*$|CONFIG_INITRAMFS_ROOT_GID=0|g" .config
		sed -i "s|^.*CONFIG_INITRAMFS_COMPRESSION_NONE[ =].*$|CONFIG_INITRAMFS_COMPRESSION_NONE=y|g" .config
		oe_runmake oldconfig
	else
		rm -f *.cpio
		echo "Initramfs disabled or can't find valid initramfs ${INITRAMFS_IMAGE_FILE}"
		sed -i "s|^CONFIG_BLK_DEV_INITRD=.*$|# CONFIG_BLK_DEV_INITRD is not set|g" .config
		sed -i "s|^CONFIG_INITRAMFS_SOURCE=\".*\"$|# CONFIG_INITRAMFS_SOURCE is not set|g" .config
		sed -i "s|^CONFIG_INITRAMFS_ROOT_UID=.*$|# CONFIG_INITRAMFS_ROOT_UID is not set|g" .config
		sed -i "s|^CONFIG_INITRAMFS_ROOT_GID=.*$|# CONFIG_INITRAMFS_ROOT_GID is not set|g" .config
		sed -i "s|^CONFIG_INITRAMFS_COMPRESSION_NONE=.*$|# CONFIG_INITRAMFS_COMPRESSION_NONE is not set|g" .config
		oe_runmake oldconfig
	fi	
}

kernel_do_compile() {
        unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
        oe_runmake __headers CC="${KERNEL_CC}" LD="${KERNEL_LD}"
        oe_runmake ${KERNEL_IMAGETYPE_FOR_MAKE} ${KERNEL_ALT_IMAGETYPE} CC="${KERNEL_CC}" LD="${KERNEL_LD}" LOADADDR=0x8000
        if test "${KERNEL_IMAGETYPE_FOR_MAKE}.gz" = "${KERNEL_IMAGETYPE}"; then
                gzip -9c < "${KERNEL_IMAGETYPE_FOR_MAKE}" > "${KERNEL_OUTPUT}"
        fi
}

do_compile_dtb() {
        unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE
	sync
        oe_runmake ARCH=${ARCH} CROSS_COMPILE="${TARGET_PREFIX}" dtbs ||
	        oe_runmake ARCH=${ARCH} CROSS_COMPILE="${TARGET_PREFIX}" dtbs
}

addtask compile_dtb after do_compile before do_build

KERNEL_DEVICETREE ?= "socfpga_vt socfpga_cyclone5 socfpga_arria5"

do_deploy_dtb() {
    install -d ${DEPLOY_DIR_IMAGE}
    cd ${DEPLOY_DIR_IMAGE}
    if test -n "${KERNEL_DEVICETREE}"; then
        for DTB_FILE in ${KERNEL_DEVICETREE}; do
	    DTB_SYMLINK_NAME="${DTB_FILE}.dtb"
	    DEVICE_TREE_OUTPUT="${S}/arch/${ARCH}/boot/${DTB_SUBDIR}${DTB_FILE}.dtb"
            DTB_NAME="${DTB_FILE}-${DATETIME}.dtb"
            if [ ! -f ${DEVICE_TREE_OUTPUT} ]; then
                echo "Warning: ${DEVICE_TREE_OUTPUT} is not available!"
                continue
            fi
            install -m 0644 ${DEVICE_TREE_OUTPUT} ${DTB_NAME}
            rm -f ${DTB_SYMLINK_NAME}
            ln -sf ${DTB_NAME} ${DTB_SYMLINK_NAME}
       done
    fi
}

addtask deploy_dtb after do_compile_dtb before do_build

VMLINUX_NAME ?= "vmlinux-${PV}-${PR}-${MACHINE}-${DATETIME}"

kernel_do_deploy_append() {
	install -m 0644 ${S}/vmlinux ${DEPLOYDIR}/${VMLINUX_NAME}
	cd ${DEPLOYDIR} &&
		rm -f vmlinux &&
		ln -sf ${VMLINUX_NAME} vmlinux
}