HelloWorld模块加载--驱动

本文详细介绍了Linux内核模块HelloWorld驱动的创建和加载过程。内容包括定义的hello_init和hello_exit函数,module_init和module_exit宏的使用,以及MODULE_LICENSE宏的作用。在编译模块时,提到了两种创建Makefile的方法,并提供了编译和加载模块的命令,如insmod和rmmod。此外,还解释了如何通过dmesg和lsmod命令查看内核日志和已加载模块。
摘要由CSDN通过智能技术生成

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

        MODULE_LICENSE("Dual BSD/GPL");

        static int hello_init(void)
        {
                printk(KERN_ALERT "Hello, world\n");
        }

        static void hello_exit(void)
        {
                printk(KERN_ALERT "Goodbye, cruel world\n");
        }

        module_init(hello_init);
        module_exit(hello_exit);

      这个模块定义了两个函数,一个在模块加载到内核时被调用(hello_init),一个在模块去除时被调用(hello_exit)。module_init和module_exit这几行使用了特别的内核宏来指出这两个函数的角色。另一个特别的宏(MODULE_LICENSE)是用来告知内核,该模块带有一个自由的许可证,没有这样的说明,在模块加载时内核会报错。

      printk函数在Linux内核中定义并且对模块可用,它与标准C库函数printf的行为相似。内核需要它自己的打印函数,因为没有C库的支持。字串KERN_ALERT是消息的优先级。在此模块中指定了一个高优先级,因为使用默认优先级的消息可能不会直接显示,这依赖于运行的内核版本、klogd守护进程的版本以及配置。

      为了编译模块文件,有两种方法创建Makefile文件可以实现,

1、只需一行即可,命令如下:

       obj-m := hello.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值