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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux设备驱动开发学习:构造和运行模块(未完)相关的知识,希望对你有一定的参考价值。


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

念。


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设备驱动开发学习:构造和运行模块(未完)的主要内容,如果未能解决你的问题,请参考以下文章

linux设备驱动第二篇:构造和运行模块

Linux 内核模块开发怎么进行单元测试

如何编译一个linux下的驱动模块

如何编译一个linux下的驱动模块

学习Go碰到一些Linux命令(未完)

Linux驱动开发基础