基于Ubuntu的Linux内核编译报错及解决办法

一、重新创建虚拟机

点击以下网站,跳转到安装教程:

点我跳转到基于Ubuntu的Linux系统下载

推荐里面的远程连接软件Electerm也可以下载,有很多好处。

推荐设置存储空间大小为50GB,另外,在配置ssh连接的时候,若是一直连接不上,看下图:


注意:修改上述的三行代码时,前面的井号是注释,需要删除。

只要步骤没出问题的话,就是这个注释没有删除,连接上之后,就可以通过Electerm操纵虚拟机。

二、编译新内核

1.下载并解压新内核

推荐使用清华源镜像下载,官方的下载速度太慢了,这里给出下载内核版本为5.15.5版本的代码,想要下载6.几版本的话,需要将下列代码中的v5.x,以及后面的5.15.5改为你想要下载的版本。

wget  https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.15.5.tar.xz

具体的内核版本号,进下面的官网查找:

Linux内核官网

解压新内核,下列代码均以5.15.5的内核版本,具体版本号看自己所下载的是哪个

tar xavf linux-5.15.5.tar.xz

2、下载相关依赖

下载编译相关依赖:

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves

编译C语言的gcc,如果没有也需要下载

sudo apt update
sudo apt install gcc g++

注意:当然若是后续编译的时候,报错信息说某些依赖还没下载的话,就需要下载相关依赖,并重新编译。

3、配置文件

使用如下命令,一行一行执行,不要太急

cd linux-5.15.5/
cp /boot/config-$(uname -r) .config
make menuconfig

注意,进入配置界面,如图

进不去这个界面,也可能是Electerm或者虚拟机界面没有开全屏,开全屏就不会报错了

进去之后,按照如下操作,完成配置,其余的不需要点。

  1. Load -> OK 加载配置
  2. Save -> OK -> Exit 保存配置
  3. Exit 退出完成配置

4、禁用可能会影响编译的选项

 1、禁用某些选项
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
2、禁用 CONFIG_DEBUG_INFO_BTF 
1. 进入内核源代码目录

首先,确保你在内核源代码的根目录下。(版本号是自己下载的)

cd linux-5.15.5/
2. 编辑 .config 文件

内核配置通常保存在 .config 文件中。你可以使用nano文本编辑器打开它:

nano .config
3. 查找并禁用 CONFIG_DEBUG_INFO_BTF

.config 文件中,查找 CONFIG_DEBUG_INFO_BTF。你可以使用搜索功能:

  • 在 nano 中,按 Ctrl + W,然后输入 CONFIG_DEBUG_INFO_BTF

找到后,将其行更改为:

CONFIG_DEBUG_INFO_BTF=n

如果该行不存在,可以直接添加这一行。

4. 保存并退出
  • 在 nano 中,按 Ctrl + X,然后按 Y 确认保存更改。
  • 在 vim 中,输入 :wq 保存并退出。
3、禁用 CONFIG_X86_X32 选项
1.编辑.config文件 

在终端中,使用 nano 或其他文本编辑器打开 .config 文件:

nano .config
 2.查找 CONFIG_X86_X32 选项

nano 中,你可以按 Ctrl + W,然后输入 CONFIG_X86_X32,按 Enter 查找该选项。

3.禁用该选项

找到后,确保该行是这样的:

# CONFIG_X86_X32 is not set

如果原来是:

CONFIG_X86_X32=y

将其改为:

# CONFIG_X86_X32 is not set

这表示禁用该选项。

4.保存并退出
  • 按 Ctrl + O 保存文件,然后按 Enter 确认。
  • 按 Ctrl + X 退出 nano。

5.拓展存储空间

1.查看使用的存储空间
df -h

查看当前虚拟机使用了多少空间。

2.检查剩余空间

检查你的卷组(VG)是否有足够的空间。运行以下命令:

vgdisplay

