泰山派1--写最简单第一个helloworld驱动.ko模块

老小孩
原创
发布时间: 2025-06-09 23:27:15 | 阅读数 0收藏数 0评论数 0
封面
想学习编写驱动,自己搞了个Linux学习板--泰山派

准备工作:

材料:

  1. 一台装有虚拟机ubuntu的PC
  2. 一个泰山派开发板
  3. 一个串口烧录线
1

准备泰山派SDK包

从泰山派官网下载泰山派SDK包,按官网教程下载部署。

2

编写linux驱动文件

首先,先新建一个文件夹存放自己写的驱动文件,然后在里面新建驱动.c文件。打开.c文件先书写驱动框架,框架包括两个基本的驱动头文件:

#include<linux/module>

#include<linux/init.h>

然后写驱动加载函数定义,和驱动卸载函数定义:

static int modename_intit(void);

static void modename_exit(void);

然后写函数调用:

mode_init(驱动加载函数);

mode_exit(驱动卸载函数);

最后写支持GPL协议声明,作者信息,版本信息:

MODULE_LICENSE("GPL")

MODULE_AUTHOR("lxh")

MODULE_VERSION("V1.0")



下面是我的打印helloworld驱动文件:

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


static int helloworld_init(void)
{
        printk("helloworld!\n");
}

statuc void helloworld_exit(void)
{
        printk("hello bye!\n");
}


module_init(helloworld_init);
mouule_exit(helloworld_init);
MODULE_LICENSE("GPL")

MODULE_AUTHOR("lxh")

MODULE_VERSION("V1.0")


C
helloworld.c
348B
3

编写Makefile文件

在驱动源码的同目录下新建Makefile文件,书写框架:

obj-m += hello_world.o

KDIR:=/home/wht/tspi/linux/kernel //自己的SDK文件中的kernel所在的实际路径

PWD?=$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

echo $(PWD)

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order




下面是我写的Makefile文件:

obj-m += helloworld.o
KDIR:=/home/wht/tspi/linux/kernel
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
echo $(PWD)
clean:
rm -f .o .mod.o mod.c .symvers *.order


MA...
Makefile
183B
4

设置环境变量编译驱动内核模块

首先设置内核架构:

export ARCH=arm64 //arm64是架构类型 泰山派的3566,是arm64架构

再设置交叉编译路径:

export CROSS_COMPILE=/home/wht/tspi/linux/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- //(路径) 自己的编译器路径



然后输入make编译:

会在同目录下多出来几个生成的文件



5

在开发板上加载模块

用mobaxter连接开发板串口,打开终端。

设置消息输出等级:echo 8 4 1 7 > /proc/sys/kernel/printk

把刚生成的.ko文件复制到开发板的根目录。

输入insmod (.ko文件)命令加载驱动模块。

在输入rmmod (.ko文件)命令卸载驱动模块。

打印正常说明驱动成功了。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载