Linix驱动开发-萌新入门

前言(待补充)

首先看一下树莓派操作系统的版本:

1
2
[email protected]:~ $ uname -a
Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux

接下来下载交叉编译工具链(610.86 MB)

1
git clone git://github.com/raspberrypi/tools.git RpiTools

下载内核代码(1.98 GB)

1
git clone git://github.com/raspberrypi/linux.git RpiLinux

由于我的内核版本号是 4.14,因此切换 branch 到 4.14。

1
git checkout -t origin/rpi-4.14.y

按照教程,一个简单的 hello world 版本的驱动可以写成下面的形式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_ALERT"Hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

有关驱动程序代码的细节待补充。

仿写的 Makefile 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KDIR := /mnt/d/GitHub/Linux-Driver/RpiLinux
CROSS_COMPILE := /mnt/d/GitHub/Linux-Driver/RpiTools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-gcc
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE)

clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*

endif

关于

树莓派linux驱动学习之hello world

简单内核模块编写

文章作者: 40m41h42t
文章链接: http://qrzbing.cn/2019/02/20/arm-Linux-driver/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QRZ's Blog