[26444] 2021-06-01_Linux模块文件如何编译到内核和独立编译成模块?

文档创建者:s7ckTeam
浏览次数:0
最后更新:2025-01-19
2021-06-01_Linux模块文件如何编译到内核和独立编译成模块? L i n u x L i n u x   2 0 2 1 - 0 6 - 0 1 L i n u x   L i n u x h t t p s : / / b l o g . c s d n . n e t / d a o c a o k a f e i / a r t i c l e / d e t a i l s / 1 1 5 4 7 2 8 6 2 k o 1 .   L i n u x 使 使 M a k e f i l e L i n u x r e a d m e L i n u x r e a d m e X 8 6 M a k e f i l e a r c h / a r c h / i 3 8 6 a r c h / a r m a r c h / p p c c r y p t o A E S S H A C R C d r i v e r s / d r i v e r s / c h a r d r i v e r s / b l o c k d o c u m e n t a t i o n / f s / f s / e x t 3 f s / j f f s 2 i n c l u d e / i n c l u d e / a s m i n c l u d e / a s m - a r m i n c l u d e / a s m - i 3 8 6 i n c l u d e / l i n u x L i n u x i n i t / L i n u x m a i n . c i p c / k e r n e l / L i n u x l i b / z l i b c r c 3 2 m m / n e t / s o u n d s c r i p t s / 使 u s r / L i n u x   . L i n u x
2 .   1 .   m a k e   m r p r o p e r :   使 2 .   ( ) 3 .   4 .   5 .   6 .   3 .   L i n u x S D K b u i l r o o t 使 便 0     l i n u x - u b u n t u 1 6 . 0 4 使 a r m - n o n e - l i n u x - g n u e a b i - g c c a )   m a k e   x x x _ d e c o n f i g b )   c p   a r c h / a r m / c o n f i g s / x x _ d e c o n f i g     . c o n f i g m a k e   x x x x c o n f i g     m a k e   x c o n f i g   (   q t ) m a k e   m e n u c o n f i g   (   l i b n c u r s e s ) s u d o   a p t - g e t   i n s t a l l   l i b n c u r s e s 5 - d e v m a k e   c o n f i g   ( ) m a k e   u I m a g e   - - -     / a r c h / a r m / b o o t / u I m a g e m a k e   d t b s   - - -     / a r c h / a r m / b o o t / d t b / x x x x x x . d t b m a k e   m o d u l e s   - - - M . k o )    
1 h t t p s : / / m i r r o r s . e d g e . k e r n e l . o r g / p u b / l i n u x / k e r n e l / L i n u x - 3 . 1 4 / h o m e / p e n g   h t t p s : / / m i r r o r s . e d g e . k e r n e l . o r g / p u b / l i n u x / k e r n e l / v 3 . x / l i n u x - 3 . 1 4 . 1 0 . t a r . x z 2 M a k e f i l e A R C H C R O S S _ C O M P I L E   $   t a r     x v f     l i n u x - 3 . 1 4 . t a r . x z $   c d     l i n u x - 3 . 1 4       $   v i m   M a k e f i l e
4 . c o n f i g s o c e x y n o s   . / a r c h / a r m / c o n f i g s / e x y n o s _ d e f c o n f i g . c o n f i g A R C H     ? =   $ ( S U B A R C H ) C R O S S _ C O M P I L E   ? =   $ ( C O N F I G _ C R O S S _ C O M P I L E : " % " = % ) A R C H     ? =   a r m C R O S S _ C O M P I L E   ? =   a r m - n o n e - l i n u x - g n u e a b i - $   m a k e     e x y n o s _ d e f c o n f i g
e x y n o s 5 1 . 5 X - w i n d o w $   m a k e   m e n u c o n f i g
1 .   - - - > 2 .   [ ]   [ ]   * 3 .   < > < > 3 4 .   ( )     *     M
使 m a k e   x c o n f i g 使 使 m a k e   m e n u c o n f i g 使 L i n u x 使 使 使 6 u I m a g e a r c h / a r m / b o o t u I m a g e 7 L i n u x u b o o t u b o o t 4 .   1 .   , k o h e l l o . c r o o t @ u b u n t u : / h o m e / p e n g / l i n u x - 3 . 1 4 #   m a k e   u I m a g e # i n c l u d e   < l i n u x / i n i t . h > # i n c l u d e   < l i n u x / m o d u l e . h > # i n c l u d e   < l i n u x / k d e v _ t . h > # i n c l u d e   < l i n u x / f s . h > # i n c l u d e   < l i n u x / c d e v . h > / / # i n c l u d e   < i o / u a c c e s s . h > # i n c l u d e   < l i n u x / d e v i c e . h > # i n c l u d e   < a s m / i o . h >
# i n c l u d e   < a s m / i o . h > # i n c l u d e   < a s m / u a c c e s s . h > s t a t i c   i n t   m a j o r   =   2 3 7 ; s t a t i c   i n t   m i n o r   =   0 ; s t a t i c   d e v _ t   d e v n o ; s t r u c t   d e v i c e   * c l a s s _ d e v   =   N U L L ; s t r u c t   c l a s s   * c l s ; s t a t i c   i n t   h e l l o _ o p e n   ( s t r u c t   i n o d e   * i n o d e ,   s t r u c t   f i l e   * f i l e p ) {   p r i n t k ( " h e l l o _ o p e n ( ) n " ) ;   r e t u r n   0 ; } s t a t i c   i n t   h e l l o _ r e l e a s e   ( s t r u c t   i n o d e   * i n o d e ,   s t r u c t   f i l e   * f i l e p ) {   p r i n t k ( " h e l l o _ r e l e a s e ( ) n " ) ;   r e t u r n   0 ; } # d e f i n e   K M A X _ L E N   3 2 c h a r   k b u f [ K M A X _ L E N + 1 ]   =   " k e r n e l " ; / / r e a d ( f d , b u f f , 4 0 ) ; s t a t i c   s s i z e _ t   h e l l o _ r e a d   ( s t r u c t   f i l e   * f i l e p ,   c h a r   _ _ u s e r   * b u f ,   s i z e _ t   s i z e ,   l o f f _ t   * p o s ) {   i n t   e r r o r ;     i f ( s i z e   >   s t r l e n ( k b u f ) )   {     s i z e   =   s t r l e n ( k b u f ) ;   }   i f ( c o p y _ t o _ u s e r ( b u f , k b u f ,   s i z e ) )   {     e r r o r   =   - E F A U L T ;     r e t u r n   e r r o r ;   }
  r e t u r n   s i z e ; } / / w r i t e ( f d , b u f f , 4 0 ) ; s t a t i c   s s i z e _ t   h e l l o _ w r i t e   ( s t r u c t   f i l e   * f i l e p ,   c o n s t   c h a r   _ _ u s e r   * b u f ,   s i z e _ t   s i z e ,   l o f f _ t   * p o s ) {   i n t   e r r o r ;   i f ( s i z e   >   K M A X _ L E N )   {     s i z e   =   K M A X _ L E N ;   }   m e m s e t ( k b u f , 0 , s i z e o f ( k b u f ) ) ;   i f ( c o p y _ f r o m _ u s e r ( k b u f ,   b u f ,   s i z e ) )   {     e r r o r   =   - E F A U L T ;     r e t u r n   e r r o r ;   }   p r i n t k ( " % s n " , k b u f ) ;   r e t u r n   s i z e ; } s t a t i c   s t r u c t   f i l e _ o p e r a t i o n s   h e l l o _ o p s   =   {   . o p e n   =   h e l l o _ o p e n ,   . r e l e a s e   =   h e l l o _ r e l e a s e ,   . r e a d   =   h e l l o _ r e a d ,   . w r i t e   =   h e l l o _ w r i t e , } ; s t a t i c   i n t   h e l l o _ i n i t ( v o i d ) {   i n t   r e s u l t ;     p r i n t k ( " h e l l o _ i n i t   n " ) ;   r e s u l t   =   r e g i s t e r _ c h r d e v (   m a j o r ,   " h e l l o " ,   & h e l l o _ o p s ) ;   i f ( r e s u l t   <   0 )   {     p r i n t k ( " r e g i s t e r _ c h r d e v   f a i l   n " ) ;     r e t u r n   r e s u l t ;   }   c l s   =   c l a s s _ c r e a t e ( T H I S _ M O D U L E ,   " h e l l o c l s " ) ;
M a k e f i l e   c l s   =   c l a s s _ c r e a t e ( T H I S _ M O D U L E ,   " h e l l o c l s " ) ;   i f   ( I S _ E R R ( c l s ) )   {     p r i n t k ( K E R N _ E R R   " c l a s s _ c r e a t e ( )   f a i l e d   f o r   c l s n " ) ;     r e s u l t   =   P T R _ E R R ( c l s ) ;     g o t o   o u t _ e r r _ 1 ;   }   d e v n o   =   M K D E V ( m a j o r ,   m i n o r ) ;     c l a s s _ d e v   =   d e v i c e _ c r e a t e ( c l s ,   N U L L ,   d e v n o ,   N U L L ,   " h e l l o d e v " ) ;   i f   ( I S _ E R R ( c l a s s _ d e v ) )   {     r e s u l t   =   P T R _ E R R ( c l a s s _ d e v ) ;     g o t o   o u t _ e r r _ 2 ;   }     r e t u r n   0 ; o u t _ e r r _ 2 :   c l a s s _ d e s t r o y ( c l s ) ; o u t _ e r r _ 1 :   u n r e g i s t e r _ c h r d e v ( m a j o r , " h e l l o " ) ;   r e t u r n     r e s u l t ; } s t a t i c   v o i d   h e l l o _ e x i t ( v o i d ) {   p r i n t k ( " h e l l o _ e x i t   n " ) ;   d e v i c e _ d e s t r o y ( c l s ,   d e v n o ) ;   c l a s s _ d e s t r o y ( c l s ) ;   u n r e g i s t e r _ c h r d e v ( m a j o r , " h e l l o " ) ;   r e t u r n ; } m o d u l e _ i n i t ( h e l l o _ i n i t ) ; m o d u l e _ e x i t ( h e l l o _ e x i t ) ; M O D U L E _ L I C E N S E ( " G P L " ) ; / / p r o c / d e v i c e s
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则