Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

Linux É豸Çý¶¯³ÌÐò½ø½×£¨0£©

ºÜ¾ÃûÓÐд¼¼Êõ²©ÎÄÁË£¬´ÓÕâÀ↑ʼÎÒµÄÑо¿ÉúÉúÑÄ£¬×ªÑÛ¾ÍÒªÔÚÖ°³¡ÉÏÑø¼Òºý¿Ú£¬Éú»îÕæµÄ²»ÈÝÒ×£¬ÐҺû¹Óм¼ÊõÏà°éΪÎé¡£
ÓÉÓÚ¹¤×÷µÄ¹ØÏµ£¬ÖÕÓÚ½Ó´¥µ½linuxÍøÂçºÍkernelµÄ±à³Ì£¬×ÜÌåÀ´Ëµ×ÜÊÇÒ»¸öºÃµÄÆõ»ú¡£ÈÃÎÒÄܹ»ÉîÈë²Ù×÷ϵͳÄںˡ£×ö¹ýÒ»¶Îʱ¼äµÄÓû§³ÌÐòµÄ¿ª·¢£¬×ÜÊÇÔÚWindowsƽ̨ÉÏ£¬ÖÕÓÚÓлú»áÔÚlinuxÉÏ×öµã¶«Î÷£¬»¹ÊǺÜÐ˷ܵġ£
Ê×ÏÈÊÇÒ»¸öHello WorldµÄÄں˳ÌÐò£¬È»ºó¾ÍÊÇÒ»´ó¶Ñ±àÒëµÄÎÊÌ⣬ÓÉÓÚûÓнӴ¥¹ýLinuxËùÒÔ»¨·ÑÁ˺ܶàʱ¼äÔÚÕâÉÏÃæ¡£
1£© hellokernel.c ÎҵıàÒë»·¾³ÊÇÔÚÐéÄâµÄLinux Redhat 5.0 ÉϱàÒëµÄ
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL")£» //Õâ¸öºêµÄÒâ˼ÎÒ»¹ÊDz»Ì«Ã÷°×£¬Ö±½Ó³­Á˹ýÀ´
static int hello_init(void)
{
    printk(KERN_ALERT"Hello,world\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT"Goodby,cruel world\n");
}
module_init(hello_init);  //µ±ÄÚºËÄ£¿é±»×°ÔصÄʱºòµ÷ÓÃhello_initº¯Êý
module_exit(hello_exit); //µ±ÄÚºËÄ£¿é±»Ð¶ÔصÄʱºòµ÷ÓÃhello_exitº¯Êý
2£©Ô´´úÂë×¼±¸ºÃÁËÖ®ºóÏÂÃæ¾ÍÊDZàÒëµÄÎÊÌâ
step1:  ×¼±¸ºÃlinuxÄÚºËÔ´´úÂ룬עÒâ°æ±¾ºÅÒªÓëÖ÷»úÒ»Ö£¬ÕâÀïÒòΪÎÒÖ±½ÓÔÚÖ÷»ú£¨Linux»úÆ÷£©ÉϱàÒ룬ËùÒÔ²»´æÔÚ½»²æ±àÒëµÄÎÊÌâ¡£²é¿´linux»úÆ÷µÄÄں˰汾ºÅÓкܶàÃüÁÎÒÓõÄÊÇuname -r
[root@localhost ~]# uname -r
2.6.18-128.el5
¿´µ½Äں˰汾֮ºó¾Í¿ÉÒÔÔÚ¹ÙÍøÉÏÏÂÔØ¶ÔÓ¦°æ±¾µÄÄںˡ£http://www.kernel.org/pub/linux/kernel/v2.6/ÔÚÕâÀïÕÒµ½linux-2.6.18.tar.bz2 Õâ¸ö°æ±¾£¬È»ºó½âѹµ½/usr/src/Ŀ¼Ï¡£½âѹÃüÁîÊÇtar -xvf linux-2.6.18.tar.bz2¾Í¿ÉÒÔÁË¡£
step2:  ×¼±¸¹¤×÷×öºÃÖ®ºóÊ×ÏÈÊDZàÒëÄںˣ¬Èç¹ûÄãÏÂÔØµÄÄں˰汾ºÍÄãµÄÖ÷»ú°æ±¾ÊÇÒ»Ò»¶ÔÓ¦µÄ£¬ÄÇô±àÒëÆðÀ´ºÜ¼òµ¥µÄ£¬Ò»°ãûÓÐʲôÎÊÌâµÄ£¬Ö÷Òª¾ÍÊǼ¸¸ömakeÃüÁ
make oldconfig
make prepare
make scripts
step 3: ÏÂÃæ¾ÍÊÇÔÚhellokernel.cµÄĿ¼Ï±àдMakefileÎļþ£¬×¢ÒâMakefileµÄµÚÒ»×Öĸ±ØÐë´óд£¬ÎÒ¾ÍÊÇÔÚÕâÀï·¸´í£¬²éÁ˰ëÌìû²é³öÎÊÌâ¡£MakefileµÄ±àд¶ÔÓÚÕâ¸öÀý×Ӻܼòµ¥£¬µ«ÊÇÈç¹û¸´ÔÓµÄÄÚºËÄ£¿éµÄ¿ª·¢»¹ÊÇÒªºÃºÃѧϰÔõô±àдµÄ¡£
Æäʵ¾ÍÊǼòµ¥µÄ¼¸¾ä»°¾ÍokÁË£º
obj-m := hellokernel.o //Ä¿±êÄ£¿éµÄ±àÒëÀ´×ÔÓÚhellokernel.oµÄÎļþ, hellokerne


Ïà¹ØÎĵµ£º

linuxϵͳʱ¼ä

  ·¢ÏÖ·þÎñÆ÷ϵͳʱ¼äºÍ±ê׼ʱ¼ä²îÁË10¶à·ÖÖÓ,È»ºóÁãµãµÄʱ¼äµ÷ÕûÁËÏÂʱ¼ä¡£¹ýÁ˲¶àÒ»¸öÀñ°Ý·¢Õ¹Êý¾Ý¿âÖмǼµÄʱ¼ä»¹ÊDz»¶Ô£¬ÈçÊÇÓüӰàµ÷ÕûÁËÏÂʱ¼ä¡£¹ýÁË2ÌìÒ»¿´»¹ÊÇʱ¼ä²»¶Ô£¬Ò»²é²Å·¢ÏÖ£º 
   »úÆ÷ÀïÓÐÁ½¸öʱÖÓ¡£Ó²¼þʱÖÓ´Ó¸ù±¾ÉϽ²ÊÇCMOSʱÖÓ£»¶øÏµÍ³Ê±ÖÓÊÇÓÉÄÚºËά»¤µÄ£¬ËüÊÇ´Ó1969ÄêÄ©£¨¼ ......

Linux GCC makeÎļþµÄд·¨2

ÎļþÔÚÁ½¸öÎļþ¼Ð£º
inc/hello.h
main/hello.c, main.c, Makefile
ÎļþÄÚÈÝ£º
hello.h
void hello(char name[]);

hello.c
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}

