Linux设备驱动学习与实践之一-最简单的模块

来源:互联网 发布:视频制作专业软件 编辑:程序博客网 时间:2024/06/04 17:58

一、需要用到的符号与头文件

(1)linux/init.h

module_init();

module_exit();
(2)linux/module.h
MODULE_LICENSE(_licence);


二、源代码
1、hello.c

#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("GPL");static int hello_init(void){printk(KERN_ALERT "Hello, world\n");return 0;}static void hello_exit(void){printk(KERN_ALERT "Goodbye, cruel world\n");}module_init(hello_init);module_exit(hello_exit);


2、Makefile

obj-m:=hello.oKERNELBUILD :=/lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)default:make -C $(KERNELBUILD) M=$(PWD) modules

三、上机操作
硬件环境:PC
软件环境:Windows XP(主机操作系统)、Vmware Workstation、Ubuntu 10.10(虚拟机操作系统)、Putty(SSH客户端)


max@max-virtual-machine:~$cd workspace/ldd
max@max-virtual-machine:~/workspace/ldd$mkdir hello
max@max-virtual-machine:~/workspace/ldd$ vim hello.c
max@max-virtual-machine:~/workspace/ldd$ vim Makefile
max@max-virtual-machine:~/workspace/ldd$ make -n
make -C /lib/modules/2.6.35-22-generic/build M=/home/max/workspace/ldd modules
max@max-virtual-machine:~/workspace/ldd$ make
make -C /lib/modules/2.6.35-22-generic/build M=/home/max/workspace/ldd modules
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.35-22-generic'
  CC [M]  /home/max/workspace/ldd/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/max/workspace/ldd/hello.mod.o
  LD [M]  /home/max/workspace/ldd/hello.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.35-22-generic'
max@max-virtual-machine:~/workspace/ldd$ su
密码:
root@max-virtual-machine:/home/max/workspace/ldd# insmod hello.ko
root@max-virtual-machine:/home/max/workspace/ldd# dmesg

。。。
。。。
。。。
[ 6174.596217] Hello, world
root@max-virtual-machine:/home/max/workspace/ldd# rmmod hello
root@max-virtual-machine:/home/max/workspace/ldd# dmesg

。。。
。。。
。。。
[ 6174.596217] Hello, world

[ 6275.920652] Goodbye, cruel world

四、参考文献

《Linux设备驱动程序》

《Linux设备驱动开发详解》

《嵌入式系统原理与设计》

原创粉丝点击