预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://blog.csdn.net/zhoujk0520/article/details/6841082"Linux2.6驱动设计快速入门 Linux2.6和2.4的比较我不想废话,总体来说2.6功能更强,但是资源消耗更多。由于2.6内核在驱动框架,底层调用上和2.4内核有很多差别,所以本文主要是为程序员提供2.4到2.6迁移的指导。2.6和2.4主要的不同在于•内核的API变化,增加了不少新功能(例如mempool)•提供sysfs用于描述设备树•驱动模块从.o变为.ko移植helloword下面是一个最简单的2.4驱动:#defineMODULE#include<linux/module.h>#include<linux/kernel.h>intinit_module(void){printk(KERN_INFO"Hello,world/n");return0;}voidcleanup_module(void){printk(KERN_INFO"Goodbyecruelworld/n");}2.6的helloworld版本!#include<linux/module.h>#include<linux/config.h>#include<linux/init.h>MODULE_LICENSE("GPL");//新,否则有waring,去掉了#defineMODULE,自动定义staticinthello_init(void){printk(KERN_ALERT"Hello,world/n");return0;}staticvoidhello_exit(void){printk(KERN_ALERT"Goodbye,cruelworld/n");}module_init(hello_init);//必须!!module_exit(hello_exit);//必须!!注意,在2.4中module_init不是必须的,只要驱动的初始化函数以及析沟函数命名使用了缺省的init_module和cleanup_module编译生成:2.4gcc-D__KERNEL__-DMODULE-I/usr/src/linux-2.4.27/include-O2-ctestmod.c2.6makefile中要有obj-m:=hello.o然后:make-C/usr/src/linux-2.6.11SUBDIRS=$PWDmodules(当然简单的make也可以)哈哈够简单!!其他不同:计数器:以前2.4内核使用MOD_INC_USE_COUNT增加计数例如:voidinc_mod(void){MOD_INC_USE_COUNT;}/*endinc_mod*//*************************************************************************CalculatorDEC************************************************************************/voiddec_mod(void){MOD_DEC_USE_COUNT;}/*enddec_mod*/现在这个也过时了!!2.6,用户函数要加载模块,使用:inttry_module_get(&module);函数卸载模块使用module_put()而驱动中不必显示定义inc和dec没有kdev_t了现在都流行用dev_t了,而且是32位的结构体初始化老版本使用:staticstructsome_structure={field1:value,field2:value};现在流行用:staticstructsome_structure={.field1=value,.field2=value,...};malloc.h要用核态内存?用<linux/slab.h>好了,内存池内存管理变化不大,添加了memorypool*(#include<linux/mempool.h>)。(现在什么都是pool,内存线程....)这是为块设备提供的,使用mempool最大的优点是分配内存不会错,也不会等待(怎么这个也和RTEMS学)。对于embed的设备还是有些用处的。标准调用方式:mempool_t*mempool_create(intmin_nr,mempool_alloc_t*alloc_fn,mempool_free_t*free_fn,void*pool_data);使用mempool的函数:mempool_alloc_t/mempool_free_tmempool_alloc_slab/mempool_free_slabmempool_all