【Linux】【驱动】驱动框架以及挂载驱动

本文详细介绍了在Linux环境下配置开发环境、编写驱动文件(chrdevbase.c)、使用Makefile进行编译,以及如何挂载驱动到NFS共享并控制printk信息。步骤包括设置交叉编译、驱动初始化与退出函数,以及模块加载和卸载。
摘要由CSDN通过智能技术生成

绪论

一个驱动可以编译成驱动模块然后挂载到驱动中去,也可以编译到系统中去,下面演示第一种方法

1.配置开发环境

配置全局变量为ARM

export ARCH=arm

看是否配置成功

make menuconfig

如下图表示已经修改成功了
在这里插入图片描述
配置gcc编译环境

export CROSS_COMPILE=arm-linux-gnueabihf-

2. 编写驱动文件

驱动文件名称 chrdevbase.c

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

//drivers for init
static int hello_init(void)
{
	printk("Hello init \n");
	return 0;
}


//drivers for exit 
static void hello_exit(void)
{
	printk("Hello exit \n");

}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

3. 编译Makefile文件

KERNELDIR := /home/book/100ask_imx6ull_mini-sdk/Linux-4.9.88
CURRENT_PATH := $(shell pwd)
obj-m := chrdevbase.o

build: kernel_modules

kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

KERNELDIR :表示你Linux内核源码的位置
obj-m := chrdevbase.o :表示你编译的文件的名称

4.编译

make clean 

清除编译的代码

make

//编译代码

5. 挂载驱动

挂载nfs网盘

mount -t nfs -o nolock,vers=3 192.168.5.18:/home/book/nfs_rootfs /mnt

进入目录

cd /nfs

查看目录

ls /mnt

将当前路径下的chrdevbase.ko 文件移动到/home/book/nfs_rootfs/路径

cp chrdevbase.ko /home/book/nfs_rootfs/

删除文件

rm -f + chrdevbase.ko

注意:有些开发板打开了或者禁止了printk信息,导致你看到的实验现象可能不一样,

执行如下命令禁止内核打印printk信息:

echo "1 4 1 7"> /proc/sys/kernel/printk

执行如下命令使能内核打印printk信息:

echo "7 4 1 7"> /proc/sys/kernel/printk

此时已经将文件移动到了开发板中,开发板查看文件

在这里插入图片描述

加载驱动

insmod chrdevbase.ko

列出加载的驱动

lsmod

移除驱动

rmmod chrdevbase

执行后如图所示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值