Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Linux 设备驱动程序编写--最简单的hellomod

1、下载系统内核版本对应的源码包,版本查看方式:uname -r。我的是Linux 2.6.32下载命令:apt-get install  linux-source-2.6.32我下载的是linux-source-2.6.32.tar.bz22、配置内核:tar jxvf  linux-source-2.6.32.tar.bz2cd linux-source-2.6.32make oldconfig #配置原版3、编译内核(此过程耗时长,编译完后在linux-source-2.6.32多出一个vmlinux)make4、编译模块make  modules5、安装模块(操作结束后多出目录/lib/modules/2.6.32.61+drm33.26)make  modules_install6、测试①、hellomod.c#include<linux/init.h>  //初始换函数
#include<linux/kernel.h>  //内核头文件
#include<linux/module.h>  //模块的头文件MODULE_LICENSE("GPL");//提示可能没有GNU许可证static int  lkp_init(void)//初始化
{
  printk("Hello, world "); //模块运行在内核态,不能使用用户态C库函数中的printf函数,而要使用printk函数
 return 0;
}static int lkp_cleanup(void)//退出和清理函数
{
 printk("Goodbye,Hello world ");
}
module_init(lkp_init);//驱动程序初始化入口点
module_exit(lkp_cleanup);//会调用cleanup_module()函数②、Makefileobj-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"
&nbsp; Building modules, stage 2.
&nbsp; MODPOST 1 modules
&nbsp; CC &nbsp; &nbsp; &nbsp;/root/Downloads/.1/lken/hellomod.mod.o
&nbsp; LD [M] &nbsp;/root/Downloads/.1/lken/hellomod.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.32"会在目录下生成hellomod.ko文件④、插入内核并查看insmod hellomod.koroot@master:~/Downloads/.1/lken# lsmod |grep hellomodhellomod               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