Book Note: Linux Device Driver Dos and Don'ts
Book Note: Linux Device Driver Dos and Don'ts
http://janitor.kernelnewbies.org/docs/driver-howto.html
what a hardened (robust) device
driver should mean and how it should be implemented and measured.
1.3 Robust device drivers
-Follows the Linux CodingStyle.
-Efficient in managing faults and handling, reporting and recovering from errors.
(Also not panic() happy.)
-Complies with latest Linux kernel APIs and interfaces.
(Uses the new device driver model, kobjects and sysfs.)
-Properly manages resources (memory, semaphores, interrupts, etc.).
-Uses kernel-provided "C" I/O functions instead of assembly code.
2.0 Where do I start?
3.0 OK, I'm ready...
3.1 Efficient error handling, reporting and recovery:
1)<printk()>
you should always check printk() calls to include appropriate KERN_* constant.
2)<goto>
3) <Enumerated return codes> <return EWHATEVER should be return -EWHATEVER>
4) <No need to panic()>
Rather, the device driver should try to recover, re-initialize, or finally simply
return an appropriate error code, release allocated resources, log a message and
exit gracefully.
3.2.1 Module interface changes
<Initialization and cleanup>
<Module Reference Count macros>
You no longer need to adjust your own module reference count
-Reference counting from other modules:
;A Golden Rule: if you are calling through a function pointer into a (different) module,
you must hold a reference to that module.
Otherwise you risk sleeping in the module while it is unloaded.
You can get a reference to a module by using:
try_module_get(owner);
and you don't have to check if OWNER != NULL, this is done by try_module_g
Ïà¹ØÎĵµ£º
trap [-lp] [arg] [sigspec ...]
µ± shell ÊÕµ½ÐźŠsigspec ʱ£¬ÃüÁî arg ½«±»¶ÁÈ¡²¢Ö´ÐС£Èç¹ûûÓиø³ö arg »òÕ߸ø³öµÄÊÇ -,
ËùÓÐÖ¸¶¨µÄÐźű»ÉèÖÃΪËüÃǵijõʼֵ (½øÈë shell ʱËüÃǵÄÖµ)¡£Èç¹û arg ÊÇ¿Õ×Ö·û´®£¬ sigspec Ö¸¶¨µÄÐźű»
shell ºÍËüÆô¶¯µÄÃüÁîºöÂÔ¡£Èç¹û arg ²»´æÔÚ£¬²¢ÇÒ¸ø³öÁË -p ÄÇôÓëÿ¸ö sigspec ......
Linux·þÎñÆ÷ÔÚÆô¶¯Ê±ÐèÒªÆô¶¯ºÜ¶àϵͳ·þÎñ£¬ËüÃÇÏò±¾µØºÍÍøÂçÓû§ÌṩÁËLinuxµÄϵͳ¹¦Äܽӿڣ¬Ö±½ÓÃæÏòÓ¦ÓóÌÐòºÍÓû§¡£ÌṩÕâЩ·þÎñµÄ³ÌÐòÊÇÓÉÔËÐÐÔÚºǫ́µÄÊØ»¤½ø³Ì£¨daemons£©À´Ö´Ðеġ£ÊØ»¤½ø³ÌÊÇÉú´æÆÚ³¤µÄÒ»ÖÖ½ø³Ì£¬ËüÃǶÀÁ¢ÓÚ¿ØÖÆÖն˲¢ÇÒÖÜÆÚÐÔµÄÖ´ÐÐijÖÖÈÎÎñ»òµÈ´ý´¦ÀíijЩ·¢ÉúµÄÊ ......
ǰÑÔ£º±¾ÎÄ»·¾³»ùÓÚRHEL 5¡£
ÔÚÓÐÏ޵Ĵø¿íÌõ¼þÏ£¬ÎÒÃÇ×ÔÑÔÍùÍùÒª¶ÔÕ¼Óôø¿í¹ý´óµÄ³Ì¶ÈÏÞËÙ£¬ÀýÈ磬ֻÔÊÐíÆäÕ¼ÓÃ×î¸ß1MbpsµÄ´ø¿í£¬»òÕßʹÆäÏÂÔØËٶȲ»³¬¹ý200Kbps£¬µÈµÈ¡£Òò´Ë£¬ÎÒÃǾÍÐèÒªÁ÷Á¿¿ØÖÆ£¨Traffic Control£©¹¤¾ß¡£
ÎÒÔÚÍøÉÏÕÒÁËһϣ¬Á˽âÁ˼¸¸ö£ºtrickle£¬pyshaper£¬ÒÔ¼°LINUXÄÚºË×Ô´øµÄtc¡£
£¨1£©tr ......
linux limits.conf ÅäÖÃ
¡¡¡¡limits.conf Îļþʵ¼ÊÊÇ Linux PAM£¨²åÈëʽÈÏ֤ģ¿é£¬Pluggable Authentication Modules£©ÖÐ pam_limits.so µÄÅäÖÃÎļþ£¬¶øÇÒÖ»Õë¶ÔÓÚµ¥¸ö»á»°¡£
¡¡¡¡limits.confµÄ¸ñʽÈçÏ£º
¡¡¡¡username|@groupname type resource limit
¡¡¡¡username|@groupname£ºÉèÖÃÐèÒª±»ÏÞÖÆµÄÓû§Ãû£¬×éÃûÇ°Ãæ¼Ó@º ......