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设备驱动开发详解》
《嵌入式系统原理与设计》
- Linux设备驱动学习与实践之一-最简单的模块
- linux 设备驱动开发学习笔记(一):最简单的内核模块
- 设备驱动之一 - 最简单的可运行的scull模块
- LDD3《Linux设备驱动》中的最简单的字符设备驱动实现与测试
- 嵌入式Linux最简单驱动模块编译与剖析
- 最简单的驱动模块
- Linux环境下最简单内核模块的实践
- 66 最简单的linux framebuffer设备驱动实现
- 一个最简单的Linux 2.6内核驱动模块
- [设备驱动] 最简单的内核设备驱动--字符驱动
- linux驱动学习之一内核模块
- Linux块设备驱动的模块加载与卸载
- 设备驱动之一 - 多源文件驱动模块的Makefile写法
- 驱动学习模块最简单示例
- linux实验 模块与设备驱动
- 《Linux驱动》最简单的驱动编写与makefile
- linux设备驱动学习(二):Linux驱动模块的相关基础和hello world
- linux设备驱动入门,最简单的LED驱动,基于tq2440
- 私有IP地址
- Hibernate导出表代码
- Android NDK环境搭建和配置
- 网页文本的排重算法介绍
- Excel通过宏生成自定义菜单和按钮
- Linux设备驱动学习与实践之一-最简单的模块
- ExtJs4 Ext.util.Format.number 使用案例
- 织梦 截取字符段和去掉html代码
- 网络流求解图的连通度问题
- shared some knowledge site
- 《More Effective C++》学习心得(五) 前置和后置自增运算符
- flex RSL
- X264的编码基本流程
- UML 基础知识