Linux内核编程(四)----------打开驱动编程的大门:Hello word内核驱动示例

写在前面:本篇主要以hello word驱动实例,来阐述驱动的基本结构从而打开驱动编程的大门。

正文:

    1、两个命令:  加载模块进内核: insmod   XX.ko          卸载内核中的模块   rmmod  XX.ko

     2、驱动模块化编程的好处:
        (1)、内核中85%是驱动,15%才是调度、信号量等之类的,如果把所有驱动编译进内核,会导致内核非常庞大。
        (2)、很多驱动都只在特定机器上使用。即内核的定制使用。
        (3)、为实现热插拔提供基础。热插拔:例如在运行的linux设备上,插入一个外设,这时候linux设备检测到这个外设后会加载驱动,当将这个外设拔掉之后,linux设备会卸载调这个驱动。

     3、Hello word实例:.c文件和Makefile,同样,代码中的注释尽可能完整了

          hello.c:

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

/* 非必需内容*/
MODULE_LICENSE("Dual BSD/GPL");//许可证、版权
MODULE_AUTHOR("kiran");//作者
MODULE_DESCRIPTION("hello demo");//模块描述
MODULE_VERSION("1.0");//

/* 入口函数 */
static int hello_init(void)
{
    printk(KERN_ALERT "hello_init is called\n");
}

/* 退出函数 */
static void hello_exit(void)
{
    printk(KERN_ALERT "hello_exit is called\n");
}

/* 注册 */
module_init(hello_init);  //模块的入口   insmo命令时就会执行module_init 加载的函数
module_exit(hello_exit);  //模块的出口   rmmod命令时就会执行module_exit 加载的函数

         Makefile


KERN_DIR = /lib/modules/$(shell uname -r)/build    
 
all:
	make -C $(KERN_DIR) M=`pwd` modules
 
clean:
	make -C $(KERN_DIR) M=$(shell pwd) modules clean
	rm -rf modules.order
 
obj-m := hello.o



#  uname -r  :显示操作系统的发行编号
#  make  -C  :指将当前工作目录转移到指定的位置,-C $(KERN_DIR) 指明跳转到内核源码目录下,读取那里的Makefile。
#  M :M是内核根目录下的Makefile中使用的变量,“M=”的作用是在make命令中对变量M进行赋值。
#     当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,
#     表示包含dir下的Makefile文件,加入M选项后,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成KO文件
#  modules:内核根目录下的Makefile的一个目标,表示编译成模块的意思
#  obj-m := hello.o  :  obj-m表示把编译hello.c生成的文件hello.o编译成内核模块(不会编译到内核,但是会生成一个独立的 "hello.ko" 文件)。
#                       ko 文件是内核模块文件,是内核加载的某个模块,一般是驱动程序

     在helloc.c目录下make之后:会生成.ko文件

     在该目录下 执行 insmod hello.ko命令,然后dmesg,就会 看到hello_initi called 已经产生了调用,如下:

     

      在该目录下 执行 rmmod  hello.ko命令,然后dmesg,就会 看到hello_exit is called 已经产生了调用,如下:

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值