泰山派3--写一个最简单的带传参的驱动

这是一个最简单的带传递参数功能的驱动,编译好模块后在泰山派上加载。
准备工作:
材料:

- 一台装有Linux虚拟机的PC
- 一个泰山派开发板
- 一个串口烧录器CH341
1
编写驱动.c文件




12
建立一个新文件夹param(名字自己起),进入文件夹。把之前的helloworld.c 和 Makefile文件复制过来,在其基础上改写。把helloworld.c改名为param.c。
打开param.c文件修改如下:
#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h> //传参函数的头文件
static int a = 0; //变量static int array[5] = {0}; //变量static int array_size; //变量static char str1[10] = {0}; //变量
module_param(a, int, S_IRUGO); //传递基本类型参数的函数
MODULE_PARM_DESC(a, "e.g:a=1"); //参数说明函数
module_param_array(array, int, &array_size, S_IRUGO); //传递数组参数的函数
MODULE_PARM_DESC(array, "e.g:array=1,2,3"); //参数说明函数
module_param_string(str, str1, sizeof(str1), S_IRUGO); //传递字符串类型参数的函数
MODULE_PARM_DESC(str, "e.g:str=hello world"); //参数说明函数
static int moduleparam_init(void) //驱动加载函数
{
int i = 0;
printk("a = %d\n", a); //打印基本变量a
for (i = 0; i < array_size; i++) //用for循环打印数组变量array
{
printk("array[%d] = %d\n", i, array[i]);
}
printk("array_size = %d\n", array_size); //打印表示数组长度的变量array_size
printk("str1 is %s\n", str1); //打印字符串变量str1return 0;
}
static void moduleparam_exit(void) //驱动卸载函数
{
printk("bye bye\n");
}
module_init(moduleparam_init); //系统加载驱动函数框架
module_exit(moduleparam_exit); //系统加载驱动函数框架
MODULE_LICENSE("GPL"); //系统加载驱动协议
MODULE_AUTHOR("lxh"); //驱动作者
MODULE_VERSION("V1.0"); //驱动版本说明
param.c
1.88KB
2
修改Makefile文件

打开Makefile文件:修改第一行为:obj-m += param.o保存退出
Makefile
183B
3
设置环境变量并编译模块




12
首先设置内核架构:
export ARCH=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编译。
4
测试





123
在泰山派上设置消息输出等级:echo 8 > /proc/sys/kernel/printk
把刚生成的.ko文件复制到开发板的根目录。
输入insmod param.ko a=9 array=1,2,3,4,5 str=hello 命令加载驱动模块,看打印输出,再输入命令:rmmod param.ko 卸载。










更多相关项目
猜你喜欢
评论/提问(已发布 0 条)

