Linux内核编译
对于目的平台的Linux内核的编译,一般选择交叉编译的方式,以树莓派4B为例,在Linux虚拟机上编译一个适合树莓派4B使用的Linux内核。
·
目录
交叉编译主机下载目的平台的交叉编译链和内核编译所需的依赖(部分第三方库)
对于目的平台的Linux内核的编译,一般选择交叉编译的方式,以树莓派4B为例,在Linux虚拟机上编译一个适合树莓派4B使用的Linux内核
交叉编译主机下载目的平台的交叉编译链和内核编译所需的依赖(部分第三方库)
- 查看树莓派的位数,命令getconf LONG_BIT
- 安装第三方库ncurses,命令sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
- 安装32位的交叉编译工具链,命令sudo apt install crossbuild-essential-armhf,如果树莓派的位数是64位,则安装64位交叉编译工具链,命令sudo apt install crossbuild-essential-arm64
交叉编译主机下载目的平台的Linux内核源码
- 查看树莓派的内核版本,命令uname -r
- 下载树莓派对应版本的Linux内核源码https://github.com/raspberrypi/
交叉编译主机配置目的平台的Linux内核
配置目标平台的Linux内核,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核
方式1
- 厂家一般会配有linux内核源码和配置手册,我们只需要CV就行,cp 厂家.config xxx.config
- 由于树莓派4B的芯片是bcm2711,我们直接使用厂家的.config文件(bcm2711_defconfig)生成新的.config文件,在linux源码目录执行命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabinf- bcm2711_defconfig KERNEL=kernel7l
- ARCH:指定arm架构
CROSS_COMPILE:指定编译器指定
xxxconfig:指定厂家.config文件
KERNEL:指定Linux内核
方式2
在Linux内核目录底下执行命令make menuconfig 进入图形库一项项进行配置
- * 编译进内核 zImage包含了驱动
- M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
方式3
自己进行配置内核,完全自己掌握配置
交叉编译主机编译内核
编译配置好的树莓派4B 32位的Linux内核
- 在Linux源码目录底下执行命令,make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
- -j4:4核,指定电脑资源来编译内核
ARCH:指定架构
CROSS_COMPILE:指定编译器
-zImage:生成的内核镜像
modules:生成的驱动模块
dtbs:生成的配置文件 - 如果是64位,执行命令make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
编译成功后会在目标平台的Linux内核源码目录底下生成vmlinux,以及存在zImage文件
- vmlinux:没有压缩过的linux
- 目标平台的Linux内核文件:zImage文件
目的平台使用该编译好的内核
挂载SD卡到交叉编译主机
正常SD卡会自动挂载到/media/$下的boot和rootfs目录下
可以看到当插入SD卡后,SD卡自动挂载了,如果没有自动挂载,则需要手动挂载,将识别到实际的SD卡的设备节点,将SD卡挂载到交叉编译主机上,在Linux内核源码目录底下执行以下命令
- sudo mkdir /media/linux/rootfs -p
- sudo mkdir /media/linux/boot -p
- sudo mount /dev/sdb1 /media/linux/boot
- sudo mount /dev/sdb2 /media/linux/rootfs
将内核驱动模块安装到SD卡
- 在Linux源码(树莓派32位)目录底下执行命令,sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/linux/rootfs modules_install
- 如果是树莓派64位,执行命令sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/media/linux/rootfs modules_install
备份SD卡的原内核并将新内核和设备树配置文件放入SD卡中
- sudo cp/media/linux/boot/$KERNEL.img /media/linux/boot/$KERNEL-backup.img
- sudo cp arch/arm/boot/zImage /media/linux/boot/$KERNEL.img
- sudo cp arch/arm/boot/dts/*.dtb /media/linux/boot
- sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/linux/boot/overlays/
- sudo cp arch/arm/boot/dts/overlays/README /media/linux/boot/overlays/
- sudo umount /media/linux/boot
- sudo umount /media/linux/rootfs
更多推荐
已为社区贡献2条内容
所有评论(0)