[RaspeberryPi_3b+] 树莓派:Linux内核、设备树的编译及替换

一、开发环境、源码以及编译工具

1. 开发环境的安装

目前我是在 Ubuntu 16 的虚拟机环境下做树莓派相关的开发,以下命令用来安装开发必需的环境:

sudo apt-get update
sudo apt-get install bc build-essential git unzip
sudo apt-get install kernel-package	libncurses5-dev

接下来,我会在用户目录下创建Rpi目录来存放内核源码以及编译工具

mkdir Rpi
cd Rpi

2. 获取树莓派内核源码

从GitHub上获取树莓派的内核源码,以 kernel-4.14 内核为例:

git clone --depth=1 -b rpi-4.14.y https://github.com/raspberrypi/linux.git

3. 获取交叉编译工具链

从GitHub获取树莓派的交叉编译工具:

git clone https://github.com/raspberrypi/tools

目前,在 ~/Rpi 目录下已经有了 linux.tar.bz2 以及 tools.tar.bz2 两个压缩包,解压出来即可。最终内核源码以及编译工具的目录分别为:

~/Rpi/linux

~/Rpi/tools

4. 修改环境变量,以方便使用编译工具

sudo vi ~/.bashrc

编辑用户目录下的 .bashrc,把编译工具的执行路径加入到 PATH变量中,即在文件末尾加入以下两行:

	export PATH=$PATH:$HOME/Rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
	export PATH=$PATH:$HOME/Rpi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin

为使环境变量即时生效,可执行:

source .bashrc

二、内核的修改和配置、编译

1. 树莓派3b+的设备树文件

当你用树莓派的GPIO连接外设时,通过修改设备树,可以把相关的硬件信息“传给”内核驱动。

树莓派3b+的设备树文件为:

arch/arm/boot/dts/bcm2710-rpi-3-b-plus.dts

2. 内核的配置

首先,可以对内核进行默认的配置

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

在此基础上,如果你想要做进一步的配置,可执行:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

在配置界面进行配置并保存退出即可。

3. 编译内核镜像、内核模块以及设备树

你可以把内核镜像、内核模块和设备树一起编译出来:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j8

也可以单独编译各个部分:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j8
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j8
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

三、替换树莓派系统的内核镜像、设备树,以及内核模块的安装

首先需要一张已经写入树莓派系统的内存卡,我们将在内存卡上替换相关的镜像或者文件。

1. 虚拟机上挂接SD卡

为了知道你的SD卡的对应的dev节点,可以在SD卡的插入前后使用 lsblk 命令来查看以及确定。

在挂接之前需要先建立两个挂接点:

mkdir /mnt/fat32
mkdir /mnt/ext4

接下来把SD卡挂接到虚拟机系统中:

sudo mount /dev/sdb1 /mnt/fat32
sudo mount /dev/sdb2 /mnt/ext4

2. 打包内核镜像并替换掉SD卡上的内核镜像

sudo scripts/mkknlimg arch/arm/boot/zImage /mnt/fat32/kernel7.img

3. 设备树相关文件的替换

sudo cp arch/arm/boot/dts/*.dtb /mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README /mnt/fat32/overlays/

4. 内核模块的安装

sudo make ARCH=arm INSTALL_MOD_PATH=/mnt/ext4 modules_install

5. 取消SD卡的挂载

sudo umount /mnt/fat32
sudo umount /mnt/ext4

完成这些之后,从电脑上拔出SD卡,重新插回树莓派,重新启动树莓派即可。

你可能感兴趣的:(树莓派笔记)