编译linux小记
(可选)编译环境搭建
docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
docker run -it -p 8070:8070 -v ~/inner:/tmp --privileged=true swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0 /bin/bash
前期准备
获取linux源码https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.255.tar.xz
解压tar Jxfv linux-4.19.255.tar.xz
cd ./linux-4.19.255
普通编译
make menuconfig
然后General setup->Local version --append to kernel release输入-1.0-linux然后ok
保存退出图形配置界面
make -j 8
整理模块 make modules_install
整理内核 make install
这一套过程可能需要得半个小时到一个小时就很费劲,需要玩会儿手机
编译完会在源码目录下生成一个 vmlinux 目录,同时 arch/x86_64/boot 目录下会多一个 bzimage 文件, bzImage 就是压缩后的一个镜像,vmlinux 是未压缩的除此之外根据编译选项的不同还可以编译出其他格式的镜像,比如 make 执行 uimage 就会编译出 uboot 这种专门用于嵌入式设备上的镜像,另外 bzImage 是通过 gzip 压缩过的格式。
make menuconfig中的“M”表示要编译成内核模块,但是不直接放到内核中,而是作为 .ko 文件,等内核运行起来了需要的时候再干进去.按空格就能控制 * 还是 M.
配置内核选项
支持“更新”模式进行配置: make help
(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
(b) make menuconfig:基于curses的文本窗口界面
(c) make gconfig:基于GTK (GNOME)环境窗口界面
(d) make xconfig:基于QT(KDE)环境的窗口界面
支持“全新配置”模式进行配置
(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b) make allyesconfig: 所有选项均回答为"yes"
(c) make allnoconfig: 所有选项均回答为"no"
交叉编译(失败)
Linux移植之make uImage编译过程分析
目标平台全志H3 (2xCortex A7,特性:ARCH_ARM_V7A,ARCH_ARM_AARCH32,ARCH_FPU_VFP_V4,ARCH_FPU_VFP_D32,ARCH_FPU_VFP_NEON)
如果嵌入式平台可以获取这个文件
当前的Linux内核的配置文件保存到了/proc/config.gz,有了它可以对调试当前内核有很大的帮助
ARM平台的配置文件:cp arch/arm/configs/sun8iw9p1smp_defconfig .config
make clean
export PATH=$PATH:~/inner/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin
aarch64-none-linux-gnu-gcc
make -j15 uImage ARCH="arm" CROSS_COMPILE="aarch64-none-linux-gnu-"
错误
如果出现
Makefile:606: include/config/auto.conf: No such file or directory
Makefile:637: include/config/auto.conf.cmd: No such file or directory
[https://stackoverflow.com/questions/61702069/include-config-auto-conf-cmd-no-such-file-or-directory-kali-linux]
sudo apt update
sudo apt install -y build-essential flex bison libssl-dev libelf-dev
make config
就一路按enter(大概有800多个项目)
报错
arch/arm64/Makefile:27: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum
Makefile:1085: recipe for target 'scripts' failed
如果需要反复编译
修改makefile,对于反复编译此法一劳永逸.修改根目录下的makefile
给ARCH变量赋值: ARCH ?= arm64
给CROSS_COMPILE 变量赋值CROSS_COOMPILE ?= arm‐linux‐