linux内核源码编译与遇到initrd.img镜像过大问题

内核源码编译
内核源码编译转载:http://blog.csdn.net/itas109 

1.linux内核之源码编译-环境

环境:

系统:Ubuntu 20.04
内核版本:5.4.0-26-generic
升级的内核版本:5.4.50
1.下载linux内核

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.50.tar.xz

wget https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/linux-5.4.50.tar.xz

2.安装所需前置软件

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

centos可参考(未验证)

sudo yum install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel

注意:至少需要12GB的磁盘空间来完成内核的编译过程
3.解压源码

tar xvJf linux-5.4.50.tar.xz

使用cd linux-5.4.50进入目录
4.清理内核源目录

make mrproper
make clean

5.配置内核参数

编译内核的方式:

    make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
    make xconfig(基于图形窗口模式的配置界面,xwindow下推荐使用)
    make oldconfig(只在原来内核配置上略作修改)
    make config(基于文本的最为传统的配置界面,不推荐使用)

最终都会生成.config文件
小技巧:
在正式编译内核之前,必须配置需要包含哪些模块。
有个一个好的办法就是直接复制当前系统的内核配置文件,然后使用menuconfig命令来进行修改部分所需参数。这样可以最大程序兼容原有参数。(高度定制化可以忽略该步骤,直接进行内核参数配置)

cp /boot/config-$(uname -r) .config

6.编译内核

CPU intel i5-6500使用4线程虚拟机大约需要80分钟左右

make -j8

7.安装内核和模块

安装模块(大约需要5分钟)

sudo make modules_install

8.如果遇到initrd.img镜像过大问题时

update-initramfs: Generating /boot/initrd.img-5.4.174
Error 24 : Write error : cannot write compressed block
E: mkinitramfs failure cpio 141 lz4 -9 -l 24
update-initramfs: failed for /boot/initrd.img-5.4.174 with 1.

更换安装内核模块指令为

make INSTALL_MOD_STRIP=1 modules_install -j4

9.安装内核(大约需要3分钟)

sudo make install

10.重启系统可以选择新安装的内核

11.其他

问题1:重启出错 end Kernel panic - not syncing: System is deadlocked on memory

解决:
由于虚拟机内存不足导致(原来设置2GB),调整成4GB后成功启动

License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处:http://blog.csdn.net/itas109 
QQ技术交流群:129518033

创建和修改`initrd.img`(初始内存文件系统镜像)文件是Linux操作系统中常见的任务,特别是在定制内核启动环境或修改内核模块时。以下是创建和修改`initrd.img`的基本步骤: 1. 安装必要的工具: 在大多数Linux发行版中,创建`initrd.img`通常需要安装`mkinitramfs`或`dracut`工具。可以通过包管理器安装这些工具,例如在基于Debian的系统中使用`apt`,在基于Red Hat的系统中使用`yum`或`dnf`。 ```sh sudo apt-get install mkinitramfs # Debian/Ubuntu系统 sudo yum install mkinitramfs # CentOS/RHEL系统 ``` 2. 创建initrd文件: 通常,创建`initrd.img`文件是在更新内核后由系统自动完成的,但如果你需要手动创建,可以使用以下命令: ```sh sudo mkinitramfs -o /boot/initrd.img-$(uname -r) $(uname -r) ``` 这里`$(uname -r)`命令会返回当前运行的内核版本号,`-o`后面指定输出的文件名。 3. 修改initrd.img文件: 如果需要修改现有的`initrd.img`文件,首先需要解压它,进行修改,然后再重新打包成`initrd.img`。这可以通过以下步骤完成: ```sh sudo mkdir /tmp/initrd sudo mount -o loop /boot/initrd.img-$(uname -r) /tmp/initrd sudo cp -a /tmp/initrd/* /path/to/your/modifications # 在 /path/to/your/modifications 目录中进行必要的修改 sudo umount /tmp/initrd sudo rm -rf /tmp/initrd ``` 修改完成后,重新打包成`initrd.img`: ```sh sudo mkinitramfs -o /boot/custom_initrd.img-$(uname -r) $(uname -r) ``` 4. 更新引导加载器配置: 在创建或修改`initrd.img`后,可能需要更新引导加载器的配置文件,如`grub.cfg`,以确保新的`initrd.img`文件能够被加载。 ```sh sudo update-grub # 对于GRUB引导加载器 ``` 5. 验证修改: 创建或修改`initrd.img`后,应该重启系统并检查是否一切正常。 ```sh sudo reboot ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值