查看 Free PE / Size,确保有足够的空间来扩展逻辑卷,若是Free PE / Size有很多空间(至少10GB以上),就可以进行拓展,若是空间太少,就需要将当前虚拟机删除,重新创建一个50GB的虚拟机,创建存储空间为50GB的虚拟机,应该是可以拓展到40GB的,使用下述命令:

sudo lvresize -L 40G /dev/mapper/ubuntu--vg-ubuntu--lv
3.拓展文件系统

查看虚拟机文件系统

df -T

出现如下格式信息:

Filesystem                 Type     Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4   24G  8.4G   14G  38% /

可以看到,我的虚拟机是ext4文件系统的,是哪个文件系统就使用哪个代码!

扩展逻辑卷后,必须扩展文件系统以使用新的空间。根据你使用的文件系统类型,运行以下命令:

  • 对于 ext4 文件系统
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
  • 对于 xfs 文件系统
sudo xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv

 最后,使用查看指令

df -h

就可以看到是否拓展成功!

6.正式编译

使用

make -j4

正式编译,若是弹出下列选项

  > 1. Rely on the toolchain's implicit default DWARF version (DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT)
    2. Generate DWARF Version 4 debuginfo (DEBUG_INFO_DWARF4)
    3. Generate DWARF Version 5 debuginfo (DEBUG_INFO_DWARF5) (NEW)
  choice[1-3?]: 
建议选1,安全一点

Generate BTF typeinfo (DEBUG_INFO_BTF) [N/y/?] (NEW) 

这个不需要,选N

然后就可以等待编译完成了,可能要很久,一般2-3个小时!

7.安装

1.安装模块
sudo make modules_install
2.安装内核
sudo make install

创建一个新的 initramfs,并将其指定版本号为 5.15.5,即新编译的内核的版本号,版本号以自己下载的为准!

sudo update-initramfs -c -k 5.15.5

 更新引导程序 grub

sudo update-grub
3.重启
shutdown -r now
4.检查新内核版本
uname -r

版本号显示为自己下载的内核版本即为成功!

参考如下:

linux 内核编译安装记录 (验证可行)

### 编译 Linux 内核时遇到的错误解决方案 #### 错误描述 当在 Ubuntu 下进行嵌入式 Linux 开发并尝试交叉编译内核时,可能会遇到如下错误:“error while loading shared libraries: /lib/x86_64-linux-gnu/libc++.so: file too short”。此错误表明共享库加载失败,可能是由于文件损坏或者路径配置不正确引起的[^1]。 对于另一个常见的错误,“multiple definition of yylloc”,这通常发生在编译特定版本的 Linux 内核(如 linux-imx-rel_imx_4.1.15_2.1.0_ga),该问题是由于重复定义变量造成的。这种情况下,可能是因为多个源码文件包含了相同的全局变量声明[^2]。 #### 解决方法 针对第一个错误: - **检查环境变量设置**:确认 `LD_LIBRARY_PATH` 和其他相关环境变量指向的是正确的工具链目录而不是主机系统的标准库位置。 - **验证安装包完整性**:重新下载或校验所使用的交叉编译器及其依赖项是否完整无损;如果怀疑本地存储有问题,则应考虑更换镜像源再次获取资源。 - **清理旧构建产物**:移除之前未完成或异常终止后的残留目标文件夹以及临时对象文件,防止它们干扰新的编译过程。 ```bash make clean && make mrproper ``` 关于第二个错误: - **查找冲突源头**:通过 grep 命令定位所有涉及 `yylloc` 的地方,并审查这些地方是否有不必要的外部引入或是宏展开带来的副作用。 - **调整预处理器选项**:适当修改 Makefile 中有关 C 预处理阶段的行为参数,比如关闭某些特性开关来规避潜在的风险点。 ```makefile CFLAGS += -Wno-macro-redefined ``` 以上措施有助于排除上述两类典型问题中的大部分情况。然而实际操作中还需结合具体场景灵活应对各种突发状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值