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

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

(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.o
KERNELBUILD :=/lib/modules/$(shell uname -r)/build
PWD := $(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设备驱动开发详解》

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

你可能感兴趣的:(vmware,linux,shell,Module,ubuntu,vim)