Bootstrap

Linux内核编译和替换内核

前言

Linux内核支持多种架构。该篇小记是笔者第一次针对已有的内核配置文件来编译内核的,比如arm系列的博通bcm,海思HISI,恩智浦i.MX6ULL…本次是针对博通bcm2709_defconfig来编译内核的。
在这里插入图片描述
本次是针对博通bcm2709_defconfig来编译内核

一.编译之前的准备

  1. 安装交叉编译工具链https://blog.csdn.net/anmo_moan/article/details/108740807
  2. 安装ncurses库
sudo apt-get install libncurses5-dev libncursesw5-dev

二.生成.config配置文件

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

三.编译内核

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

编译时间较长,编译成功之后:

在编译的当前目录下会生成vmlinux和vmlinux.o文件

在这里插入图片描述

在arch/arm/boot目录下生成ZImage文件

在这里插入图片描述
这些都是Linux内核编译成功的标志。

四.替换内核

  1. 插入SD卡,将sd卡挂载到ubuntu
    (1)查看sd卡挂载点
sudo fdisk -l

会查看到两个挂载点sd1和sd2
(2)在工作目录下创建两个文件夹

mkdir data1 data2

(2)分别将sd卡的两个分区挂载到创建的目录下

sudo mount /dev/sdb1 ./data1
sudo mount /dev/sdb2 ./data2

sdb1一般为fat文件系统
sdb2一般为ext4文件系统
挂载之后就可以查看到分区的内容了
2. 向对应分区载入必要的设备驱动模块modules,内核镜像,设备树等
2.1 安装modules

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make
INSTALL_MOD_PATH=./data2 modules_install 操作ext4分区,需要root权限。

2.2 更新 kernel.img 文件
前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可:
cp kernel_new.img [fat]/
编辑 [fat]/config.txt 文件,在最后加入一行:
kernel=kernel_new.img

2.3 复制其他相关文件
cp arch/arm/boot/dts/.dtb [fat]/
cp arch/arm/boot/dts/overlays/.dtb* ./data1/overlays/
cp arch/arm/boot/dts/overlays/README ./data1/overlays/

更新完成后插回开发板即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变。

;