ubunt.u 8.04 内核版本2.6.24-18<性病>
makefile文.件如下 : .
obj-m := . char_de.v.o.
KE.RNELBUILD :=/lib/modu.les/2.6.24-18-generic/build学习
default:
make -C $(KER.NELBUILD) M.=$(shell pwd) . modules--------------彩票
clean:
. rm -rf *.o . *.ko *.mod.c . .*.cmd .tmp_versions 鲜花
char_dev.c文件如下 .:电影
#.ifndef MODULE .
#define. MODULE 电子
#endif
/*必要的头文件*/
#include <li.nux./module.h> 乙肝
#include <linux/k.e.rnel.h> /* printk() */ ( 游戏 )
#inc.lude <linux/init.h> 服务器
#include <asm/t.imex.h> --------------彩票
/* 字符设备所需*/
#.include <linux/f.s.h> 女人
#includ.e <linux/slab.h> 女人
#i.nclude <asm/system.h> 服务器
#include <l..inux/proc_fs.h> --- 印刷
#include. <linux/fcntl.h> 汽车
#i.nclude <asm/uaccess.h> 虚拟主机
#in.clude <asm/segment.h> ( 游戏 )
#de.fine status 0 投资
/* 设备.定义,定义设备的名字为mychard.ev*/ .
#define DEVICE_NAME. "mychardev". .
/* 该设备.最大信息长度为80*/ ( 游戏 )
#defin.e BUF_LEN 80 <性病>
/* 设.备否打开?利用它防止当前进程使用.同一设备*/ 婚庆
s.t.atic int open_count = 0; 服务器
/.* 对设备里面的内容进行初始化 */ 美容
char content[BUF_LEN]="We.lcome to use. this device.\n"; .
/* 进程读取的信息的指针 .*/ .
char .*content_Ptr; 外汇
/* 当进程试图打开.设备文件时调用该函数,参数指出.文件的地址以及具体打开方式*/ 外汇
static int device_open(struct inode *inode, st.ruct file *fi.le) [成人用品]
{
. /* 两个进程.不得同时对同一设备操作,设备被打开后不得被再次打开*/ .
. if (open_count)教育
{
. . /*打开操作失败的返回信息*/.
. return .-EBUSY; 电影
}
/.*记录设备被打开的次数,加1*/电影
open_coun.t++; [成人用品]
/*设备里的指针指向具体的数组,该.数组的内容就是该设备里的内容*/. 美容
content_P.tr =. content; 服务器
. /*成功打开操作的返回信息*/ 健康
.return status; (广告)
}
/* 当一个进.程要关闭这个设备时,该函数被调用,这个调用不允许失败,参数与打开设备的参.数相同*/ 虚拟主机
static int device_release(str.uct inode *inode, struct file *file). .
{
/*记录设备被打开的次.数,减1*/ 电子
open_count. --; 域名
return 0.; --- 印刷
}
/* 当一进程要从已打开的设备文件读数据时该函.数被调用,file指具.体的被打开的设备,buffe.r是获得填充数据的缓冲区,length是缓冲区中的数据长度 */ 外汇
s.tatic ssize_t device_read(struct file *file, char *buffer,size_t .length,loff_t *fops.) .
{
./* 用于记录写入到缓.冲区buffer中的确切字节数*/ 健康
. int num = 0;域名
/*指向设备的存放数据的数组.*/.
char *ptr.=co.ntent_Ptr; --------------彩票
. /*记录设备里的字符的个.数,初始化为0*/ 电子
. int len=0; 杀毒
. . /* 如果已位于设备内部信息的尾部,返回0*/ .
if (*cont.ent_.Ptr == 0) 外汇
{
. ret.urn 0; .
}
len=0;
. /*计算设备里字符串的长度*/ 鲜花
while (*(ptr.++)) 美容
{ len++.;}学习
/*如果要读出.的字.符串的长度大于设备里字符串的长度,则将真正的读出长度设为设备的字符串的长度*/ 美容
. if (length<len) .
{ . 健康
. len=l.ength;.
}
. /* 准确地把数据送到缓冲区buffe.r*/ .
copy_to_user(buffer,cont.ent_Ptr,le.n);.
n.um=len;[成人用品]
. /* 返回读取.的实际字节数据 */ 建材
return num;. 建材
}
/* 当进程向这设备写时调用本函数*./ 电子
static ssize_t device_write(struct file *file,const char *buffer, s.ize_t length,lof.f_t .*fops) .
{
printk(" writ.e\n".); 建材
. . /* 用于记录写入到设备中的确切字符数*/ 虚拟主机
. int len ; 鲜花
. /*如果用户的参数大于设备里数组的最大长度,则仅写满数组即可,否.则写入的长度就是用户传进来的参数*/域名
. if (length>80) ( 游戏 )
{
. len=80; 女人
}
else
{
. len=leng.th; .
}
/*将用户的数据写入设备*./.
copy._from_us.er(content_Ptr,buffer,len); 美容
/*返回真正写入.到设备里的字符的.长度*/ 健康
return len; ..
}
/* 模块定义 */
/* 设备的主设备号*/
static int Ma.jor; .
/* .当进程要对创建的设.备进行某些操作时,这个结构存放了要调用的函数的入口 --------------彩票
这个结构有系统设备表的指针指.向。NULL 表示未实.现该功能。*/ 汽车
struct .file_operations. Fops = { <性病>
read: . device_re.ad, .
. write: device_write, --- 印刷
open.: device_ope.n, 学习
releas.e:device_relea.se --- 印刷
};
/* 初始化模块.--注册字符设备 */ .
int init_module() .<性病>
{
. . /* 注册字符设备(至少一次) */ 美容
. Major = register_chrdev(0, DEVICE_NAME, &Fops);. .
/* 负.值意味出错 */ .
if (Major .< 0) 外汇
{
printk (".Sorry, registering the chara.cter. device failed with %d\n", Major); 建材
.. return Major; 外汇
}
. printk ("Registerat.ion is a success. T.he major device number is %d.\n", Major); 汽车
printk .("If you w.a.nt to talk to the device driver, you'll have to\n"); (广告)
. printk ("creat.e a device file. We suggest you use:\n"); .
printk ("mknod <name>. c %d 0\n", .Major); 电脑
return 0; . 乙肝
}
/* 清除模块 --从 /.proc 中注销.合适的文件*/ .
void cleanup_.module() 电子
{
. int ret; 建材
. /* 注销设备 */ 域名
. ret = unregister_chrdev(Major, DEVICE_NAME); .投资
/* 如果出错,报告错.误*/ 电子
if (ret <. 0).
.{ 乙肝
printk("Error in modu.le_unregister_c.hrdev: %d\n", ret); [成人用品]
}
. MODULE_LICENSE("GPL").; 外贸
}
在终端输入 sudo make后 出现如.下错误:.
make -.C /lib/modules/2.6.24-18-generic/build M=/home/sop.hiazhang./桌面/2 modules.
make[1].: Entering directory `/usr/src/linux.-headers-2.6.24-18-generic'虚拟主机
CC [M] ./hom.e/sophiazhang/桌面/2/char_dev.o 婚庆
/home/sophiazhang/桌面/2/char_dev.c: 在函数‘.de.vice_write’中:教育
/home/sophiazhang/桌面/2/char_dev.c:10.3: 警告: I.SO C90 不允许混合使用声明和代码 电子
/home/sophiazhang/桌.面/2/char_dev..c: 在函数‘cleanup_module’中:教育
/home/sophiazhang/桌面/2/char_dev.c:.162: 错误: void .值未如预期地被忽略学习
/home/sophia.zhang/桌面/2/char_dev.c:169: 警告: .ISO C90 不允许混合使用声明和代码 杀毒
make[2]: *** [/home/sophiazhang/桌面/2/char_dev.o.] 错误 .1服务器
mak.e[1.]: *** [_module_/home/sophiazhang/桌面/2] 错误 2[成人用品]
make[1]: Leaving directory `/usr/s.rc/linux-headers-2.6.24-18-g.eneric'外贸
make: *** [default] .错误 2投资
请哪位高手指.教下如何解决阿 ??????电脑