linux驱动开发-Hello World篇
来源:互联网 发布:java 设计模式 编辑:程序博客网 时间:2024/06/05 09:11
Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载:
***************************************************************************************************
下面是在内核是2.4的驱动程序开发hello world 片
***************************************************************************************************
(1)直接编译进Linux内核,随同Linux启动时加载;
(2)编译成一个可加载和删除的模块,使用insmod加载(modprobe和insmod命令类似,但依赖于相关的配置文件),rmmod删除。这种方式控制了内核的大小,而模块一旦被插入内核,它就和内核其他部分一样。
下面我们给出一个内核模块的例子:
#include <linux/module.h> //所有模块都需要的头文件 #include <linux/init.h> // init&exit相关宏 MODULE_LICENSE("GPL"); static int __init hello_init (void) { printk("Hello module init/n"); return 0; } static void __exit hello_exit (void) { printk("Hello module exit/n"); } module_init(hello_init); module_exit(hello_exit); |
分析上述程序,发现一个Linux内核模块需包含模块初始化和模块卸载函数,前者在insmod的时候运行,后者在rmmod的时候运行。初始化与卸载函数必须在宏module_init和module_exit使用前定义,否则会出现编译错误。
程序中的MODULE_LICENSE("GPL")用于声明模块的许可证。
如果要把上述程序编译为一个运行时加载和删除的模块,则编译命令为:
gcc -D__KERNEL__ -DMODULE -DLINUX -I /usr/local/src/linux2.4/include -c -o hello.o hello.c |
由此可见,Linux内核模块的编译需要给gcc指示-D__KERNEL__ -DMODULE -DLINUX参数。-I选项跟着Linux内核源代码中Include目录的路径。
下列命令将可加载hello模块:
insmod ./hello.o |
下列命令完成相反过程:
rmmod hello |
如果要将其直接编译入Linux内核,则需要将源代码文件拷贝入Linux内核源代码的相应路径里,并修改Makefile。
****************************************************************************************************
下面是在内核是2.6以上的驱动程序开发hello world 片
****************************************************************************************************
hello.c
#include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk(KERN_INFO "init_module() called/n"); return 0; } void cleanup_module(void) { printk(KERN_INFO "cleanup_module() called/n"); } |
创建一个 Makefile文件:
obj-m += hello.o |
然后编译内核模块输入:
make |
这样2.6内核的简单驱动程序就写完了。
- linux驱动开发-Hello World篇
- Linux驱动开发hello world
- Linux 2.6驱动开发之Hello World!
- Linux设备驱动开发之hello, world
- Linux hello world 驱动
- linux 驱动 hello world
- 【驱动开发】001 Hello world
- hello world开始linux驱动
- 编写linux驱动--Hello World
- linux驱动之Hello world
- linux驱动之Hello World
- Linux驱动开发学习 第一个驱动程序 hello world
- Linux设备驱动开发入门——Hello world
- Linux驱动开发(2):Hello world模块
- Hello World驱动开发过程详解
- 驱动开发(第一个程序Hello World)
- 驱动开发-1 模块hello world
- Linux设备驱动Hello World程序介绍
- 两个排序算法--冒泡排序,选择排序
- jar命令详解
- oracle 命令积累
- 类修饰符
- 企业网站为什么必须进行网站策划
- linux驱动开发-Hello World篇
- 网站策划需要具备的知识
- 享购网的相关公告 备忘
- 网站整体策划的优势分析
- 网站策划之网站改版的几点建议
- 一段程序代码的修改,将原来按分钟活动的方式改为秒级滑动,可以提供数据分析的精度
- 网站策划分析内容
- 网站策划是网站建设的前提
- 网站策划:网站用户需求分析