专栏中心

EEPW首页 > 专栏 > 嵌入式Linux驱动程序入门之--Hello world!

嵌入式Linux驱动程序入门之--Hello world!

发布人:0750long 时间:2009-07-22 来源:工程师 发布文章
嵌入式Linux驱动程序入门之--Hello world!

 

        最近在友善之臂的mini2440开发板上移植了Linux2.6.29.1内核和yaffs2文件系统后,准备学习Linux设备驱动设计,买了本《Linux设备驱动程序(第三版)》,觉得是本非常不错的书,刚买的第一天,我看了前两章,感觉是非常不错的书,因为它主要讲的是驱动设计的原理和所遵循的规范,以及注意的问题,而不是主要讲具体的设计和实现。知道原理,再结合实例,这一直是我所追求的学习方法。下面介绍我的第一个Linux驱动程序“Hello world!”,“Hello world”也许是第一个程序员写的程序吧,这里我也从写它开始,尽管它很简单,但它记录了我学习Linux的过程。

/*hello_module.c*/

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


static int __init mini2440_hello_module_init(void)
{
    printk("Hello, Mini2440 module is installed !\n");
    return 0;
}

static void __exit mini2440_hello_module_cleanup(void)
{
    printk("Good-bye, Mini2440 module was removed!\n");
}

module_init(mini2440_hello_module_init);
module_exit(mini2440_hello_module_cleanup);
MODULE_LICENSE("GPL");


简单的分析:本程序中所用到的头文件“linux/module.h”和“linux/init.h”在所有的模块代码中都应该包含。MODULE_LICENSE("GPL");是内核模块所遵循的许可证。函数用__init来修饰,标明函数仅在初始化期间使用,当模块被装载后将该初始化函数扔掉,把函数占用的内存释放出来。初始化函数也可以不加__init修饰,只是占用一部分内存而已,并且该初始化函数还可以被其它函数调用。__exit修饰词标记该代码用于模块卸载,其它的任何时候调用该函数将出错。
模块的Makefile文件如下:

obj-m:=hello_module.o
CURRENT_PATH:=$(shell pwd)
ARM_LINUX_KERNEL:=/opt/linux-2.6.29.1
all:
 $(MAKE) -C $(ARM_LINUX_KERNEL) SUBDIRS=$(CURRENT_PATH) modules
clean:
 rm -rf *.cmd *.o *.ko  *.mod.c *.symvers *.order

简单分析一下:obj-m=hello_module.o表明我们最终要构造的模块是hello_module.ko,ARM_LINUX_KERNEL:=/opt/linux-2.6.29.1指明内核所在的路径,其它的都遵循《Linux设备驱动程序(第三版)》所介绍的规范来写,可以藏考该书。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

C编译器软件安装演示视频

视频 2012-07-04

Applilet软件安装演示视频

视频 2012-07-04

低成本仪表放大器该如何设计?

昊志机电股价波动背后的产业机遇与挑战

个用于3.3 V电压轨的简单备份电源

SM+软件安装演示视频

视频 2012-07-04

整车操作系统何以跻身智能汽车三大件?

成功校准开环DAC信号链的两个方法

东方精工:“1+N”战略下的智能产业布局与发展前景

SH7264汽车数字仪表板解決方案

视频 2012-07-03

北信源:信源密信与外骨骼机器人应用的探索与展望

威孚高科:机器人与新能源汽车业务的探索与展望

毫米波雷达突破医疗监测痛点:非接触式生命体征传感器破解临床难题

工程师必看!从驱动到热管理:MOSFET选型与应用实战手册

电源与新能源 2025-05-16

SH7764车载导航系统解決方案

视频 2012-07-03
更多 培训课堂
更多 焦点
更多 视频

技术专区