编译内核
首先下载 linux 项目到 linux-stable 内
切换到自己想要的版本与分支,如果该分支是第一次 build,那么需要执行
make kernel-clone LINUX=v2.6.12.6 LINUX_NEW=v2.6.12.6_dev
比如当前模拟器是 x86_64_pc,那么修改 /cloud-lab/labs/linux-lab/boards/x86_64/pc/Makefile,保证开发分支有正确版本的 gcc 与 rootfs
GCC = 9
GCC[LINUX_v3.2] = 4.8
GCC[LINUX_v2.6.12.6] = 4.8
GCC[LINUX_v2.6.12.6_dev] = 4.4
KIMAGE ?= $(BSP_KERNEL)/$(LINUX)/bzImage
ROOTFS ?= $(BSP_ROOT)/$(BUILDROOT)/rootfs.cpio.gz
ROOTFS[LINUX_v2.6.12.6] ?= $(BSP_ROOT)/$(BUILDROOT)/rootfs32.cpio.gz
ROOTFS[LINUX_v2.6.12.6_dev] ?= $(BSP_ROOT)/$(BUILDROOT)/rootfs32.cpio.gz
然后进行编译,编译过程中可能会报错,删除 linux-stable 下的 .kernel.patched 文件重新编译即可。强烈不建议使用 make kernel-cleanup 命令,会还原所有代码!!!
make cleanstamp kernel-build
make kernel-build
注意低版本的 linux 高版本的 gcc 可能编译不了,比如 linux2.6.11 需要 gcc-4.4 才能编译
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.4 gcc
编译后执行下面代码启动
make boot
可以通过查看启动日志来确定此时使用的是编译后的内核(比如打印一条内容)
dmesg | grep from
编译报错梳理
编译过程中如果报错 “mixed implicit and normal rules: deprecated syntax”
参考 https://www.cnblogs.com/zongfanstudy/p/12741662.html 来修改 mackfile
编译过程中如果报错
/labs/linux-lab/src/linux-stable is not clean, please run 'make mrproper'
in the '/labs/linux-lab/src/linux-stable' directory.
make[2]: *** [/labs/linux-lab/src/linux-stable/Makefile:940: prepare3] Error 1
make[1]: *** [Makefile:182: sub-make] Error 2
可以将 linux-stable 里 makefile 下面这段代码注释掉
ifneq ($(KBUILD_SRC),)
@$(kecho) ' Using $(srctree) as source for kernel'
$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \
echo >&2 " in the '$(srctree)' directory.";\
/bin/false; \
fi;
endif