树莓派4B编译内核模块

树莓派4B编译内核模块

在树莓派上实现简单的内核模块的编译和测试

下载源码并编译

  1. 环境准备
sudo apt install git bc bison flex libssl-dev make
  1. github下载源码
git clone --depth=1 https://github.com/raspberrypi/linux

这个命令只会下载最新的一个版本,不会有历史记录,建议使用下面的命令下载和系统一样的内核版本。
下载指定版本源码,以5.10为例:

sudo git clone --depth=1 https://github.com/raspberrypi/linux --branch rpi-5.10.y
  1. 编译
    对于树莓派4B 64位,使用以下命令进行配置:
cd linux
KERNEL=kernel8
sudo make bcm2711_defconfig

编译:

sudo make -j4 Image.gz modules dtbs

如果需要更新树莓派内核的话,可以使用以下命令:

sudo make modules_install
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm64/boot/Image.gz /boot/$KERNEL.img

这里的更新应该是把启动时的内核镜像、设备树进行更新,同时也把一些模块放置在文件系统里面。

内核模块测试

  1. 编写内核模块代码hello_kernel和Makefile。

hello_kernel.c

#include <linux/module.h>

static int __init  my_init(void)
{
        printk(KERN_INFO"Hello kernel!\n");
        return 0;
}
static void __exit my_exit(void)
{
        printk(KERN_INFO"Good bye!\n");
        return ;
}
module_init(my_init);
module_exit(my_exit);

MODULE_LICENSE("GPL");

Makefile如下:

KERNELDIR ?=
PWD :=$(shell pwd)
obj-m := hello_kernel.o

all:
	make -C $(KERNELDIR) M=$(PWD) modules
clean:
	rm -rf *.o  *.ko  *.mod.c *.mod *.order *.symvers
  1. 编译
sudo make KERNELDIR=/usr/src/linux
  1. 测试
    在这里插入图片描述
    使用dmesg查看内核信息:
    在这里插入图片描述

错误记录

  1. insmod: ERROR: could not insert module hello_kernel.ko: Invalid module format
    在这里插入图片描述
    dmesg -c查看日志信息,发现是版本的问题。
    查看linux源码和树莓派版本,发现不一致,下载和内核版本一致的源码。

参考文章

  1. 树莓派官方资料
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值