内核版本: 2.4.22
阅读此文的目的: 学会编写Linux设备驱动。
阅读此文的方法: 阅读以下2个文件: hello.c,asdf.c。
此文假设读者:
理解"字符设备文件, 块设备文件, 主设备号, 次设备号",
会写简单的Shell脚本和Makefile。1. "hello.c"
--------------------------------
/*
* 这是我们的第一个源文件,
* 它是一个可以加载的内核模块,
* 加载时显示"Hello,World!",
* 卸载时显示"Bye!"。
* 需要说明一点,写内核或内核模块不能用写应用程序时的系统调用或函数库,
* 因为我们写的就是为应用程序提供系统调用的代码。
* 内核有专用的函数库,如 * 现在还没必要了解得很详细,
* 这里用到的printk的功能类似于printf。
* "/usr/src/linux"是你实际的内核源码目录的一个符号链接,
* 如果没有现在就创建一个,因为下面和以后都会用到。
* 编译它用"gcc -c -I/usr/src/linux/include hello.c",
* 如果正常会生成文件hello.o,
* 加载它用"insmod hello.o",
* 只有在文本终端下才能看到输出。
* 卸载它用"rmmod hello"
*/
/*
* 小技巧: 在用户目录的.bashrc里加上一行:
* alias mkmod='gcc -c -I/usr/src/linux/include'
* 然后重新登陆Shell,
* 以后就可以用"mkmod hello.c"的方式来编译内核模块了。
*/
/* 开始例行公事 */
#ifndef __KERNEL__
# define __KERNEL__
#endif
#ifndef MODULE
# define MODULE
#endif
#include #include MODULE_LICENSE("GPL");
#ifdef CONFIG_SMP
#define __SMP__
#endif
/* 结束例行公事 */
#include static int
init_module
(){
printk("Hello,World!\n");
return 0; /* 如果初始工作失败,就返回非0 */
}
static void
cleanup_module
(){
printk("Bye!\n");
}
------------------------------------
2. "asdf.c"
------------------------------------查看 http://www.qqread.com/linux/2006/06/s117130061.html
更多内容请看Linux集群技术、体验Linux的音影世界、Linux驱动大全专题,或进入讨论组讨论。
相关专题
- Linux集群技术 (8259篇文章)
- 体验Linux的音影世界 (7931篇文章)
- Linux驱动大全 (8729篇文章)
- Linux下的路由的配置与应用 (11721篇文章)
- Linux命令简介 (9775篇文章)
- 无线设备专题 (4913篇文章)
- Linux防火墙 (9606篇文章)
- Linux日志专题 (8383篇文章)
- Solaris基础知识入门 (4621篇文章)
- Linux服务器的安全性能 (20291篇文章)
- Linux与Windows Vista的桌面之争 (83次浏览)
- 对比评测Vista XP Linux启动时间 (59次浏览)
- Linux 基本概念及常用命令 (57次浏览)
- Linux系统如何判断CPU是双核还是单核 (53次浏览)
- VMware下Linux与真实主机共享上网 (31次浏览)
- Linux系统下如何更改终端显示分辨率 (30次浏览)
- 实用技巧:配置Linux操作系统环境变量 (30次浏览)
- Fedora 8 Linux下安装配置audacious过程 (27次浏览)
- Linux系统下设置环境变量Path的方法 (25次浏览)
- 最流行的发行版:Ubuntu 8.04 Alpha 2发布 (24次浏览)



