QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1201|回复: 9

向各位大牛请教如何怎样包含proc_fs.h才不会出错。

[复制链接]
发表于 2003-5-5 22:31:38 | 显示全部楼层 |阅读模式
最近想用/proc文件系统实现一个模块,来读一些内核参数
可是老是出错

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/types.h>
#include "config.h"
#include <linux/proc_fs.h>

......

config.h 是我自己定义的atomic_t,和kdev_t类型的,跟linux内核源码定义一致。。。

(之所以定义,因为包含asm下的头文件会给出n多警告信息,而proc_fs 里又有这些破类
型)
还有NULL ,NULL 被定义为 ((void*)0),否则就要包含<stdio.h>不然,会抱错。


编译时,老是提示,在proc_fs.h的第203行,有parse error before void...

我的系统是redhat8.0,编译器gcc,随8.0发布的

各位大虾帮帮忙,感激不尽。
发表于 2003-5-5 22:55:20 | 显示全部楼层
this is my module code, no problem. u need not define that config.h and u never need include asm directly if include/linux have this file already. a correct set kernel will include asm/... automatically and correctly.

#include <linux/errno.h>    /* Miscellaneous error codes */
#include <linux/stddef.h>   /* NULL */
#include <linux/slab.h>     /* kmalloc() */
#include <linux/module.h>   /* EXPORT_SYMBOL */
#include <linux/pci.h>
#include <linux/smp_lock.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
回复

使用道具 举报

发表于 2003-5-5 22:56:13 | 显示全部楼层
my experience, always recompile the kernel and run the new kernel before u do kernel programming.
回复

使用道具 举报

 楼主| 发表于 2003-5-6 00:06:48 | 显示全部楼层
thanks a lot.
one more question
I ever read the file /usr/include/linux/slab.h and  found  that there is no contents between  #ifndef and #endif. That's to say ,this file is almost empty.While slab.h in kernel source codes does decalare  a lot of funcitons .
why?
回复

使用道具 举报

发表于 2003-5-6 00:22:33 | 显示全部楼层
for 2.4.20, there are many between ifndef and endif.
------------------------------------------------------------
1 /*
2  * linux/mm/slab.h
3  * Written by Mark Hemment, 1996.
4  * ([email protected])
5  */
6
7 #if     !defined(_LINUX_SLAB_H)
8 #define _LINUX_SLAB_H
9
10 #if     defined(__KERNEL__)
11
12 typedef struct kmem_cache_s kmem_cache_t;
13
14 #include        <linux/mm.h>
15 #include        <linux/cache.h>
16
17 /* flags for kmem_cache_alloc() */
18 #define SLAB_NOFS               GFP_NOFS
19 #define SLAB_NOIO               GFP_NOIO
20 #define SLAB_NOHIGHIO           GFP_NOHIGHIO
21 #define SLAB_ATOMIC             GFP_ATOMIC
22 #define SLAB_USER               GFP_USER
23 #define SLAB_KERNEL             GFP_KERNEL
24 #define SLAB_NFS                GFP_NFS
25 #define SLAB_DMA                GFP_DMA
26
27 #define SLAB_LEVEL_MASK         (__GFP_WAIT|__GFP_HIGH|__GFP_IO|__GFP_HIGHIO|__GFP_FS)
28 #define SLAB_NO_GROW            0x00001000UL    /* don't grow a cache */
29
30 /* flags to pass to kmem_cache_create().
31  * The first 3 are only valid when the allocator as been build
32  * SLAB_DEBUG_SUPPORT.
33  */
34 #define SLAB_DEBUG_FREE         0x00000100UL    /* Peform (expensive) checks on free */
35 #define SLAB_DEBUG_INITIAL      0x00000200UL    /* Call constructor (as verifier) */
36 #define SLAB_RED_ZONE           0x00000400UL    /* Red zone objs in a cache */
37 #define SLAB_POISON             0x00000800UL    /* Poison objects */
38 #define SLAB_NO_REAP            0x00001000UL    /* never reap from the cache */
39 #define SLAB_HWCACHE_ALIGN      0x00002000UL    /* align objs on a h/w cache lines */
40 #define SLAB_CACHE_DMA          0x00004000UL    /* use GFP_DMA memory */
41 #define SLAB_MUST_HWCACHE_ALIGN 0x00008000UL    /* force alignment */
42
43 /* flags passed to a constructor func */
44 #define SLAB_CTOR_CONSTRUCTOR   0x001UL         /* if not set, then deconstructor */
45 #define SLAB_CTOR_ATOMIC        0x002UL         /* tell constructor it can't sleep */
46 #define SLAB_CTOR_VERIFY        0x004UL         /* tell constructor it's a verify call */
47
48 /* prototypes */
49 extern void kmem_cache_init(void);
50 extern void kmem_cache_sizes_init(void);
51
52 extern kmem_cache_t *kmem_find_general_cachep(size_t, int gfpflags);
53 extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long,
54                                        void (*)(void *, kmem_cache_t *, unsigned long),
55                                        void (*)(void *, kmem_cache_t *, unsigned long));
56 extern int kmem_cache_destroy(kmem_cache_t *);
57 extern int kmem_cache_shrink(kmem_cache_t *);
58 extern void *kmem_cache_alloc(kmem_cache_t *, int);
59 extern void kmem_cache_free(kmem_cache_t *, void *);
60 extern unsigned int kmem_cache_size(kmem_cache_t *);
61
62 extern void *kmalloc(size_t, int);
63 extern void kfree(const void *);
64
65 extern int FASTCALL(kmem_cache_reap(int));
66
67 /* System wide caches */
68 extern kmem_cache_t     *vm_area_cachep;
69 extern kmem_cache_t     *mm_cachep;
70 extern kmem_cache_t     *names_cachep;
71 extern kmem_cache_t     *files_cachep;
72 extern kmem_cache_t     *filp_cachep;
73 extern kmem_cache_t     *dquot_cachep;
74 extern kmem_cache_t     *bh_cachep;
75 extern kmem_cache_t     *fs_cachep;
76 extern kmem_cache_t     *sigact_cachep;
77
78 #endif  /* __KERNEL__ */
79
80 #endif  /* _LINUX_SLAB_H */
81
回复

使用道具 举报

 楼主| 发表于 2003-5-6 13:23:21 | 显示全部楼层
thanks a lot.
but this is my slab.h(shown below)

[code:1]
/*
* linux/mm/slab.h
* Written by Mark Hemment, 1996.
* ([email protected])
*/

#if        !defined(_LINUX_SLAB_H)
#define        _LINUX_SLAB_H


#endif        /* _LINUX_SLAB_H */
[/code:1]

i don't konw what's wrong!
回复

使用道具 举报

发表于 2003-5-6 21:58:54 | 显示全部楼层
what version u use?
回复

使用道具 举报

发表于 2003-5-6 22:00:00 | 显示全部楼层
even the 2.2.14 kernel has a slab.h like mine. i checked it just now
回复

使用道具 举报

 楼主| 发表于 2003-5-7 10:17:53 | 显示全部楼层
"Linux version 2.4.20-8 ([email protected]) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003"---copied from /proc/version.
回复

使用道具 举报

发表于 2003-5-7 10:22:38 | 显示全部楼层
so rh hacked that slab.h as well. u can try to grep where it define the kmem_cache_t to see what's happened.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 23:28 , Processed in 0.044161 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表