Linux内核模块(上)

Linux内核模块

目录

Linux内核模块

 

1.概念

2.模块编写

3.模块编译

4.模块使用


1.概念

为什么 Linux内核要引用模块的机制?

        Linux内核采用宏内核架构,即操作系统的绝大部分功能都在内核中实现,并且都在内核空间(特权模式)下运行;而与之相反的另一种流行的架构是微内核架构,它把操作系统最基本的功能放入内核中,而其他大部分的功能(如设备驱动等)都放到非特权模式下,这种架构具有很好的动态扩展性,即在内核运行时加载一组目标代码来实现某个特定的功能。

2.模块编写

2.1 模块三要素:注册入口函数,出口函数,GPL声明

      #include <linux/init.h>
    3 #include <linux/module.h>
    4 
    5 
    6 static int __init my_test_init(void)
    7 {
    8         printk("my first kernel module init\n");
    9         return 0;
   10 }
   11 
   12 static void _init my_test_exit(void)
   13 {
   14         printk("Bye Bye\n");
   15 }
   16 
   17 
   18 module_init(my_test_init);
   19 module_exit(my_test_exit);
   20 
   21 MODULE_LICENSE("GPL");
   22 MODULE_AUTHOR("HEHE");
   23 MODULE_DESCRIPTION("my test kernel module");
   24 MODULE_ALIAS("my test");

3.模块编译

3.1静态编译

      将模块直接编译进内核,与内核形成一个整体运行,生命周期从内核启动开始到内核运行结束.

3.2动态编译

       以模块的形式编译,在内核运行以后,通过命令加载到内核里,和内核一起运行,通过卸载命令卸载模块.

3.3内部编译

      在内核源码树中编译

3.4外部编译

     在内核源码目录外编译

内核关于构建外部模块的说明文档:

/kernel-x.x.xx/Documentation/kbuild/module.txt

make -C /lib/modules/`uname -r`/build M=$PWD modules

-C:执行指定路径下的Makefile

M :指定当前路径

uname -r :显示当前内核版本号

命令置换:tab键上面的按键,` `

Makefile的编写:

然后Make进行测试.c的编译:

第一行是路径替换,第二行是进入内核的Makefile进行编译,第三行GCC将当前的demo.c编译生成demo.o

第四行根据demo.o构建模块,最终生成了demo.ko

4.模块使用

4.1 加载内核模块

sudo  insmod ***.ko

4.2查看内核消息日志命令

dmesg

sudo dmesg -c //删除之前的日志消息

4.3卸载内核模块

rmmod

sudo rmmod  内核模块名不包括扩展名 

sudo rmmod demo

4.4内核模块声明

MODULE_AUTHOR(_author)

MODULE_DESCRIPTION(_description)

modinfo demo.ko 可以查看模块的信息,描述 作者,等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值