Разработка модулей ядра ОС linux.pdf

Upload: dez1rex

Post on 14-Oct-2015

190 views

Category:

Documents


3 download

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).

    $>