本文主要是介绍【驱动篇】龙芯LS2K0300之驱动示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实验环境
开发板:龙芯LS2K0300久久派
网络配置:配置好ssh连接,通过网口可以scp文件到开发板,参考前一篇文章
串口配置:通过CH340T模块连接好开发板上的UART0
示例程序
驱动代码
#include <linux/init.h>
#include <linux/module.h>static int hello_init(void)
{printk("Hello, this is a simple linux driver!\n");return 0;
}static void hello_exit(void)
{printk("Goodbye\n");
}module_init(hello_init);
module_exit(hello_exit);MODULE_LICENSE("GPL");
Makefile脚本
obj-m += hello.o
KDIR:=/home/asensing/loongson/linux-4.19
ARCH=loongarch
CROSS_COMPILE=loongarch64-linux-gnu-
PWD?=$(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules
构建和部署脚本
export PATH=$PATH:/home/asensing/loongson/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.3-1/bin
make -j8
FILE=$PWD/$(basename $PWD).ko
scp $FILE root@192.168.137.128:/home/root
验证
先清除内核日志
dmesg -c
在串口终端输入插入模块命令
insmod hello.ko
可以看到终端输出以下日志
[ 1253.139695] Hello, this is a simple linux driver!
然后输入卸载驱动模块命令
rmmod hello.ko
可以看到终端输出以下日志
[ 1350.375171] Goodbye
接口用法
MODULE_LICENSE
是一个用于指定模块的开源协议类型的宏,一般有以下几种
- GPL
- GPL v2
- GPL and additional rights
- Dual MIT/GPL
- Dual BSD/GPL
- Dual MPL/GPL
- Proprietary
module_init
用于指定模块初始化回调函数,设置驱动的资源初始化条件:如GPIO、定时器、中断、i2c设备等,函数原型:
typedef int (func)(void);
module_exit
用于指定模块卸载回调函数,驱动模块卸载时清理驱动所占用的资源:如内存、GPIO、定时器、中断等,函数原型:
typedef int (func)(void);
这篇关于【驱动篇】龙芯LS2K0300之驱动示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!