在Ubuntu上编译特定版本的Linux Kernel

由于实验需要,我得在Ubuntu上编译特定版本的Linux Kernel,网上的教程已经很多了,不过有的有错,有的不完整,所以再自己简单总结一下。

需要注意的是,我这里只编译生成一些binary files,并不安装内核。

例如我需要编译这个版本:Linux kernel v5.12-rc2,解压之后终端进入文件夹,首先就是安装一些必要的工具,注意到网上有些浏览量很大的教程也缺少了这一步,例如:Linux内核编译_ibless的博客-CSDN博客_linux内核编译

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

其次就是和编译其他项目一样,需要有一个Configure文件,这里可以用一个图形化的工具:

make menuconfig

我们可以按照默认配置save一下即可。然后就可以编译了:

sudo make -j 10

这里的10表示用10个进程,一会就可以在对应目录下生成很多.o文件了。大家可以看看具体编译过程中的命令行输出。需要安装内核的朋友,可以参考上面那个网页,以及其他一些相关的网页:

Linux内核开发_1_编译LInux内核_17岁boy想当攻城狮的博客-CSDN博客_编译linux内核

Linux内核编译很简单,6步编译一个自己的内核 

我是直接在生成的binary文件上分析的。首先,编译过程是-O2 optimization level,能不能用O0呢?搜了一些网页,很多朋友说不行,我也没有仔细研究。像这个邮件列表里有人回复了:Is it possible to turn off the gcc optimization when compilingkernel?

其次,上面这个过程生成了多少个binary呢?可以用一段Python代码将它们放到一起:

import os
import shutil

for dirpath, dirnames, filenames in os.walk('linux'):
    for each_file in filenames:
        if(each_file.endswith('.o')):
            path=os.path.join(dirpath,each_file)
            shutil.copyfile(path, 'linux-binaries/'+each_file)

我看了一下,一共是831个.o文件(针对我上面说的版本),大小一共是300多MB,感觉比想像的小很多啊,可能还是不完整,不过让我做实验暂时是够了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值