Linux Kernel kbuild ϵͳ
ÔÎÄÁ´½Ó£º
http://blog.chinaunix.net/u3/94283
´ÓÒÔÉÏÀý×ÓÖпÉÒÔ¿´µ½£¬Äں˵ıàÒëϵͳkbuildÊǸöºÜÅÓ´óµÄϵͳ¡£µ«ÊÇ£¬ËüËùʹÓõÄmakeºÍÎÒÃÇÆ½Ê±ÓõÄmakeÊÇһģһÑùµÄ¡£kbuildÖ»ÊÇͨ
¹ýÔ¤¶¨ÒåһЩ±äÁ¿£¨obj-m,obj-yµÈµÈ£©ºÍÄ¿±ê(bzImage
,menuconfigµÈµÈ)£¬Ê¹Äں˵ıàÒëºÍÀ©Õ¹±äµÃÊ®·Ö·½±ã¡£ÎÒÃDz»·ÁyyÒ»ÏÂkbuildµÄһЩ¹¦ÄÜ£º
1.¿¼Âǵ½Linux
Äܹ»·½±ãµØÒÆÖ²µ½¸÷¸öÓ²¼þƽ̨£¬kbuildÒ²±ØÐëºÜÈÝÒ×Ìí¼Ó¶Ôij¸öÐÂµÄÆ½Ì¨µÄÖ§³Ö£¬Í¬Ê±ÉϲãµÄMakefile²»ÐèÒª×ö´óµÄ¸Ä¶¯¡£
2.LinuxÏÂÓÐÖÚ¶àÇý¶¯É豸¡£ËüÃǵÄMakefileÏ£ÍûÄܹ»¾¡¿ÉÄܼò½à¡£¼ò½àµ½Ö»ÒªÖ¸¶¨Òª±àÒëµÄ.oÎļþ¾ÍÐС££¨Õâ·½Ãækbuild¶¨ÒåÁ˺ܶàÓÐÓÃ
µÄ±äÁ¿Èçobj-m obj-y,-objsµÈµÈ£¬Óû§Ö»ÒªÎªÕâЩ±äÁ¿¸³Öµ£¬kbuild»á×Ô¶¯°Ñ´úÂë±àÒëµ½Äں˻òÕß±àÒë³ÉÄ£¿é£©
3.ÒªÓз½±ãµÄ¿É¶¨ÖÆÐÔ¡£ºÜ¶à²ÎÊý¿ÉÒÔÈÃÓû§Ö¸¶¨¡£Õâ·½ÃækbuildÒ²ÌṩÁË´óÁ¿µÄ±äÁ¿ÈçEXTRA_CFLAGS£¬Óû§Èç¹ûÏëinclude×Ô¼ºµÄÍ·Îļþ»òÕß¼ÓÆäËü±àÒë²ÎÊý£¬Ö»ÒªÉèÖÃÒ»ÏÂEXTRA_CFLAGS¾Í¿ÉÒÔ¡£
4.ÓÐÄÜÁ¦µÝ¹éµØµ÷ÓÃMakefile¡£ÒòΪÄÚºËÊÇÒ»¸öÅÓ´óµÄÈí¼þ¡£ËüµÄÔ´´úÂëµÄĿ¼²ã´ÎºÜÉî¡£ÒªÌṩһÖÖ¼ò½àµÄ»úÖÆ£¬Ê¹ÉϲãµÄMakefileÄÜ·½±ãµØµ÷ÓÃϲãµÄMakefile¡£ÔÚÕâ¹ý³ÌÖУ¬ÃæÏò¶ÔÏóµÄ˼ÏëÒ²ÐíÖµµÃ½è¼ø¡£
5.ÔÚÅäÖÃÄÚºËʱ£¬ÒªÌṩÓѺõÄÓû§½çÃæ¡£Õâ·½ÃækbuildÒ²ÌṩÁ˲»ÉÙ¹¤¾ß£¬Èç³£ÓõÄmake menuconfigµÈµÈ¡£
ÎÒÃÇÍêÈ«¿ÉÒÔ°ÑkbuildÏëÏó³ÉÒ»¸öÀà¿â£¬ËüΪÆÕͨµÄÄں˿ª·¢ÈËÔ±ÌṩÁ˽ӿڣ¨obj-m obj-y EXTRA_CFLAGSµÈµÈ£©£¬ÎªÓû§ÌṩÁ˶¨Öƹ¤¾ß£¨make menuconfig£©
Èç¹ûÏëÁ˽âkbuildµÄʹÓ÷½·¨£¬¿ÉÒÔ²ÎÔÄÔ´´úÂë×Ô´øµÄÎĵµ£º
Documentation/kbuild/makefiles.txt
Documentation/kbuild/modules.txt
Ò»°ãÇé¿öÏÂÊDz»ÐèÒªÖªµÀ¾ßÌåµÄ±àÒë˳ÐòµÄ¡£³ýÁËÔÚ¸ö±ðÇé¿öÏ£¬Èçdo_initcalls()Öоͺͺ¯ÊýÔÚ.initcall.init
sectionÖеÄ˳ÐòÓйء£²»¹ýϲ»¶Ñ°¸ù¾¿µ×µÄÎÒ£¬»¹ÊÇÏëÀíһϱàÒëÄÚºËʱ¼¸¸ö³£ÓõÄÃüÁÈçmake bzImage,make
menuconfigµÈµÈ£¬½ø¶øÁ˽âkbuildµÄ¼Ü¹¹¡£ÏÈ¿´make bzImage°É¡£
ËüµÄ´ó¸ÅÂöÂçÊÇÔõÑùµÄÄØ£¿¿ÉÒÔÓÃÒÔÏÂÃüÁî²é¿´¡£
make -n bzImage
Èç¹ûÏÓÄÚÈÝÌ«¶à£¬¿ÉÒÔ¹ýÂ˵ô¶àÓàµÄÐÅÏ¢£º
make -n bzImage | grep “make -f”
¿ÉÒԲµ½£º
ÏÈ×÷һЩ׼±¸¹¤×÷
make -f scripts/Makefile.build obj=scripts/basic
È»ºóÒÀ´ÎµÝ¹éµØµ÷ÓÃÔ´´úÂëÖеÄMakefile
make -f scripts/Makefile.build obj=init
make -f scr
Ïà¹ØÎĵµ£º
5.3.2 É豸ÀàÐÍ·ÖÀà
×ÝÀÀlinux/driversĿ¼£¬´ó¸Å»¹ÓÐ35¸öÒÔÉϵÄ×ÓĿ¼£¬Ã¿¸ö×ÓĿ¼»ù±¾ÉϾʹú±íÁËÒ»ÖÖÉ豸Çý¶¯£¬ÓÐatm¡¢block¡¢char¡¢misc¡¢input¡¢net¡¢usb¡¢sound¡¢videoµÈ¡£ÕâÀïÖ»ÃèÊöÔÚǶÈëʽϵͳÀïÃæÓõÃ×îΪ¹ã·ºµÄ3ÖÖÉ豸¡£
1£®×Ö·ûÉ豸£¨char device£©
×Ö·ûÉ豸ÊÇLinux×î¼òµ¥µÄÉ豸£¬¿ÉÒÔÏñÎļþÒ»Ñù·ÃÎÊ¡£ ......
¹¦ÄÜ˵Ã÷£º¼ì²âÖ÷»ú¡£
Óï¡¡¡¡·¨£ºping
[-dfnqrRv][-c<Íê³É´ÎÊý>][-i<¼ä¸ôÃëÊý>][-I<ÍøÂç½çÃæ>][-l<ǰÖÃÔØ
Èë>][-p<·¶±¾Ñùʽ>][-s<Êý¾Ý°ü´óС>][-t<´æ»îÊýÖµ>][Ö÷»úÃû³Æ»òIPµØÖ·]
²¹³ä˵Ã÷£ºÖ´ÐÐpingÖ¸Áî»áʹÓÃICMP´«ÊäÐÒ飬·¢³öÒªÇó»ØÓ¦µÄ ......
1¡¢Éý¼¶ÏµÍ³
yum check-update
yum update
2¡¢°²×°Ò»Ð©³£ÓõŤ¾ß
yum install ntp iptraf sysstat screen subversion wget bzip2 nfs-utils vim-common
3¡¢ÉèÖÃÿÌì×Ô¶¯ºË׼ʱ¼ä
# crontab -e
0 * * * * /usr/sbin/ntpdate 210.72.145.44
:wq
4¡¢°²×°Ò»Ð©¿ª·¢°ü
# yum install make gcc gcc-c++ libjpeg-devel ......
// Linux Device Driver Template/Skeleton with mmap
// Kernel Module
#include <linux/module.h>
#include <linux/init.h>
#include <linux/version.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#inclu ......
¹¦ÄÜÃèÊö£º
»ñȡһЩÎļþÏà¹ØµÄÐÅÏ¢¡£
Ó÷¨£º
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *path, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *path, struct stat *buf);
²ÎÊý£º
path£ºÎļþ ......