|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于Linux内核版本更新的原因,LDD3(v2.6.10)提供的源码无法直接使用,下面是本人编译scull源码时出现的一些问题及解决方法。, d" B1 A x- E7 ^4 L9 t9 c( o
编译环境:CentOS 6.3(kernel version 2.6.32)
6 ~5 C# g' b( x2 J5 C) {& `& Q( ^2 M* A0 Z& f3 p
编译错误:
$ n- i- b% f$ g3 e/ Dmake -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
: T2 x# p4 q, I2 j% L& K) [make[1]: Entering directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'- V$ U0 R( N# T. R/ ]
scripts/Makefile.build:49: *** CFLAGS was changed in "/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/Makefile". Fix it to use EXTRA_CFLAGS. Stop.
. R" Q, C: q% h* ~! t. kmake[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2% ]9 k! a; Y7 p5 L$ |1 X; L
make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686', y+ z- k$ V( X3 Q
make: *** [modules] Error 2* T) i# ^* _$ ]1 i
解决方案:' ?/ A* {1 @9 s, b: o
CFLAGS与Makefile.build中的CFLAGS冲突,错误提示要求将CFLAG换成EXTRA_CFLAGS重新编译即可;
% m" [- _& i! Y$ Q% J' I6 U( n" J6 e# \6 _8 j. w
编译错误:( s t# b J- I8 \/ i: U
error: linux/config.h: No such file or directory
$ A3 S. U z# [) W+ G( w解决方案:
3 S) h: y$ o: |! ]( \5 s从linux-2.6.20起,config.h就已经被移除了., e3 e" d F5 Q/ K$ f b% i
将#include <linux/config.h>修改成如下——>
H- T: x4 [: L$ {* n#include <linux/version.h>
; F1 {! q6 p& N. p- R8 W4 m8 [, w#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
! w9 t" a2 W! _( O, a. a#include <linux/config.h>2 C9 }, ~* c- R/ t
#endif
# h% `! d5 R4 \7 a2 u" x8 x9 O3 @% H* Q; G3 f. J4 E6 j: Y0 }' e
编译错误:! E9 E* H$ B3 ]7 t: v1 {1 f! ?
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_p_read’:
- k8 {2 z7 K5 A I/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)
; X1 _5 G& R8 j9 |! O+ G* |/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: (Each undeclared identifier is reported only once0 P9 @6 F+ w2 G$ Q3 G! S
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: for each function it appears in.)
4 q' h. Z' D5 ]$ U; c+ i3 i/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: implicit declaration of function ‘signal_pending’9 a' M* D6 [! X. \: v! R
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:131: error: implicit declaration of function ‘schedule’/ e+ H0 {4 p" q9 R
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_getwritespace’:: `# f& \: K6 ?% e5 ?3 U
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:168: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)) G6 F$ ]) d! ?
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c: In function ‘scull_p_write’:
$ f, o; F' U! \) w7 S4 h/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:219: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)8 H, R' b8 ~ v, n4 ]
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:223: error: ‘SIGIO’ undeclared (first use in this function)
_ f: Q* H& _! o/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.c:223: error: ‘POLL_IN’ undeclared (first use in this function): c# c0 I, K% {# l# D
make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/pipe.o] Error 1
) `) K' H6 {: }* `. l+ p% K% Imake[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2
1 B F3 ^7 K4 o- ]解决方案:0 D) S8 h) j5 |/ `& i2 \1 X
头文件变动原因,在pipe.c中添加$ n9 S" n! a! l; f8 p
#include <linux/sched.h> ; X |& g/ r. g/ U4 W
7 |- x$ |- {( x% \$ w6 x2 ~, _编译错误:
* \2 G9 r+ a$ @5 c2 t; R2 F/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_u_open’:* E7 o' B/ ~+ K: ?$ X; z, C: m# A6 u
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:106: error: dereferencing pointer to incomplete type2 f2 r4 U$ B8 ]6 [/ ^; ~
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:107: error: dereferencing pointer to incomplete type
& I3 J( z) i' B( H/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:114: error: dereferencing pointer to incomplete type
' x2 s8 [9 O `& g- C* |( g/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_available’:
/ Y! B& n p0 U& ~, T2 d% l0 n/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:165: error: dereferencing pointer to incomplete type2 z1 ?1 ^' R4 v8 P# ?) u
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:166: error: dereferencing pointer to incomplete type1 H& j$ `$ u5 e4 b
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_open’:
. M" o1 \8 u; ]% m* h. R z( b/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function), d: s' h( @* Q9 A# N
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: (Each undeclared identifier is reported only once
7 F& `* A5 N/ D& R+ c+ L/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: for each function it appears in.)
7 `) r$ u- l( _" z1 {/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: implicit declaration of function ‘signal_pending’7 z4 i7 ~# U( [% {+ H' L3 }
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:179: error: implicit declaration of function ‘schedule’
2 m Z4 `, Y% ` `8 A, `; a/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:184: error: dereferencing pointer to incomplete type: m/ n/ S! V0 Q1 k# q% w0 D$ D& m
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_release’:
/ H% ]5 T9 Q' X& n _/ }+ X7 z( I/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:205: error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)+ B0 c# X' c0 k8 x- K5 G. c1 `
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_c_open’:
_1 y, y- L# t7 j0 {/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:277: error: dereferencing pointer to incomplete type
. f- T$ N. ~6 N* s) g/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:281: error: dereferencing pointer to incomplete type* m2 W0 ?. @2 o2 O( I7 K" f6 p0 f
make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.o] Error 1, y6 Q& ~% @% h/ u
make[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2
+ T2 }/ ?! l' s5 y4 [make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
/ i8 w& G2 w/ r: Cmake: *** [modules] Error 2
+ Q. J6 T! \1 b6 _# x' X5 K解决方案:* a; ]* s" O0 |# O6 S9 G
头文件变动原因,在access.c中添加
3 j9 b# K i9 J d1 t7 @#include <linux/sched.h>
1 i3 d' {/ ^7 s' v6 ~7 a7 ]. a& C4 U' ?6 z1 G. e: I7 j: H F
编译错误:
# ]( Y; y3 `8 ?: L3 H- I/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_u_open’:
; _8 c3 y9 Q+ H6 i% K# l5 L! z: Y/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:107: error: ‘struct task_struct’ has no member named ‘uid’
) C- K. m% I+ }/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:108: error: ‘struct task_struct’ has no member named ‘euid’
, K- h9 y0 |9 v/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:115: error: ‘struct task_struct’ has no member named ‘uid’
5 |# [7 g* m3 h$ |* m9 f( t/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_available’:
) h9 x1 j; Z3 r9 w/ m% e# [! e/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:166: error: ‘struct task_struct’ has no member named ‘uid’
Z* O! {+ N5 e/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:167: error: ‘struct task_struct’ has no member named ‘euid’+ s5 Y5 n3 P, M. _) H
/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c: In function ‘scull_w_open’:
0 j& o! i u" F, @ U* R8 H/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.c:185: error: ‘struct task_struct’ has no member named ‘uid’# Z- Z8 e `; v% a
make[2]: *** [/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull/access.o] Error 13 b- t1 \! O' x1 g3 L
make[1]: *** [_module_/mnt/HappyStudy/MyDesigner/Linux/LDD3/examples/scull] Error 2
# F+ N9 F1 H- Z, M% h7 u3 {$ D5 Jmake[1]: Leaving directory `/usr/src/kernels/2.6.32-279.14.1.el6.i686'
) d: g6 x5 T) g/ Q, p/ omake: *** [modules] Error 21 D) q% m& {, W. S+ L" S1 F
解决方案:- G* v" K2 E( k
因为内核版本的升级,struct task_struct发生了变动,uid和euid放到了cred域下.
8 H" }9 P# v5 L# E9 N修改,做如下替换
+ Z* u- ~. M- j; x9 P( k( n8 qcurrent->uid 替换成current->cred->uid
3 e% s: D9 |* l2 _3 D/ n6 r) X6 dcurrent->euid替换成current->cred->euid
/ E' ] t8 N" l/ F- ?
9 V0 w& O: A; R& k1 W6 z! L7 w重新编译,成功!
3 b4 m& j- L# C2 |* a3 {" j* a7 e
3 J- A/ I2 Z0 A) S% e) @ |
|