编译环境:
我是采用一台笔记本电脑,然后在笔记本电脑上安装linux系统,在linux系统下进行linux内核的编译。
确认自己的linux环境
使用命令 :uname -a
cp@CP:\~/桌面/linux$ uname -a Linux CP 6.14.0-37-generic #37~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 20 10:25:38 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
kernel源代码下载与编译:
源码下载
使用命令 :wget url
cp@CP:\~/桌面/linux$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.19.tar.xz
源码解压
使用命令 :tar -xvf
cp@CP:\~/桌面/linux$ tar -xvf linux-6.19.tar.xz
解压完成以后cd进入文件夹目录下:
cp@CP:\~/桌面/linux$ ls linux-6.19 linux-6.19.tar.xz cp@CP:\~/桌面/linux$ cd linux-6.19/
源码编译
使用make指令进行编译
cp@CP:\~/桌面/linux/linux-6.19$ make *** *** Configuration file ".config" not found! *** *** Please run some configurator (e.g. "make oldconfig" or *** "make menuconfig" or "make xconfig"). *** /home/cp/桌面/linux/linux-6.19/Makefile:839: include/config/auto.conf.cmd: 没有那个文件或目录 make[1]: *** [/home/cp/桌面/linux/linux-6.19/Makefile:848:.config] 错误 1 make: *** [Makefile:248:__sub-make] 错误 2
.config文件找不到,目前根因还不知道。按照网上的教程使用make defconfig进行编译。
cp@CP:\~/桌面/linux/linux-6.19$ make defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c /bin/sh: 1: flex: not found make[2]: *** [scripts/Makefile.host:9:scripts/kconfig/lexer.lex.c] 错误 127 make[1]: *** [/home/cp/桌面/linux/linux-6.19/Makefile:742:defconfig] 错误 2 make: *** [Makefile:248:__sub-make] 错误 2
依然报错:根因为缺少flex,因此安装flex。
安装flex
安装软件的命令 sudo apt install
cp@CP:\~/桌面/linux/linux-6.19$ sudo apt install flex [sudo] cp 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: libllvm19 libnvidia-cfg1-550 libnvidia-common-550 libnvidia-compute-550 libnvidia-decode-550 libnvidia-encode-550 libnvidia-extra-550 libnvidia-fbc1-550 libnvidia-gl-550 nvidia-compute-utils-550 nvidia-firmware-550-550.163.01 nvidia-kernel-common-550 nvidia-kernel-source-550 nvidia-utils-550 xserver-xorg-video-nvidia-550 使用'sudo apt autoremove'来卸载它(它们)。 将会同时安装下列软件: libfl-dev libfl2 m4 建议安装: bison flex-doc m4-doc 下列【新】软件包将被安装: flex libfl-dev libfl2 m4 升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 47 个软件包未被升级。 需要下载 560 kB 的归档。 解压缩后会消耗 1707 kB 的额外空间。 您希望继续执行吗? [Y/n] Y 获取:1 http://archive.ubuntu.com/ubuntu noble/main amd64 m4 amd64 1.4.19-4build1 [244 kB] 获取:2 http://archive.ubuntu.com/ubuntu noble/main amd64 flex amd64 2.6.4-8.2build1 [301 kB] 获取:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libfl2 amd64 2.6.4-8.2build1 [9768 B] 获取:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libfl-dev amd64 2.6.4-8.2build1 [6250 B] 已下载 560 kB,耗时 9秒 (64.7 kB/s) 正在选中未选择的软件包 m4。 (正在读取数据库 ... 系统当前共安装有 211210 个文件和目录。) 准备解压 .../m4_1.4.19-4build1_amd64.deb ... 正在解压 m4 (1.4.19-4build1) ... 正在选中未选择的软件包 flex。 准备解压 .../flex_2.6.4-8.2build1_amd64.deb ... 正在解压 flex (2.6.4-8.2build1) ... 正在选中未选择的软件包 libfl2:amd64。 准备解压 .../libfl2_2.6.4-8.2build1_amd64.deb ... 正在解压 libfl2:amd64 (2.6.4-8.2build1) ... 正在选中未选择的软件包 libfl-dev:amd64。 准备解压 .../libfl-dev_2.6.4-8.2build1_amd64.deb ... 正在解压 libfl-dev:amd64 (2.6.4-8.2build1) ... 正在设置 m4 (1.4.19-4build1) ... 正在设置 libfl2:amd64 (2.6.4-8.2build1) ... 正在设置 flex (2.6.4-8.2build1) ... 正在设置 libfl-dev:amd64 (2.6.4-8.2build1) ... 正在处理用于 libc-bin (2.39-0ubuntu8.7) 的触发器 ... 正在处理用于 man-db (2.12.0-4build2) 的触发器 ... 正在处理用于 install-info (7.1-3build2) 的触发器 ...
再次进行源码的编译:
cp@CP:\~/桌面/linux/linux-6.19$ make defconfig LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] /bin/sh: 1: bison: not found make[2]: *** [scripts/Makefile.host:17:scripts/kconfig/parser.tab.h] 错误 127 make[1]: *** [/home/cp/桌面/linux/linux-6.19/Makefile:742:defconfig] 错误 2 make: *** [Makefile:248:__sub-make] 错误 2
报错根因:缺少bison。
安装bison
cp@CP:\~/桌面/linux/linux-6.19$ sudo apt-get install bison 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 下列软件包是自动安装的并且现在不需要了: libllvm19 libnvidia-cfg1-550 libnvidia-common-550 libnvidia-compute-550 libnvidia-decode-550 libnvidia-encode-550 libnvidia-extra-550 libnvidia-fbc1-550 libnvidia-gl-550 nvidia-compute-utils-550 nvidia-firmware-550-550.163.01 nvidia-kernel-common-550 nvidia-kernel-source-550 nvidia-utils-550 xserver-xorg-video-nvidia-550 使用'sudo apt autoremove'来卸载它(它们)。 建议安装: bison-doc 下列【新】软件包将被安装: bison 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 47 个软件包未被升级。 需要下载 749 kB 的归档。 解压缩后会消耗 2515 kB 的额外空间。 获取:1 http://archive.ubuntu.com/ubuntu noble/main amd64 bison amd64 2:3.8.2+dfsg-1build2 [749 kB] 已下载 749 kB,耗时 5秒 (140 kB/s) 正在选中未选择的软件包 bison。 (正在读取数据库 ... 系统当前共安装有 211358 个文件和目录。) 准备解压 .../bison_2%3a3.8.2+dfsg-1build2_amd64.deb ... 正在解压 bison (2:3.8.2+dfsg-1build2) ... 正在设置 bison (2:3.8.2+dfsg-1build2) ... update-alternatives: 使用 /usr/bin/bison.yacc 来在自动模式中提供 /usr/bin/yacc (yacc) 正在处理用于 man-db (2.12.0-4build2) 的触发器 ...
编译成功:
cp@CP:\~/桌面/linux/linux-6.19$ make defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] HOSTCC scripts/kconfig/lexer.lex.o HOSTCC scripts/kconfig/menu.o HOSTCC scripts/kconfig/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTCC scripts/kconfig/util.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'x86_64_defconfig' # # configuration written to .config #
到此说明源码编译成功。
内核配置:
1、使用vim进行内核的配置
cp@CP:\~/桌面/linux/linux-6.19$ vim .config
2、使用menuconfig进行内核的配置
cp@CP:\~/桌面/linux/linux-6.19$ make menuconfig * * Unable to find the ncurses package. * Install ncurses (ncurses-devel or libncurses-dev * depending on your distribution). * * You may also need to install pkg-config to find the * ncurses installed in a non-default location. * make[2]: *** [scripts/kconfig/Makefile:234:scripts/kconfig/mconf-libs] 错误 1 make[1]: *** [/home/cp/桌面/linux/linux-6.19/Makefile:742:menuconfig] 错误 2 make: *** [Makefile:248:__sub-make] 错误 2
根因:缺少libncurses-dev
安装libncurses-dev
cp@CP:\~/桌面/linux/linux-6.19$ sudo apt-get install libncurses5-dev [sudo] cp 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 注意,选中 'libncurses-dev' 而非 'libncurses5-dev' 下列软件包是自动安装的并且现在不需要了: libllvm19 libnvidia-cfg1-550 libnvidia-common-550 libnvidia-compute-550 libnvidia-decode-550 libnvidia-encode-550 libnvidia-extra-550 libnvidia-fbc1-550 libnvidia-gl-550 nvidia-compute-utils-550 nvidia-firmware-550-550.163.01 nvidia-kernel-common-550 nvidia-kernel-source-550 nvidia-utils-550 xserver-xorg-video-nvidia-550 使用'sudo apt autoremove'来卸载它(它们)。 建议安装: ncurses-doc 下列【新】软件包将被安装: libncurses-dev 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 47 个软件包未被升级。 需要下载 384 kB 的归档。 解压缩后会消耗 2417 kB 的额外空间。 获取:1 http://archive.ubuntu.com/ubuntu noble/main amd64 libncurses-dev amd64 6.4+20240113-1ubuntu2 [384 kB] 已下载 384 kB,耗时 8秒 (47.0 kB/s) 正在选中未选择的软件包 libncurses-dev:amd64。 (正在读取数据库 ... 系统当前共安装有 211474 个文件和目录。) 准备解压 .../libncurses-dev_6.4+20240113-1ubuntu2_amd64.deb ... 正在解压 libncurses-dev:amd64 (6.4+20240113-1ubuntu2) ... 正在设置 libncurses-dev:amd64 (6.4+20240113-1ubuntu2) ... 正在处理用于 man-db (2.12.0-4build2) 的触发器 ...
然后就可以使用menaconfig进行内核的配置了。