【Linux】【驱动】驱动框架以及挂载驱动
- 绪论
- 1.配置开发环境
- 2. 编写驱动文件
- 3. 编译Makefile文件
- 4.编译
- 5. 挂载驱动
- 注意:有些开发板打开了或者禁止了printk信息,导致你看到的实验现象可能不一样,
- 此时已经将文件移动到了开发板中,开发板查看文件
绪论
一个驱动可以编译成驱动模块然后挂载到驱动中去,也可以编译到系统中去,下面演示第一种方法
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
执行后如图所示