Linux 内核编译,打包

1. 桌面内核编译

a. 环境准备

# 更新apt软件源
sudo apt update 
 
# 安装编译软件环境
apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves u-boot-tools xxd  libncurses5-dev   openssl

示意:

  • fakeroot:fake root 环境模拟工具
  • build-essential:基本的编译工具和环境,包括:C, C++, gcc, and g++
  • ncurses-dev:为基于文本的终端提供API的编程库
  • xz-utils:提供快速的文件压缩和解压缩
  • libssl-dev:支持SSL和TSL加密数据,保证网络连接的安全性
  • bc(Basic Calculator):一种支持语句交互式执行的数学脚本语言
  • flex(Fast Lexical Analyzer Generator):生成将字符转换为标记的词法分析程序
  • libelf-dev:发布用于管理ELF文件(可执行文件、核心转储和目标代码)的共享库
  • bison:GNU解析器生成器,将语法描述转换为C程序

b. 下载源代码

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.4.tar.xz
tar -xvf linux-6.9.4.tar.xz
cd linux-6.9.4/

c. 按需修改内核编译配置

使用当前系统的.config文件作为模板

make defconfig      # 使用默认配置文件
cp arch/arm64/configs/defconfig  .config  # 选择使用某一个配置

配置内核,如果没什么需求就直接save,然后exit

make menuconfig

中间可以加入自己需要的源码补丁。。。

d. 编译 && 安装

ⅰ. 方法1—deb包安装

# 安装依赖
apt install -y debhelper dh-virtualenv

# 使用make bindeb-pkg进行编译
make -j$(nproc) bindeb-pkg 

# 交叉编译(需要先安装交叉编译器)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)  bindeb-pkg

# 指定内核版本
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)   KERNELRELEASE="5.4.96-39" bindeb-pkg

执行完成之后,在源码目录的上层会生成3个文件

  • linux-headers-5.4.96-39_5.4.96-39-3_arm64.deb
  • linux-image-5.4.96-39_5.4.96-39-3_arm64.deb
  • linux-libc-dev_5.4.96-39-3_arm64.deb
# 安装新内核
sudo dpkg -i *.deb
 
# 更新grub
sudo update-grub

ⅱ. 方法2—make install安装

# 编译和安装
sudo make -j$(nproc)
sudo make modules -j$(nproc)
# sudo make INSTALL_MOD_STRIP=1 modules_install -j8
sudo make modules_install -j$(nproc)
sudo make install -j$(nproc)

# 更新grub
sudo update-grub

ⅲ. 内核打包

分别是:.config,bzImage,System.map 和系统/lib/modules/linux-3.12.5目录

  • 拷贝/lib/modules/ 到目标系统的/lib/modules/下
  • 拷贝 arch/ arm64/boot/zImage 到目标系统/boot下
  • 拷贝System.map 到目标系统/boot下

(可以参考arch/arm64/boot/install.sh安装脚本)

补充: 几种内核镜像文件关系

  • vmlinux: 编译出来的最原始的内核文件,未压缩。
  • zImage: bzImage 是vmlinux经过gzip压缩后的文件(内核比较小采用zimage 大内核采用bzimage)。
  • uImage: U-boot专用的映像文件,在zImage之前加上一个长度为0x40的tag(文件的类型、加载位置、生成时间、大小等信息)

e. 卸载内核

查看自己安装过的内核版本,在里面我们可以找到对应的headers与image。

dpkg --get-selections | grep image

卸载image和headers

# 先卸载headers:
sudo apt-get purge linux-headers-6.9.2
# 接着卸载image:
apt-get purge linux-image-6.9.2
# 更新grub
sudo update-grub

2. 安装交叉编译环境

a. 下载交叉编译工具链

  • 工具链官方路径:

http://releases.linaro.org/components/toolchain/binaries/

  • 也可以到国内源网站下载更快:

https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain

arm64用的工具链是包含aarch64关键字,选择最新版本下载并解压:

wget  https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

b. 安装交叉编译环境

创建一个路径来存放工具链:/usr/bin/toolchain,整个目录拷贝到路径下:

mkdir /usr/bin/toolchain
cp gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu /usr/bin/toolchain/ -rf

设置环境变量,加入工具链存放的路径

export PATH=$PATH:/usr/bin/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/:/usr/bin/toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/

判断工具链加入是否正常

后续在make时需要指定架构和编译器

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

3. 服务器编译

a. 环境准备

yum -y install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel 
  • 安装dwarves
# 克隆dwarves源码到本地
git clone https://gitee.com/zhangjinyu/dwarves.git

# 安装编译dwarves相关的工具包
yum install cmake

# 开始编译
cd dwarves/
mkdir build
cd build
cmake -D__LIB=lib ..
make install

# 查看pahole版本
pahole --version

# 如若提示以下报错信息:
pahole: error while loading shared libraries: libdwarves_emit.so.1: cannot open shared object file: No such file or directory

vim /etc/ld.so.conf
追加:/usr/local/lib
# 重新加载动态库链接
执行命令:/sbin/ldconfig

b. 编译

make -j26
make modules_install -j26
make install

4. 参考连接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值