linux 设备驱动程序编写--最简单的hellomod
2014-01-05 16:19
393 查看
1、下载系统内核版本对应的源码包,版本查看方式:uname -r。
我的是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<linux/init.h> //初始换函数
#include<linux/kernel.h> //内核头文件
#include<linux/module.h> //模块的头文件
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
我的是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<linux/init.h> //初始换函数
#include<linux/kernel.h> //内核头文件
#include<linux/module.h> //模块的头文件
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驱动USB驱动程序之USB设备驱动程序1简单编写
- linux驱动入门-hello设备驱动程序编写
- Linux输入设备简单驱动程序编写练习(2014-8-27)
- linux驱动入门-hello设备驱动程序编写及内核的更新(网卡的添加)
- 如何编写Linux设备驱动程序
- 如何编写LINUX设备驱动程序
- linux设备驱动程序之简单字符设备驱动
- 如何编写Linux操作系统下的设备驱动程序
- Linux字符设备驱动程序的编写框架
- Linux字符设备驱动程序编写基本流程
- 如何编写Linux操作系统的设备驱动程序
- linux设备驱动程序之简单字符设备驱动
- 【转】linux设备驱动程序之简单字符设备驱动
- Linux字符设备驱动程序编写基本流程
- 如何编写Linux设备驱动程序
- Linux字符设备驱动程序的编写框架
- 如何编写Linux的设备驱动程序
- Linux字符设备驱动程序的一个简单示例
- linux设备驱动程序之简单字符设备驱动
- 编写linux设备驱动程序