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
Ïà¹ØÎĵµ£º
·¢ÏÖ·þÎñÆ÷ϵͳʱ¼äºÍ±ê׼ʱ¼ä²îÁË10¶à·ÖÖÓ,È»ºóÁãµãµÄʱ¼äµ÷ÕûÁËÏÂʱ¼ä¡£¹ýÁ˲¶àÒ»¸öÀñ°Ý·¢Õ¹Êý¾Ý¿âÖмǼµÄʱ¼ä»¹ÊDz»¶Ô£¬ÈçÊÇÓüӰàµ÷ÕûÁËÏÂʱ¼ä¡£¹ýÁË2ÌìÒ»¿´»¹ÊÇʱ¼ä²»¶Ô£¬Ò»²é²Å·¢ÏÖ£º
»úÆ÷ÀïÓÐÁ½¸öʱÖÓ¡£Ó²¼þʱÖÓ´Ó¸ù±¾ÉϽ²ÊÇCMOSʱÖÓ£»¶øÏµÍ³Ê±ÖÓÊÇÓÉÄÚºËά»¤µÄ£¬ËüÊÇ´Ó1969ÄêÄ©£¨¼ ......
ËùÐèÎļþhello.c, main.c, hello.h, Makefile£¬ÔÚͬһ¸öĿ¼ÏÂ
hello.c:
#include <stdio.h>
void hello(char name[])
{
printf("Hello %s!\n", name);
}
main.c:
#include "stdio.h"
#include "hello.h"
// The second
int main()
{
hello("GCC");
printf("Haha Linux Ubuntu!\n");
......
°üº¬3¸öÎļþ¼Ð
Ŀ¼×éÖ¯½á¹¹ÈçÏ£º
inc/hello.h
main/main.c, Makefile
src/hello.c
ÎļþÄÚÈÝÈçÏ£º
hello.h:
void hello(char name[]);
main.c:
#include <stdio.h>
#include "../inc/hello.h"
// The second hello.h should in ""
int main()
{
hello("GCC");
printf("Haha Linux Ub ......
¸÷sectionµÄλÖ÷ֲ¼¿´Äں˵ÄÁ´½Ó½Å±¾
D:\KIDE\target\kernel-version\cgel3.0\linux\include\asm-generic\vmlinux.lds.h
D:\KIDE\target\kernel-version\cgel3.0\linux\arch\powerpc\kernel\vmlinux.lds.S
Kernel¾µÏñÆðʼµØÖ·KERNELBASE = 0xc000 0000£¬ÕâÒâζ×ÅÄں˴úÂëºÍÄÚºËÈ«¾Ö±äÁ¿µÈµÄµØÖ·¿Õ¼äÔÚ3g-4gµÄµØ·½£¬
¶ø ......