0.内核模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35886943/article/details/90069539

实验所用硬件开发板为exynos4412,内核版本为linux-3.14

  • 什么是内核模块?
     可在运行时添加到内核中的代码被称为“模块”。
  • 使用内核模块有什么优点?
      1、减小内核体积,因为模块本身不被编译到内核镜像里面。
      2、可以在内核中添加或删除功能而不用重新编译内核
  • 内核模块和应用程序有什么不同?
应用程序 内核模块
从头到尾单任务 预先注册进内核,被动的被调用的
运行空间在应用空间 运行空间在内核空间,权限大
段错误对系统危害小 段错误常会导致系统崩溃
  • 内核模块三要素
    实现一个最简单的内核模块需要三个元素,分别是
    — 模块加载入口声明
    — 模块卸载入口声明
    — 免费开源 许可声明
//moudle.c
#include <linux/init.h>
#include <linux/module.h>
int moudle_init(void)
{
    printk("moudle init go \n");
    return 0;
}

void moudle_exit(void)
{
    printk("moudle exit go\n");

}

module_init(moudle_init);    		//模块加载入口声明
module_exit(moudle_exit);  			//模块卸载入口声明
MODULE_LICENSE("Dual BSD/GPL");    	//免费开源 许可声明
#makefile
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/kernel/linux-3.14     #内核所在代码路径
PWD := $(shell pwd)

all:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* modules* a.out

else
    obj-m := moudle.o
endif
  • 模块的相关命令

—insmod 插入模块
—lsmod 查看已经插入的模块
—rmmod 删除模块

将内核模块进行编译得到moudle.ko文件,将其拷贝到板子文件系统中。

#insmod moudle.ko //插入设备节点后,可观察到命令行打印出了moudle init go
#rmmod moudle  //删除设备节点后,可观察到命令行打印出了moudle exit go

如果想要查看已注册的设备可通过cat命令查看 /proc/devices文件

#cat /proc/devices

所有已注册的设备和其设备号信息全部存储在这个文件中。

猜你喜欢

转载自blog.csdn.net/qq_35886943/article/details/90069539