设为首页 加入收藏

TOP

Linux 设备驱动程序编写--最简单的hellomod
2014-11-24 01:43:14 来源: 作者: 【 】 浏览:1
Tags:Linux 设备 驱动程序 编写 简单 hellomod

1、下载系统内核版本对应的源码包,版本查看方式:uname -r。


我的是Linux 2.6.32


下载命令:apt-get install linux-source-2.6.32


我下载的是linux-source-2.6.32.tar.bz2


2、配置内核:


tar jxvf linux-source-2.6.32.tar.bz2


cd linux-source-2.6.32


make oldconfig #配置原版


3、编译内核(此过程耗时长,编译完后在linux-source-2.6.32多出一个vmlinux)


make


4、编译模块


make modules


5、安装模块(操作结束后多出目录/lib/modules/2.6.32.61+drm33.26)


make modules_install


6、测试


①、hellomod.c


#include //初始换函数
#include //内核头文件
#include //模块的头文件


MODULE_LICENSE("GPL");//提示可能没有GNU许可证


static int lkp_init(void)//初始化
{
printk("Hello, world\n"); //模块运行在内核态,不能使用用户态C库函数中的printf函数,而要使用printk函数
return 0;
}


static int lkp_cleanup(void)//退出和清理函数
{
printk("Goodbye,Hello world\n");
}
module_init(lkp_init);//驱动程序初始化入口点
module_exit(lkp_cleanup);//会调用cleanup_module()函数


②、Makefile


obj-m :=hellomod.o
KERNELDIR=/lib/modules/2.6.32.61+drm33.26/build
PWD :=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install


③执行make


输出:


root@master:~/Downloads/.1/lken# make
make -C /lib/modules/2.6.32.61+drm33.26/build M=/root/Downloads/.1/lken modules
make[1]: Entering directory `/usr/src/linux-source-2.6.32'
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/Downloads/.1/lken/hellomod.mod.o
  LD [M]  /root/Downloads/.1/lken/hellomod.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.32'


会在目录下生成hellomod.ko文件


④、插入内核并查看


insmod hellomod.ko


root@master:~/Downloads/.1/lken# lsmod |grep hellomod


hellomod 679 0


⑤移除模块


rmmod hellomod


查看日记


tail /var/log/message


输出:


Jan 5 16:18:49 master kernel: [161488.154792] Hello, world
Jan 5 16:19:20 master kernel: [161519.197040] Goodbye,Hello world


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux select详解 下一篇C++中构造函数何时才会构建

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: