从零开始使用交叉编译开发树莓派驱动hello world

本文介绍了如何在Linux上为树莓派进行交叉编译环境的搭建,包括获取kernel源码和compilerchain。重点讲解了如何编写简单的驱动程序,通过一个hello_world示例展示了如何创建驱动源码和Makefile,以及如何编译生成ko文件。最后说明了如何将ko文件传送到树莓派并加载驱动,观察输出信息。
摘要由CSDN通过智能技术生成

【以下命令没有特别说明,都在上位机端执行】

1.交叉编译环境准备

arm设备性能低,一般不在arm板上编译东西,所以使用交叉编译。此处上位机为linux pc。

  • 【kernel源码】:树莓派运行uname -r查看当前树莓派的内核版本。上位机下载对应版本的内核git clone git://github.com/raspberrypi/linux.git
  • 【compiler chain】:git clone git://github.com/raspberrypi/tools.git

2.编写驱动

网上有很多教程说需要编译kernel源码,实测不需要,只需按照以下做即可。

2.1. 驱动源码

#include <linux/init.h>
#include <linux/module.h>

static int hello_init(void)
{
        printk(KERN_ALERT"hello INIT.\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_ALERT"hello EXIT.\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("xx");

2.2. 驱动Makefile,是否使用绝对路径与环境变量有关。

ifneq ($(KERNELRELEASE),)

obj-m:=hello.o
else
KDIR := /home/xx/linux-rpi-5.10.y
PWD := $(shell pwd)
all:
	make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/home/xx/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/arm-linux-gnueabihf- -j10
endif
clean:
	rm -f *.ko *.o *.symvers  *.order  *.mod  *.mod.c  *.mod.o
.PHONY: clean

在写好的驱动目录中,运行make,会生成驱动文件hello.ko,将这个文件传输到树莓派中,然后树莓派运行sudo insmod hello.ko即可安装驱动,树莓派运行dmesg即可看到驱动打印出来的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朴人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值