main.c
#include <stdio.h>
#include "../inc/hello.h"
// The second
int main( ......

linuxÇý¶¯Ö®makefileÏê½â

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
    ......

LinuxÄں˵Äͬ²½»úÖÆ

ÔÚ½øÈëÕýÎÄǰÏÈ¿´Ò»ÏÂÎÒÔÚÍøÉÏ¿´µ½µÄÌû×Ó£º
ÎÊ£ºatomic_set(v,i)µÄ¶¨ÒåÊÇÕâÑùµÄ:
#define atomic_set(v,i) v->counter=i
µ«ÊÇ£¬ÔÚi386Ìåϵ½á¹¹ÖУ¬²»ÄÜÖ±½Ó°ÑÒ»¸öÄÚ´æ²Ù×÷Êýͨ¹ýÒ»ÌõmovÖ¸Áî´æµ½ÁíÒ»¸öÄÚ´æ²Ù×÷ÊýÖУ¬
±ÈÈçÒª°Ñint32ÀàÐ͵ıäÁ¿ i ÉèÖÃ³É j£¬±ØÐë¾­¹ýÁ½ÌõÖ¸Áî:
mov eax,j
mov i,eax
Èç¹ûÕâÑùÀ ......

´Ó»úÆ÷µÄÅäÖÃdz̸Linux°æ±¾µÄÑ¡Ôñ

×¢£ºÕâÆªÎÄÕ±ȽϾɣ¬µ«ÊÇÓÐÒ»¶¨µÄ²Î¿¼¼ÛÖµ~~×Ô¼ºÊÔ¹ýµÄLinux²»¶à£¬ËùÒÔ»¹ÊÇÓÐÒª²Î¿¼µÄµØ·½¡£
Ô­ÎÄÁ´½Ó£ºhttp://www.linux521.com/2009/newbie/200904/1963.html
ĿǰLinuxÔÚ¹úÄÚ½øÈëÁËÒ»¸ö½Ï¿ìËٵķ¢Õ¹½×¶Î,ÕýÈçÎÒÃÇ¿´µ½µÄ,Ðí¶àµÄWindowsÓû§×ªÍ¶
LinuxÕóÓª.ÓÉÓÚLinux±¾ÉíÊÇÒ»¸ö¿ª·ÅµÄ²Ù×÷ϵͳ,Òò¶øÓµÓÐÖÚ¶àµÄ·¢ÐÐ°æ°æ± ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