Разработка модулей ядра ОС linux.pdf
TRANSCRIPT
-
5/24/2018 Linux.pdf
1/85
Linux
Kernel newbie's !nu!l
-
5/24/2018 Linux.pdf
2/85
"#$%
.......................................................................................................................3
1. Linux..................................................................................................... 7
1.1. Linux...................................................................................7
1.1.1. Linux !" " #nix....................... $1.1.%. &'" &("""........................1)
1.1.3. * +,+ ..................................................................11
1.1.-. / .............................................................................................1%
1.%. ..............................................................................................................1-
1.%.1. .............................................................................................. 1-
1.%.%. "/ ...............................................................................17
1.%.3. "/ " ".............................................................1$
1.%.-. 0, i22 456................................................................................ %1
1.3. ,, & (.............................................................................................%% %. 8' Linux................................................................................ %-
%.1. ", ,',......................................................................................... %-
%.1.1. ", ,', Linux.....................................................................%-
%.1.%. ' ( "( ,'.....................................................%$
%.%. 0& &"9 Linux........................................................................ 31
%.%.1. :, &".....................................................................................31
%.%.%. ;>
%.-.1. =" @AB...................................................................................... >>
%.-.%. ' .1. I( JFG6J........................................................................................... 73
%.>.%. 8 FG62H..........................................................................................7>
%.D. ,, & (.............................................................................................$)
K9!.................................................................................................................$%
& &' /,....................................................................... $-
%
-
5/24/2018 Linux.pdf
3/85
$%
"," '," ' + &:,+ " ! "
" MinGNH &: Oi6FGHG25. " 9
&&/ MinGNH & &: "
". I ' ' &:,+ " P D)Q+ (+
RR / &:
-
5/24/2018 Linux.pdf
4/85
S ' + + "/ "T ,+
'"T !, /!S S. IT,
! , &(
-
5/24/2018 Linux.pdf
5/85
AGF5F4n &+ /" , &, S
+ /9 /:. +
/:+ : /": ,( /
&:
-
5/24/2018 Linux.pdf
6/85
* '"T &" /!" &: ' /+
!c
! '(9 , &:&,
-
5/24/2018 Linux.pdf
7/85
# () * Linux
()() +$$+% Linux
Linux " &" ' &/9 ! &: "
#nix ' &'" Vfoo L4GF45GFifH "& rasa. 1hDh (/
*^ 8! I Y"& ' &:/9 "/ #nix
&
-
5/24/2018 Linux.pdf
8/85
Linux l ^ ' &: " 9P "T
&
-
5/24/2018 Linux.pdf
9/85
=T "! '(/T",+ "/ . | Linux
"," & &T "!/9
'(/'/ ,(/'/ & " +". Z '"T
&, & ).hh ( =/ Q*/. [$\
} "/ &9 , /.
Linux &T ""!/9 "(&:/9 /
?BOWC. jS ""!+ #nix &T9 BOW
S :,+ ': ^ &T ".
Linux &"&,". ,
,&9P ' T T" .
""!+ ': #nix &"& "9 BGo4FiH
UvUR " #nix.
Linux &' &+ ': &c & !"
!9 ,!,+ &:. ! ' &:,
, & , ' + "9 P /,.
Linux //9 ,
-
5/24/2018 Linux.pdf
10/85
! . [1$\ ! k S , '""
+, Linux %.D.1$.
()().) * # +#$$%% + /0#0+%% /"%
&: ", " , &:
-
5/24/2018 Linux.pdf
11/85
/9. ,! /" :" &" ! /
$ I 3%Q',+ " 1D I D- Q',+.
=". =
-
5/24/2018 Linux.pdf
12/85
HGun K/ &"
uHF ]!, & &'
()()5) 6%
]" ! Linux "," &'
,& "!/9 / / &: ,.
K(/T", k ',.
/ & / &" T ! ,! &("". /
T " !/ + ,+ + " "
-
5/24/2018 Linux.pdf
13/85
printk(KE!"!$%&5ood6ye' orldn&)*
+
module"init(hello"init)*
module"exit(hello"exit)*
1%783E"39E!E(&5-3&)*
Y! + "/ l ^
-
5/24/2018 Linux.pdf
14/85
().)
().)()
* &,",+ &"+ &'/ ! Linux %.D.1$.
1
Linux.
&' &"P9 /, e4~f.
= &/! +,+ + oinuxQ%.D.1$.54F.% (
/T & ?,! &,9 ( JuHFJHF6JC &"P9
/, 54F " /&&' ?&&T" ! + +
/P" !" ( !Cc
tar :9 /usr/src/ :x;v linux:[email protected]=
= & &+" &S ( JuHFJHF6JoinuxQ%.D.1$Jc
cd /usr/src/linux:=..?@/
I" e4~f f26Gn2iz '
-
5/24/2018 Linux.pdf
15/85
/P " e4~f. 0 &: "T
'&/ "/ e4~f Q%. =" Q% '! '&/ /+ &
,& ?,! &'/9 & &:C. m ,
"&, , ,, "/ " e4~f eGuofHinH54oo
&" + ( JoiJeGuofHJ%.D.1$J~fFnfoJ.
make :;=
make modules"install
= + & / 4F6Ji3$DJGG5JUe4zf. E
BgH5fe.e4 l ^ : T9P " +
( +( . [11\ Z
-
5/24/2018 Linux.pdf
16/85
l ^ &, S( , T 9 //P
'! .
=: & %.D.x. =:
%.-.x ! " " e4~f. =/ %.-.x
! &'/9 T %.D.x ", /" + ".
. =^"/
:+ '& ^&" "/ &'
&/, //9 "S/ /. =""
'& " '" &!
-
5/24/2018 Linux.pdf
17/85
I
-
5/24/2018 Linux.pdf
18/85
! & S" +Q +" " !
( /', ?", T, /' &/ (/ +,+
C. m " e4~f / ,& /&S ( "/
&
-
5/24/2018 Linux.pdf
19/85
i 10KE!E3
coniC 10KE!E3"0HE33%
6ool &sayHello() unction&
deault y
help
imple unction sayHello() that say &Hello' orld&.
endi
"9 pfFnfo 46~inzp & /& &, &"
Xw`AUyO_v`_L ?
-
5/24/2018 Linux.pdf
20/85
'! O . /! '! &" O
-
5/24/2018 Linux.pdf
21/85
" ! , &/
-
5/24/2018 Linux.pdf
22/85
}P ( '&, &"P9 ( JuHFJHF6J. =" Q1 '!
! +" ( " &( ( &/+ +
-
5/24/2018 Linux.pdf
23/85
&(
-
5/24/2018 Linux.pdf
24/85
# .) Linux
.)() %+$4 #4#4
.)()() %+$4 #4#4 # Linux
&
-
5/24/2018 Linux.pdf
25/85
-
5/24/2018 Linux.pdf
26/85
-
5/24/2018 Linux.pdf
27/85
=' &("", + / !'
", ,' T, &' &, "+'". Y"
"+'"" &("" &,c ' 9!/: ?fx6f5iGnC " &9! T" ,&
! ^ /:. " /! ^ ! "(
,' ?HgH5fe 64oo f4nofFC l '" && &
-
5/24/2018 Linux.pdf
28/85
.)().) $% $#" +%+$" #4#
1
* , ", ,' . ", ,' T
'P '" .
K! '" & av_rtBU_ &
asmlinkaCe lonC sys"CetstsiAe(void)
{
return HE7"OE*
+
8(: ( "( ,' &+ ^&.
I "( ,' '"P +,+ .
8'"" "( ,'
-
5/24/2018 Linux.pdf
29/85
.lonC sys"vmsplice
.lonC sys"move"paCes
.lonC sys" CetstsiAe
* + &T",+ &
-
5/24/2018 Linux.pdf
30/85
lonC open(const char Lilename' int laCs' int mode)
,' ^
-
5/24/2018 Linux.pdf
31/85
'&/ &("", &/!" P &T ! ,
", ,' .
# Ccc CetstsiAe.c :o CetstsiAe* ./CetstsiAe
Kernel stack siAe D @?= 6ytes
I &("", + # Linux
.).)() $%?4 /%
" :,
-
5/24/2018 Linux.pdf
32/85
! "#$%
: & //, 4zf &
-
5/24/2018 Linux.pdf
33/85
" $hD w`_`wvOrL l &" ?1DQ$hD C.
=" ' w`_UyO_O ', p+ &"9p ?iz efeGFgC
&" ', pT &"9p?oGN efeGFgC. K &"
l ^ (! (/&& ' &&,"
&!". IT ' & in6oufJoinuxJeeGnf. //
Gnf. // &, ! ,+ : ' ?unHiznf
oGnz 2Fff4zfHC " ', ?64F n4ef '"T, '!c ptOrp p`GFe4op
pizOfepC /( '!. [1)\
.).).) @$A+4 4 + /0>
& '(#))*+,- './%%,-
E/: ~e4ooG6?C ?k in6oufJoinuxJHo4.C (! e4ooG6?C
& &' ' 9!" ( &" 2o4zH.
~e4ooG6?C , /! &" '," '"" . ,,
:, &" 9 / "T,".
void Lkmalloc(siAe"t siAe' Cp"t laCs)E/: 'P /' &" '"" "S Hif
. /! S 'P '! `#LL.
E/: ~2Fff?C ?k in6oufJoinuxJHo4.C &'
&" ,/9 ~e4ooG6?C ?,', ~2Fff?C /!
, & , ,, ~e4ooG6?CC.
void kree(const void L)*
,' ~2Fff? #LLC &: & &^"/
'&,". =" &'
-
5/24/2018 Linux.pdf
34/85
else {
/LWVR:VR [\]U\^L/
kree(p)*
+
& 0(#))*+,- 0./%%,-
E/: qe4ooG6?C k in6oufJoinuxJqe4ooG6.. E/: 'P
/' / &,/9 '"" " Hif .
&" /!
-
5/24/2018 Linux.pdf
35/85
"
-
5/24/2018 Linux.pdf
36/85
yAWrawOUX K& ,&, T
&+ '
yAW`wUw K& "T & ( ,&
' ,& &: ( J,
yAW`wAB K& , &" "T
,& , &: J, '&P
,& &: ',
-
5/24/2018 Linux.pdf
37/85
jS &: , &" &'/9
-
5/24/2018 Linux.pdf
38/85
i((6u_i` >D 4x?) (6u_i`
-
5/24/2018 Linux.pdf
39/85
="" ':9 ( "( ,' ?)
s? D arCv_?`*
else
s? D &his s (?=BN) 7eault E trinC&*
len D strlen(s?)*s= D (char L)malloc(len)*
memset(s=' 4' len)*
print(&nput strinCb Msn&' s?)*
ret D syscall(""!"upper' s?' s=' len)*
print(&%utput strinCb Msn&' s=)*
return 4*
3h
-
5/24/2018 Linux.pdf
40/85
+
=("" &/! ! &" +/9 / H1. m
! &" & ?&" 4Fz6 1C
H1 :'/ & /"!9 TP ",
+( T( ( ", + :
-
5/24/2018 Linux.pdf
41/85
&:, ,&", ( & . Y" "
&/9 ,&9 ,!, &:,. = '"T
&(""+ 9P+ ( '!+ 9P+
T" &' &'/9 " &:.
",+ &:,+ "+ &:, &/"9
! /+ /,+ /c /( &: /
&". /, &: ' 9'9 ( ! &: &'/
9 "&9/9 "/ T
-
5/24/2018 Linux.pdf
42/85
//, 54H~H5Fu65 &, tCid*
+
=!"/ 'P '! 5zi ?
-
5/24/2018 Linux.pdf
43/85
/: &("" + & . ^( "" ( !
,& &(""/ " &: ^
3. &: " 6uFFfn5 ,".
9, P / ' &: '"T, !'
-
5/24/2018 Linux.pdf
44/85
"T " &:. =&! &'
^( state D (state"value)* + hile (4)
/LU[UX\ tsk fVURgXV g fRfVRX\ state"valueL/
!
S &:,+ " ' &: &'/
" &T ?H4NnC. =: ' " " &
, !, &",
-
5/24/2018 Linux.pdf
45/85
E/: G2GF~?C l &+T Linux Oinix ( ^
,' T ' !'
-
5/24/2018 Linux.pdf
46/85
XLw`_Wrv_`a 8 &: &T9P( &:
" &:"
&T( &:
XLw`_WavrX_ =T / &T(
&: ?&'/ C
XLw`_BUyr`t 0 &T( ( &:
/ P ! (
XLw`_av_rt 8 &T, &:, //
&T (/&& &
XLw`_#`avrX_t K& "/ &:/
&'
-
5/24/2018 Linux.pdf
47/85
4
= 'S &: T '"", /,.
,! /!T &+ ( ,', fxi5?C ?"& X
&"P ( ,' :
-
5/24/2018 Linux.pdf
48/85
;:', ,. ! ,, (,
, , :', /," '!" +
"8&0& #,%027(.
;:', /" , ?/( ' l
:', ,C. , ! ,,
, , & /"!9 :', /" +
9:: "+## #,%027(.
I/! ?f4C. I/! l ^ / , "! &"
&/!" &"P9
-
5/24/2018 Linux.pdf
49/85
oldmm D current:>mm* /L[\fYTXVRT V\Y\R TR\ffUL/
i (clone"laCs 93%!E"I1) { /LYUU ]U 93%!E"I1L/
atomic"inc(oldmm:>mm"users)* /Lg\]XW\X\ U ?L/
mm D oldmm* /LUXfgU\Vf YUUV\]L/
Coto Cood"mm*
+
Cood"mmb
tsk:>mm D mm* /LTXfgR\X\ YUUV\]L/
I( &: 'S ,',
-
5/24/2018 Linux.pdf
50/85
7
I( &T P / / &" ^
T ,
-
5/24/2018 Linux.pdf
51/85
"0-&(#'&027( '771, +);;,-< =>9 9P &&, ^S
T /,+
-
5/24/2018 Linux.pdf
52/85
& ee4 //, eeH5Fu65. = ee4 " & H5Fu65 qe4Ff4H5Fu65.
& // 54H~H5Fu65 eeH5Fu65 + %
-
5/24/2018 Linux.pdf
53/85
& &: /9P" '!" i. * ^ pid)*
printk(KE!"!$% &taskinob E q Mun&' (uB=)task:>state)*
K! !,+ !,+ '"",+ (" +
& 465iqfee & &: "9 & unHiznf oGnz. Z &
H54F56Gf fn6Gf (" H54F5454 fn454 ("
,+ H54F5F~ F~ p/!p. * (" & & end"code q a"mm:>start"code))*
>3
-
5/24/2018 Linux.pdf
54/85
K! '"",+ &" + & ee4 &
465iqfee & " & unHiznf oGnz. Z & qeH54F5 qefn.
'" &"/9 & H5Fu65 qe4Ff4H5Fu65 P "/
&/ &:. =" &" '! & ee4 ?54H~Q
465iqfeeQee4C.
struct vm"area"struct Lvma*
vma D task:>active"mm:>mmap*
Y& P &" qeH54F5 qefn "T &' !'
&"/9 qe4.
printk(KE!"!$% &taskinob 1E1%0 E 77E q
4xM4@,n&' (uB=)vma:>vm"start)*
printk(KE!"!$% &taskinob E!7 1E1%0 E 77E q
4xM4@,n&' (uB=)vma:>vm"end)*
&" '"" &:" ,!,
&
-
5/24/2018 Linux.pdf
55/85
I" ' &99 %1 / TP/9 &/
p54H~in2Gcp. "/ +
-
5/24/2018 Linux.pdf
56/85
=T
-
5/24/2018 Linux.pdf
57/85
(. k fn5Fg & 7
-
5/24/2018 Linux.pdf
58/85
-
5/24/2018 Linux.pdf
59/85
h
-
5/24/2018 Linux.pdf
60/85
|^SQ: ?" fn5Fg4H54ofC +^SQ
-
5/24/2018 Linux.pdf
61/85
5 : ;
-
5/24/2018 Linux.pdf
62/85
' / & & ". ] ,! ^
-
5/24/2018 Linux.pdf
63/85
E/: &" /' /& i"uid D ret:>i"Cid D 4*
ret:>i"6lksiAe D -5E"99HE"OE*
ret:>i"6locks D 4*
ret:>i"atime D ret:>i"mtime D ret:>i"ctime D 98E!"1E*
= ieGf l & /& k/ inGf. 0" '!
& & " &"
-
5/24/2018 Linux.pdf
64/85
9
= '(/' "/
-
5/24/2018 Linux.pdf
65/85
(struct ile"system"type Lst' int laCs' char Ldevname' void Ldata' struct
vsmount Lmnt)
{
return Cet"s6"sinCle(st' laCs' data' lins"ill"super' mnt)*
+
E/: zf5HHinzof?C '
-
5/24/2018 Linux.pdf
66/85
struct dentry Lroot"dentry*
root D lins"make"inode (s6' "$7 j 4JPP)*
root:>i"op D simple"dir"inode"operations*
root:>i"op D simple"dir"operations*
* & ( ( +" ' ( ,
k inGf &"P9 s"root D root"dentry*
lins"create"iles(s6' root"dentry)*
= HFGG5 l /' k fn5Fg &9P
(. = ' ( (
-
5/24/2018 Linux.pdf
67/85
oin2H6Ff45f2iof?C &" ! &" k /&
'", k fn5Fg ?(C " '
-
5/24/2018 Linux.pdf
68/85
-
5/24/2018 Linux.pdf
69/85
* ': &: /&" +" ' k
//, HufFGfF45iGnH p&,p +",
-
5/24/2018 Linux.pdf
70/85
{
ilp:>private"data D inode:>u.Ceneric"ip*
return 4*
+
E/: ! &" &/! /' k inGf
', k" 2iof "" 2io. = Fiq45f454 //, 2iof
T &'/ ".
-
5/24/2018 Linux.pdf
71/85
atomic"inc(counter)*
else
v :D ?*
K! !! '&, / 5e aOWBU_
". * &/!S + &"/9 ofn.
#deine 1-OE =4
char tmp_1-OE`*
int len*
int len D snprint(tmp' 1-OE' &Mdn&' v)*
m '! "P S , +" , '
-
5/24/2018 Linux.pdf
72/85
E/: oin2HNFi5f2iof?C '/ &:9 '&
-
5/24/2018 Linux.pdf
73/85
!" " 1). ! &' ! &'/
" `#LL.
-
5/24/2018 Linux.pdf
74/85
"/ "(/ &' JFG6J !, '"
&'" &(""".
E " FG62H '
-
5/24/2018 Linux.pdf
75/85
j &/9
-
5/24/2018 Linux.pdf
76/85
' ( &+ &"P9
-
5/24/2018 Linux.pdf
77/85
' "!/9 ,/ "T &"P9
-
5/24/2018 Linux.pdf
78/85
E/: FG6Ff42GG?C ( $%%"3E!)
len D $%%"3E!*
else
len D count*
i(copy"rom"user(6"data:>value' 6uer' len))
return :E$83*
7$
-
5/24/2018 Linux.pdf
79/85
6"data:>value_len` D 4*
return len*
+
* + oner D H"1%783E*
;iies"ile:>oner D H"1%783E*
symlink:>oner D H"1%783E*
oo"ile:>oner D H"1%783E*
= '(/' "/ & P
-
5/24/2018 Linux.pdf
80/85
remove"proc"entry(&seconds&' example"dir)*
remove"proc"entry(&;iies=&' example"dir)*
remove"proc"entry(&;iies&' example"dir)*
remove"proc"entry(10KE!E3"E!0' !833)*
=, "/ +
-
5/24/2018 Linux.pdf
81/85
,'". j, & '! &", @AB ",
/9P //, ,+. ] &" , &' '
/9
-
5/24/2018 Linux.pdf
82/85
O>,$%
& & & ,+ !
// ,+ (" &:&+ , '
-
5/24/2018 Linux.pdf
83/85
8 "T , &' "! & /
,S+ /!,+ ' '/!9P+ &:, ",.
'9! &" 8 c p* ( !, ""/
/! & &("", l +, '"". ;+,
&("", /& l &'/ "p.
$3
-
5/24/2018 Linux.pdf
84/85
/%+ %+/0#$$ %4
1. XGFf5 . XFf45inz Linux qiF5u4o 2iofHgH5feH [Z, /\ J .
XGFf5. l Linux Mff~og `fNH. l 55cJJoNn.nf5JrF5i6ofHJ133%>J ?%% . %))%C.
%. B4oe4n W. . af Linux fFnfo OGuof WFGzF4eeinz yuif [Z,
/\ J W. . B4oe4n VuFi4n O. WGefF4n5 w. l af Linux tG6uefn545iGn
WFGf65. l 55cJJ5o.GFzJLtWJo~ezJ%.DJ5eoJinfx.5eo. ?31 . %))>C.
3. j'/ ]. =, '( j' [Z, /\ J
]. j'/. l XUaUa. l 55cJJ6i5~i5.FuJ4F5i6ofHJ1$J. ?17 C.
-. K m. =/S :/ [Y\ J K m. JJ |. l %))>
(. l h. l . 1)-Q1)D.
>. K m. Y9( Linux [Y\ J K m. JJ |. l %))> (. l
1). l . 1)%Q1)-.
D. ; ]. =("" Linux / [Z, /\ J ].
;. l /:. l 55cJJoinux6fn5fF.FuJoiJGG~HJoJ ?- . %))DC.
7. I! *. , "/ [Y\ J *. I! JJ
", ". l %))3 (. l 1). l . 3)Q37.
$. I" . . ; &: ", Linux [Z,
/\ J . . I". l /:. l
55cJJNNN.oinux6fn5fF.FuJoiJiH5GFgJoQ)).5eo. ? %))>C.
h. I" . . , , Linux [Z, /\ J .
. I". l ; l 0 ;
-
5/24/2018 Linux.pdf
85/85
1%.S . =:, Linux [Y\ J . S JJ ",
". l %))- (. l D. l . -%Q>1.
13.S . ' ( "( ,' Linux
[Z, /\ J . S. l /: l
55cJJNNN.oinux6fn5fF.FuJoiJ4F5i6ofHJFGzF4eeinzJnfNH64oo.5eo ?31 "
%))>C.
1-.! . =("" Linux. =. l D>D .
17.Y/" Z. &:, ",. 8' ': [Y\ J
Z. Y/" . /+. l =.c = %))D. l >7D .
1$.|" 8. Linuxb " b [Y\ J 8. |" JJ Xi Linux. l %))> (. l
1. l . >DQD).
$>