vmware + ubuntu 20.04 构建内核代码编译环境

背景

最近一段时间,一直在做sdn内核转发面相关的工作,所以开始和内核模块、内核源码打交道,包括内核模块的编译,内核源码的走读等。对于之前一直在做用户态开发的我来说还是有一些难度。光编译环境就费了我一些时间,记录一下整个流程。

内核编译环境搭建

编译环境采用vmware 16 pro + ubuntu 20.04的方式。虚机的建立过程就不详细说了。
主要记录一下内核编译,需要ubuntu 20.04安装哪些包。

ssh组件及编译依赖包安装

# 设置 root 密码。
sudo passwd
# 切换 root 用户。
su root

# 安装部分工具。
apt-get install vim git tmux openssh-server -y

vi /etc/ssh/sshd_config
# 添加以下项目允许root ssh远程登录
PermitRootLogin yes

# 启动 ssh. 方便远程操作
ps -e | grep ssh
sudo /etc/init.d/ssh start

# 安装编译依赖组件。
apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev -y

通过以上操作安装的gcc版本是gcc 9。编译内核时会报’CONFIG_RETPOLINE=y, but not supported by the compiler’编译工具版本不匹配的错误,所以需要将gcc版本降到4.8.5

安装gcc 4.8.5

添加软件源,并更新apt

# 修改软件源
vi /etc/apt/sources.list
# sources.list末尾添加
deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main 
deb-src http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu xenial main
# 更新apt
apt update

完成以上操作后,直接apt install gcc-4.8 g+±4.8,会报缺少libmpfr4 (>= 3.1.3)的依赖的错误。
下载libmpfr4的deb包,并安装

# 下载libmpfr
wget http://security.ubuntu.com/ubuntu/pool/main/m/mpfr4/libmpfr4_3.1.4-1_amd64.deb
# 安装libmpfr
dpkg -i libmpfr4_3.1.4-1_amd64.deb

安装完libmpfr后,就可以继续安装gcc、g++了

apt install gcc-4.8 g++-4.8

安装完gcc 4.8后,此时系统里有gcc 4.8和gcc 9两个版本,且默认使用的是gcc 9。可以通过gcc --version查看。
通过以下操作将gcc默认版本修改为gcc 4.8

# 修改gcc版本优先级
update-alternatives  --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 2
update-alternatives  --install /usr/bin/gcc gcc /usr/bin/gcc-9 1
# 修改g++版本优先级
update-alternatives  --install /usr/bin/g++ g++ /usr/bin/g++-4.8 2
update-alternatives  --install /usr/bin/g++ g++ /usr/bin/g++-9 1

说明:先后添加gcc-4.8 gcc-9到gcc,使得ubuntu下gcc多版本共存;每行后面的数字(2、1)表示优先级,越大越高。即gcc-4.8优先级高于gcc-9。
切换gcc版本可以用以下命令

update-alternatives  --config gcc

内核编译

从https://mirrors.edge.kernel.org/pub/linux/kernel/ 地址下面下载所需内核版本

# 下载3.10版本的内核
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz
# 解压内核tar包
tar xvf linux-3.10.tar.xz
# 进入解压的目录
# 配置编译内核的内容,生成.config文件,有两种方式
# 方式一,根据当前编译环境自动进行配置,新手推荐此种方式
make defconfig
# 方式二,图形化配置所需编译的条目,条目前为*代表静态编译进内核里,M代表编译为内核模块.ko文件,可
# 以通过insmod方式添加进内核
make menuconfig
# 执行编译命令,-j后面数字代表同时编译的线程
make -j4

编译成功后导出内核modules

# INSTALL_MOD_PATH后面指定modules导出的目录
make modules_install INSTALL_MOD_PATH=/xxx

make modules_install会在定义的/xxx的目录下生成lib/modules/3.10/文件夹。后期进行驱动或者内核模块的开发依赖这个文件夹。

参考

搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
Ubuntu20.04.3中安装gcc-4.8.5,gcc多版本共存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值