"); //-->
最近在友善之臂的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设备驱动程序(第三版)》所介绍的规范来写,可以藏考该书。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
驱动大 PFET 的36V 低损耗电源通路控制器
C编译器软件安装演示视频
帮忙解读一下report的含义
Applilet软件安装演示视频
低成本仪表放大器该如何设计?
昊志机电股价波动背后的产业机遇与挑战
康佳联手ST开发新一代数字引擎 鲸吞两大核心市场
51单片机编程助手
个用于3.3 V电压轨的简单备份电源
51LPC系列单片机与Triac的连接
Spansion和台积公司携手打造创新的闪存产品
SM+软件安装演示视频
51单片机波特率计算程序
整车操作系统何以跻身智能汽车三大件?
DUM23-48/300Ⅱ直流配电单元电原理图
成功校准开环DAC信号链的两个方法
51LPC微控制器以及三端双向可控硅
飞利浦推出用于互联消费的业界首个视频级USB器件
监控模块与整流模块的通信电路
DK04监控模块与计算机通信接口电路
东方精工:“1+N”战略下的智能产业布局与发展前景
4bit单片机应用指南
SH7264汽车数字仪表板解決方案
北信源:信源密信与外骨骼机器人应用的探索与展望
威孚高科:机器人与新能源汽车业务的探索与展望
DUM23-48/300II交流配电单元电原理图
毫米波雷达突破医疗监测痛点:非接触式生命体征传感器破解临床难题
工程师必看!从驱动到热管理:MOSFET选型与应用实战手册
SH7764车载导航系统解決方案
DUM23―48/300II组合电源系统框图