|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于Linux内核版本更新的原因,LDD3(v2.6.10)提供的源码无法直接使用,下面是本人编译scull源码时出现的一些问题及解决方法。
! Q0 o) x" |6 X' m5 Y4 e2 H& W& x编译环境:CentOS 6.3(kernel version 2.6.32)
$ E0 A0 ]5 W2 u+ [
0 L; _9 P r; m- j' w编译错误:3 \' d4 \+ A$ A% Q- L/ g
make -C /lib/modules/2.6.32-279.14.1.el6.i686/build M=/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull LDDINC=/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/../include modules
" z- w& O2 O1 g% n8 Gmake[1]: Entering directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
! O* F& P& {) n" y( Hscripts/Makefile.build:49: *** CFLAGS was changed in "/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/Makefile". Fix it to use EXTRA_CFLAGS. Stop.
* ^6 ?+ v0 Z1 l( |make[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2! ^( }; |' D t- p, {
make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
: @0 O4 `2 P1 S9 J) B" p2 |make: *** [modules] Error 2( d$ e" h+ ?; X) g- r
解决方案:
) e% G. c) z* r% X1 f1 s" Y5 i. C b: NCFLAGS与Makefile.build中的CFLAGS冲突,错误提示要求将CFLAG换成EXTRA_CFLAGS重新编译即可; O& G3 u* N& C- _ @
. J' V0 ~( m# m0 c
编译错误:
2 P& ? I/ ?' P) u# i2 G- A) perror: linux/config.h: No such file or directory
1 U7 b: {5 M3 a9 V解决方案:
( K) S0 x5 @2 ~从linux-2.6.20起,config.h就已经被移除了.
1 }& g; I6 M, h6 K# a将#include <linux/config.h>修改成如下——>8 {1 d& ]: ]3 i
#include <linux/version.h>
2 `1 n) K$ y D- y+ q9 F& c#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
! C; N! z/ c1 p R [5 L" |4 ~8 F#include <linux/config.h>
2 d, T& E7 A% z; i2 _- Y) u#endif9 w. i) K9 G ~8 ]
; J6 w4 d& }! M2 v编译错误:9 n; J8 e+ u! }, t' u ^2 Y
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_p_read’:" o( c7 n+ g+ {1 ^
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
5 W L! k! `# ^% A/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: (Each undeclared identifier is reported only once
) Q+ X3 B1 w- C6 W' |4 G1 [, R( K/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: for each function it appears in.)
" o8 K% g( a" h) s* m/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: implicit declaration of function ‘signal_pending’5 v/ r# \3 R& }) H8 A
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: implicit declaration of function ‘schedule’% D5 M! ^: R. ~$ B
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_getwritespace’:3 i5 F2 K) k. Y t6 E6 D% i
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:168: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
2 ?: c# u) z$ }. h; N- P$ L1 e! y/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_p_write’:, u" Y c. F# Y" j8 I* y
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:219: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
1 i. ]" p: p& d% D+ n- M% d: b$ y' [6 h. w/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:223: error: ‘SIGIO’ undeclared (first use in this function)
4 p. _- o6 e5 l% q% L/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:223: error: ‘POLL_IN’ undeclared (first use in this function). v. p5 d) m, V, W( O
make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.o] Error 1
* [' G% s3 A v" jmake[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 25 m7 c1 @5 O4 M0 e" p
解决方案:
) @1 u4 R; ~# S, S7 A' v- T- g+ x头文件变动原因,在pipe.c中添加! \ S1 r. k! v- o9 Y
#include <linux/sched.h> ! i3 n- @- c; O/ d! a2 [0 {
* U5 _" @) l, z b4 f$ X- U
编译错误:
; H+ z! s( ?: [7 D! D/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_u_open’:
C- I9 S% Z% \" L8 ^2 D0 K( |# k" o1 F/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:106: error: dereferencing pointer to incomplete type o' \0 T- P8 l1 |( A; X4 L
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:107: error: dereferencing pointer to incomplete type
; ?6 o" D/ z* K' }9 W; ^/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:114: error: dereferencing pointer to incomplete type X) w x! H9 S: s
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_available’:
/ E2 @/ |- o) x* a# _/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:165: error: dereferencing pointer to incomplete type3 { F% `, ^' s' q
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:166: error: dereferencing pointer to incomplete type$ p& {; W! e* v
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_open’:; p& W9 _ F+ i9 k
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)6 o' J9 t2 K6 D$ Z+ K
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: (Each undeclared identifier is reported only once$ X' `6 q9 V1 ~; c0 K+ h' `
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: for each function it appears in.)
# ~* n) G5 F. | l8 Z/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: implicit declaration of function ‘signal_pending’/ h$ w, M5 c' \
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: implicit declaration of function ‘schedule’3 B K" ]+ n( V4 V8 }
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:184: error: dereferencing pointer to incomplete type6 W$ ~7 l% i5 N U! P. i7 u/ n, ^
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_release’:% N1 Q9 o! R l
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:205: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
) h/ Y/ x! Y( B" V. V* d/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_c_open’:
) O! Z- `9 q( Y( G- G/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:277: error: dereferencing pointer to incomplete type- Z7 V/ \) ~# i" b/ @
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:281: error: dereferencing pointer to incomplete type
' }/ T+ z1 W' n) i( k* l3 _2 H9 [make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.o] Error 12 c- W: E6 v" t" i9 m2 a
make[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2
7 B; G; N" v7 D. F( o" [make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
; e4 E# F4 u$ }make: *** [modules] Error 2
( H( ?4 v8 ~% s$ v) J2 J解决方案:
- M+ f$ b% ^$ w8 V头文件变动原因,在access.c中添加
9 a4 F8 N4 T# {* U#include <linux/sched.h>
9 A- a/ T! E6 r
2 ]# L5 _3 H% ~编译错误:
' r/ e( _; l) ^: F' o4 F/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_u_open’:5 X v4 E: Q: e) Y7 n- S
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:107: error: ‘struct task_struct’ has no member named ‘uid’0 O' Q" N' V1 X7 c+ e/ a# s/ k# l
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:108: error: ‘struct task_struct’ has no member named ‘euid’
$ u# K' C( G6 i5 M/ F/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:115: error: ‘struct task_struct’ has no member named ‘uid’
) w# d! N* @! M/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_available’:
e2 w" u7 D4 P9 t) j1 c9 v/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:166: error: ‘struct task_struct’ has no member named ‘uid’3 \" l: q2 a& M
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:167: error: ‘struct task_struct’ has no member named ‘euid’
' b0 y# w) W5 ?' L6 M5 ~) x/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_open’:
: `* \& B! I: H( y/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:185: error: ‘struct task_struct’ has no member named ‘uid’% }- [9 F: ~ d9 m4 S0 h8 @" J
make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.o] Error 1
, E, j; @/ w- @5 T+ B) p: _9 ~ E$ A1 U, j$ Vmake[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2
7 B" R2 N& @0 e1 N9 k% d% cmake[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
8 b5 s1 M# B1 mmake: *** [modules] Error 2
4 r E8 M2 w1 {3 Z2 k解决方案:
) t$ S! J( `6 g7 S# c1 `# Z* n7 ^因为内核版本的升级,struct task_struct发生了变动,uid和euid放到了cred域下.
3 {4 e& e {. q+ b0 ]9 y4 h修改,做如下替换$ Z- s0 h4 ^4 ?3 H/ m: P7 {
current->uid 替换成current->cred->uid6 a+ e- o* n% M" S$ R1 ^2 M4 v
current->euid替换成current->cred->euid
$ z. y8 w) H9 m e/ J! n: `
. h4 X, F# [7 C$ b6 E" d! a重新编译,成功!: z% K E, o7 `$ G* W3 G# ]
% |5 Z; ?' m& c. b& v+ g
' i3 |( n9 Z j* t) u |
|