LinuxÏÂÍø¿¨ÃüÃû¹æÂÉ£ºeth0£¬eth1¡£µÚÒ»¿éÒÔÌ«Íø¿¨£¬µÚ¶þ¿é¡£loΪ»·»Ø½Ó¿Ú£¬ËüµÄIPµØÖ·¹Ì¶¨Îª127.0.0.1£¬ÑÚÂë8λ¡£Ëü´ú±íÄãµÄ»úÆ÷±¾Éí¡£
1¡¢ifconfigÊÇ²é¿´Íø¿¨µÄÐÅÏ¢¡£
ifconfig [Interface]
InterfaceÊÇ¿ÉÑ¡ÏÈç¹û²»¼Ó´ËÏÔòÏÔʾϵͳÖÐËùÓÐÍø¿¨µÄÐÅÏ¢¡£Èç¹ûÌí¼Ó´ËÑ¡ÏîÔòÏÔʾËùÖ¸¶¨µÄÍø¿¨ÐÅÏ¢
ÀýÈ磺ifconfig eth0
eth0 Link encap:Ethernet
HWaddr 00:0C:29:F3:3B:F2
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:78 errors:0 dropped:0 overruns:0 frame:0
TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:11679 (11.4 Kb)
TX bytes:14077 (13.7 Kb)
Interrupt:10 Base address:0x1080
ÎÒÃÇ¿ÉÒÔ¿´µ½
µÚÒ»ÐУºÁ¬½ÓÀàÐÍ£ºEthernet£¨ÒÔÌ«Íø£©HWaddr£¨Ó²¼þmacµØÖ·£©
µÚ¶þÐУºÍø¿¨µÄIPµØÖ·¡¢×ÓÍø¡¢ÑÚÂë
µÚÈýÐУºUP£¨´ú±íÍø¿¨¿ªÆô״̬£©RUNNING£¨´ú±íÍø¿¨µÄÍøÏß±»½ÓÉÏ£©MULTICAST£¨Ö§³Ö×é²¥£©MTU:1500£¨×î´ó´«Êäµ¥Ôª£©£º1500×Ö½Ú
µÚËÄ¡¢ÎåÐУº½ÓÊÕ¡¢·¢ËÍÊý¾Ý°üÇé¿öͳ¼Æ ......
ǰÑÔ£º
µ±ÎÒÃÇʹÓÃǶÈëʽlinux ½øÐпª·¢Ê±£¬kernel ÅÜÆðÀ´Ö®ºó£¬ÎÒÃÇÏ£ÍûÄÜͨ¹ý´®¿Ú£¨±ê×¼ÊäÈë¡¢Êä³ö£©£¬ÔÚÓ¦ÓóÌÐòÕýÔÚÔËÐеĹý³ÌÖУ¬½øÐÐһЩµ÷ÊÔ¹¤×÷£¬ÀýÈ磬¶ÔCPUһЩ¼Ä´æ½øÐе÷Õû£¬ÒÔ¹Û²âµ÷ÕûÒÔºóµÄ½á¹û£¬²¢ÇÒ£¬µ±ÎÒÃÇÎÞ·¨°ÑÎÒÃǵÄÓ¦ÓóÌÐò·ÅÔÚºǫ́ÔËÐУ¬ÄÇôÎÒÃǾÍÐèҪʵÏÖÒ»¸ö»ù´¡µÄ¿ØÖÆÌ¨¡£
ÏÂÎÄÖеĿØÖÆÌ¨£¬ËäÈ»¼òµ¥£¬µ«Í걸µÄÖ§³Ö ÉÏ Ï ×ó ÓÒ backspace del ³£ÓÿØÖÆÌ¨²Ù×÷£¬Ê¹Óà ÉÏ Ï ¼ü¿ÉÒÔä¯ÀÀÒѾÊäÈë¹ýµÄÃüÁÀàËÆ doskey ÕâÑùµÄ¹¦ÄÜ£©£¬Ö§³Ö ¹â±ê ×óÓÒÒÆ¶¯ ÐÞ¸ÄÃüÁî
Ò»°ãÎÒÃÇÔÚ main º¯Êý×îºó ¶¼»á×ö while(TRUE) sleep(1000) ÕâÑù ×èÈûסÖ÷Ị̈߳¬ÓÃÕâ¸ö¿ØÖÆÌ¨µÄʵÏÖ£¬Ìæ»»Õâ¸ö¹ý³Ì£¬ÔòÓ¦ÓóÌÐò¿ÉÔö¼Ó¿ØÖÆÌ¨Ó¦Óù¦ÄÜ£¬¸÷²¿·ÖµÄ¾ßÌåʵÏÖÈçÏ£º
µ÷ÓôúÂë(main.c)£º
#include <stdio.h>
#include "app_console.h"
int main(int argc, char *argv[])
{
// ֮ǰµÄÓ¦ÓôúÂë
....
....
....
App_Console_Start();
return 0;
}
¿ØÖÆÌ¨Í·Îļþ(app_console.h)
#ifndef __APP_CONSOLE_H__ ......
×÷Õߣºbioforge alkerr@yifan.net
ÔÃû£º <<Hacking the Linux Kernel Network Stack>>
·Ò룬Ð޸ģº duanjigang <duanjigang1983@126.com>
·Òë²Î¿¼£ºraodan (raod_at_30san.com) 2003-08-22
µÚÒ»Õ ¼ò½é
±¾ÎĽ«ÃèÊöÈçºÎÀûÓÃLinuxÍøÂç¶ÑÕ»µÄÇÏÃÅ£¨²»Ò»¶¨¶¼ÊÇ©¶´£©À´´ïµ½Ò»Ð©Ä¿µÄ£¬»òÕßÊǶñÒâµÄ£¬»òÕßÊdzöÓÚÆäËüÒâͼµÄ¡£ÎÄÖлá¾ÍºóÃÅͨѶ¶ÔNetfilter¹³×Ó½øÐÐÌÖÂÛ£¬²¢ÔÚ±¾µØ»úÆ÷ÉÏʵÏÖ½«Õâ¸ö´«Êä´Ó»ùÓÚLibpcapµÄÐá̽Æ÷(sniffer)ÖÐÒþ²Ø¡£
NetfilterÊÇ2.4Äں˵ÄÒ»¸ö×Óϵͳ¡£Netfilter¿ÉÒÔͨ¹ýÔÚÄں˵ÄÍøÂç´úÂëÖÐʹÓø÷ÖÖ¹³×ÓÀ´ÊµÏÖÊý¾Ý°ü¹ýÂË£¬ÍøÂçµØÖ·×ª»»(NAT)ºÍÁ¬½Ó¸ú×ÙµÈÍøÂçÆÛÆ¡£ÕâЩ¹³×Ó±»·ÅÖÃÔÚÄں˴úÂë¶Î£¬»òÕß¾²Ì¬±àÒë½øÄںˣ¬»òÕß×÷Ϊһ¸ö¿É¶¯Ì¬¼ÓÔØ/Ð¶ÔØµÄ¿ÉÐ¶ÔØÄ£¿é£¬È»ºó¾Í¿ÉÒÔ×¢²á³ÆÖ®ÎªÍøÂçʼþµÄº¯Êý£¨±ÈÈçÊý¾Ý°üµÄ½ÓÊÕ£©¡£
1.1 ±¾ÎÄÂÛÊöµÄÄÚÈÝ
±¾ÎĽ«½²ÊöÄÚºËÄ£¿éµÄ±àдÕßÈçºÎÀûÓÃNetfilterµÄ¹³×ÓÀ´´ïµ½ÈκÎÄ¿µÄ£¬ÒÔ¼°ÔõÑù½«ÍøÂç´«Êä´ÓÒ»¸öLibpcapµÄÓ¦ÓÃÖÐÒþ²Øµô¡£¾¡¹ÜLinux2.4Ö§³Ö¶ÔIPV4£¬IPV6ÒÔ¼°DECnetµÄ¹³×Ó,±¾ÎÄÖ»Ìá¼°IPV4µÄ¹³×Ó¡£µ«ÊÇ£¬¶ÔIPV4µÄ´ó¶àÊýÓ¦ÓÃÄÚÈÝͬÑùÒ²¿ÉÒÔÓ¦ÓÃÓÚÆäËûÐÒé¡£³öÓÚ½ÌÑ ......
À´Ô´linux-2.6.20.21/Documentation/kbuild/makefiles.txt
* obj-y
+= foo.o ±íʾ±àbuild-in£¬obj-m += foo.o±íʾ±à³Émodule.
* kbuild
»á±àÒëËùÓеÄ$(obj-y)Îļþ£¬È»ºóµ÷ÓÃ$(LD) -r°ÑÕâЩÎļþºÏ²¢µ½Ò»¸öbuilt-in.oÎļþÖС£Õâ¸öbuilt-in.oÉÔºó»á±»¸¸¼¶Makefile linkµ½vmlinux
* ÓÃlib-y
:= checksum.o delay.o »á°Ñchecksum.oºÍdelay.oºÏ±à³ÉÒ»¸ölib.a
* obj-$(CONFIG_EXT2_FS) += ext2
/±íʾ£¬µ±CONFIG_EXT2_FS=yµÄʱºò£¬ÒªÅܵ½ext2/Ŀ¼Ï²¢make
* EXTRA_CFLAGS, EXTRA_AFLAGS, EXTRA_LDFLAGS, EXTRA_ARFLAGS
EXTRA_CFLAGS
ÊÇÔÚÓÃCC±àÒëC´úÂëµÄʱºò¼ÓflagµÄ,
EXTRA_AFLAGSÊÇÔÚ±àÒë»ã±àÓïÑÔµÄʱºò¼ÓflagÓõÄ,
EXTRA_LDFLAGSÊÇÔÚLDµÄʱºò¼ÓflagÓõÄ,
EXTRA_ARFLAGSÊÇÔÚARµÄʱºò¼ÓflagÓõÄ
* CFLAGS_aha152x.o
= -DAHA152X_STAT -DAUTOCONF±íʾֻÔÚ±àÒëaha152x.oµÄʱºò¼Ó -DAHA152X_STAT -DAUTOCONF
* AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditionalºÍÉÏÃæ²î²»¶à£¬±íʾÔÚ±àÒëÌØ¶¨»ã±àÎļþʱ¼Óflag
* $(src)
ÊÇMakefileËùÔÚĿ¼µÄÏà¶Ô·¾¶
* $(obj
)ÊÇÄ¿±êÎļþ±£´æÔÚµÄĿ¼µÄÏà¶Ô·¾¶
*
cflags-y ......
Ò»¡¢ÏÂÔØ
gd-2.0.33.tar.gz http://www.boutell.com/gd/
jpegsrc.v6b.tar.gz http://www.ijg.org/
libpng-1.2.7.tar.tar http://sourceforge.net/projects/libpng/
zlib-1.2.2.tar.gz http://sourceforge.net/projects/zlib/
freetype-2.1.9.tar.gz http://sourceforge.net/projects/freetype/
php-4.3.9.tar.gz¡¡http://www.php.net
¶þ¡¢°²×°
1.°²×°zlib
tar zxvf zlib-1.2.2.tar.gz
cd zlib-1.2.2
./configure
make
make install
2.°²×°libpng (ÔÚ¸ÃÍøÕ¾ÉÏ¿ÉÄÜÕÒ²»µ½libpng-1.2.7.tar.tar£¬ÏÂÔØlibpng-1.2.7.tar.gzÒ²ÊÇÒ»ÑùµÄ)
tar zxvf libpng-1.2.7.tar.tar
cd libpng-1.2.7
cd scripts/
mv makefile.linux ../makefile
cd ..
make
make install
×¢Ò⣬ÕâÀïµÄmakefile²»ÊÇÓÃ./configureÉú³É£¬¶øÊÇÖ±½Ó´Óscripts/À�һ¸ö
3.°²×°freetype
tar zxvf freetype-2.1.9.tar.gz
cd freetype-2.1.9
./configure
make
make install
4.°²×°Jpeg
tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared
make
make test
make install
×¢Ò⣬ÕâÀïconfigureÒ»¶¨Òª´ø--enable-shared ......
Linux 2.6ÄÚºËÁ´±íÊý¾Ý½á¹¹µÄʵÏÖ
ÔÚ¼ÆËã»ú¿ÆÑ§ÖУ¬Á´±íÊǷdz£Í¨ÓõÄÊý¾Ý½á¹¹£¬¹á´©ÓÚÕû¸ölinuxµÄÄںˡ£ÔÚlinuxÄÚºËÖУ¬Á´±íͨ³£ÒÔ
˫ѻ·Á´±íµÄ·½Ê½³öÏÖ¡£ËùÓÐÁ´±íµÄ´úÂëÔÚinclude/linux/list.hÎļþÖС£
¶¨ÒåÈçÏ£º
struct list_head {
struct list_head *next, *prev;
};
ÕâÀïµÄlist_headûÓÐÊý¾ÝÓò¡£ÔÚLinuxÄÚºËÁ´±íÖУ¬²»ÊÇÔÚÁ´±í½á¹¹Öаüº¬Êý¾Ý£¬¶øÊÇÔÚÊý¾Ý½á¹¹Öаüº¬Á´±í¡£
list.h»¹¶¨ÒåÁËÐí¶àʹÓõĺêºÍÄÚÁªº¯Êý£¬ÏÂÃæ½éÉܼ¸¸öµäÐ͵ģº
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}
ÔÚlinuxµÄºê¶¨ÒåÖУ¬Ê±³£Óõ½do{}while(0)£¬ÕâÊÇΪÁË·½±ãÔٺ궨ÒåÖаüº¬¶àÐдúÂ룬
¹ØÓÚÕâ¸öµÄ˵Ã÷ÔÚÍøÉÏ¿ÉÒÔÕÒµ½ºÜ¶àÏêϸµÄ½éÉÜ¡£
ÔÚºêINIT_LIST_HEADÖУ¬½«Ëü³õʼ»¯ÎªÇ°ºó¶¼Ö¸Ïò×Ô¼º
ÔÚlinuxÄں˵ÄÁ´±íÖУ¬Ò»¸ö¿ÕÁ´±í¶¨ÒåÈçÏ£º head->nextÖ¸ÏòÁ´±íµÄÍ·ÔªËØ¡£
list.hÖл¹¶¨ÒåÁË list_add() £¬ list_add ......