码迷,mamicode.com
首页 > 系统相关 > 详细

Linux设备驱动开发学习(3):构造和运行模块(未完)

时间:2016-06-20 19:05:04      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:官方网站


    从本章开始引入所有关于模块和内核编程的基本概念,并编写一个完整模块来实践这些基本的概

念。


3.1 搭建测试环境


    由于所有测测试代码都是基于Ubuntu 14.04.2 Desktop的3.16.0-30-generic内核,所以最好是到

Linux官方网站去下载一份该版本内核的源代码。另外,建议在虚拟机里面安装你的Ubuntu桌面环境,这

样避免因为误操作造成硬件损坏或者重要数据丢失。更多测试环境搭建细节可参考博文:

Ubuntu 14.04.2 + Vmware搭建Linux驱动开发环境


3.2 Hello World模块


    下面的代码是一个完整的Hello World模块。

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

MODULE_LICENSE("Dual BSD/GPL");

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

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分别将函数hello_init()和hello_exit()放入两个特定的段(section)内,这样模块在被链接到内核时,内核能够知道它们分别是用于模块加载/移除的函数。而宏MODULE_LICENSE声明

了模块的许可权限,同时,如果不做许可声明,内核会有所抱怨。



    

本文出自 “JiMoKuangXiangQu” 博客,请务必保留此出处http://4594296.blog.51cto.com/4584296/1791050

Linux设备驱动开发学习(3):构造和运行模块(未完)

标签:官方网站

原文地址:http://4594296.blog.51cto.com/4584296/1791050

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!