linux 0.11 ÄÚºËѧϰ char_dev.c
/*
* linux/fs/char_dev.c
*
* (C) 1991 Linus Torvalds
*/
#include <errno.h>
#include <sys/types.h> // ¶¨ÒåÁË»ù±¾µÄϵͳÊý¾ÝÀàÐÍ
#include <linux/sched.h>
#include <linux/kernel.h> // º¬ÓÐһЩÄں˳£Óú¯ÊýµÄÔÐζ¨Òå
#include <asm/segment.h>
#include <asm/io.h>
/* Öж϶Á */
extern int tty_read(unsigned minor,char * buf,int count);
/* ÖжÏд */
extern int tty_write(unsigned minor,char * buf,int count);
/* ¶¨Òå×Ö·ûÉ豸¶Áдº¯ÊýÖ¸ÕëÀàÐÍ */
typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count,off_t * pos);
/* ´®¿ÚÖն˶Áд²Ù×÷º¯Êý¡£²ÎÊý £º rw¶ÁдÃüÁminorÖжÏ×ÓÉ豸ºÅ£¬buf»º³åÇø */
/* count¶ÁдµÄ×Ö½ÚÊý£¬pos¶Áд²Ù×÷µ±Ç°Ö¸Õ룬·µ»ØÊµ¼Ê¶ÁдµÄ×Ö½ÚÊý */
static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos)
{
return ((rw==READ)?tty_read(minor,buf,count):
tty_write(minor,buf,count));
}
/* Öն˶Áд²Ù×÷º¯Êý£¬Ö»ÊÇÔö¼ÓÁ˶Խø³ÌÊÇ·ñÓпØÖÆÖն˵ļì²â */
static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos)
{
// Èô½ø³ÌûÓжÔÓ¦µÄ¿ØÖÆÖÕ¶Ë£¬Ôò·µ»Ø³ö´íºÅ
if (current->tty<0)
return -EPERM;
return rw_ttyx(rw,current->tty,buf,count,pos);
}
/* ÄÚ´æÊý¾Ý¶Áдº¯Êý£¬»¹Ã»ÊµÏÖ */
static int rw_ram(int rw,char * buf, int count, off_t *pos)
{
return -EIO;
}
/* ÄÚ´æÊý¾Ý¶Áд²Ù×÷º¯Êý¡£Î´ÊµÏÖ */
static int rw_mem(int rw,char * buf, int count, off_t * pos)
{
return -EIO;
}
/* ÄÚºËÊý¾ÝÇø¶Áдº¯Êý¡£Î´ÊµÏÖ */
static int rw_kmem(int rw,char * buf, int count, off_t * pos)
{
return -EIO;
}
/* ¶Ë¿Ú¶Áд²Ù×÷º¯Êý£¬²ÎÊý £º rw¶ÁдÃüÁbuf»º³åÇø£¬count¶Áд×Ö½ÚÊý£¬pos */
/* ¶Ë¿ÚµØÖ·£¬·µ»ØµÄÊÇʵ¼Ê¶ÁдµÄ×Ö½ÚÊý */
static int rw_port(int rw,char * buf, int count, off_t * pos)
{
int i=*pos; // ¶Ë¿ÚµØÖ·
// ¶ÔÓÚËùÒªÇó¶ÁдµÄ×Ö½ÚÊý£¬²¢ÇҶ˿ڵØÖ·Ð¡ÓÚ64k
while (count-->0 && i<65536)
{
// ÈôÊǶÁÃüÁÔò´Ó¶Ë¿Úi ÖжÁȡһ×Ö½ÚÄÚÈݲ¢·Åµ½Óû§»º³åÇøÖÐ
if (rw==READ)
put_fs_byte(inb(i),buf++);
Ïà¹ØÎĵµ£º
±¾ÎIJ¢·Ç½âÊÍʲôÊÇ·Ç×èÈûsocket£¬Ò²²»ÊǽéÉÜsocket APIµÄÓ÷¨£¬ È¡¶ø´úÌæµÄÊÇÈÃÄã¸ÐÊÜʵ¼Ê¹¤×÷ÖеĴúÂë±àд¡£ËäÈ»ºÜ¼òª£¬µ«Äã¿ÉÒÔͨ¹ýmanÊÖ²áÓëÆäËü×ÊÔ´·Ç¸»ÄãµÄ´úÂë¡£Çë×¢Òâ±¾½Ì³ÌËù˵µÄÖ÷Ì⣬Èç¹ûϸ˵£¬ÄÚÈÝ¿ÉÒÔ´ïµ½Ò»±¾ÊéÄÚÈÝ£¬Äã»á·¢ÏÖ±¾½Ì³ÌºÜÓÐÓá£
±¾½Ì³ÌÄÚÈÝÈçÏ£º
......
1. LinusºÍBill
ËÆºõÔÚÒ»Ò¹Ö®¼ä£¬Õâ¸öÃû×ÖͻȻ±äµÃͬÏó±È¶û¡£¸Ç´ÄÒ»ÑùµÄ¶úÊìÄÜÏê¡£µ«ÊDZȶû¡£¸Ç´Ä£¬ÄÄÅÂÉí¼ÛÓÐÊý²»Çå±¶µÄ°ÙÍòÃÀ½ð£¬Ò²ÓÀÔ¶²»»á±ä³ÉLinux Torvalds¡£Õâλ29ËêµÄ·ÒÀ¼ÈË£¬¼òµ¥¶øÇ¿´óµÄLinux²Ù×÷ϵͳµÄ´´ÔìÕߣ¬³¬Ô½Á˸ǴĵÄÉñ»°¡£Ò²Óд«ÎÅ˵¸Ç´ÄÊÇÒ»¸ö׿ԽµÄ³ÌÐòÔ±£¬µ«LinusÊÇ»õÕæ¼ÛʵµÄ¸ßÊ ......
×ܽáÕ½ڣºµÚÒ»Õ É豸Çý¶¯³ÌÐò¼ò½é
µÚ¶þÕ ¹¹ÔìºÍÔËÐÐÄ£¿é
Ìáµ½Çý¶¯³ÌÐò¾Í²»µÃ²»ÏÈ˵ÏÂÁ½¸öÃû´Ê£ºÄں˿ռäºÍÓû§¿Õ¼ä¡£Óû§¿Õ¼ä¼´Óû§Ó¦ÓÃËùÔËÐеĿռ䣬Äں˿ռäÖµµÃÊDzÙ×÷ϵͳÄÚºËÔËÐеĿռ䡣Óû§¿Õ¼ä²»ÄÜÖ±½ÓÒýÓûòÕß²Ù×÷Äں˿ռäµÄÊý¾Ý£¬Äں˿ռäÒ²²»ÄÜÖ±½ ......
×ªÔØÊ±Çë×¢Ã÷³ö´¦ºÍ×÷ÕßÁªÏµ·½Ê½
ÎÄÕ³ö´¦£ºhttp://www.limodev.cn/blog
×÷ÕßÁªÏµ·½Ê½£ºÀîÏȾ² <xianjimli at hotmail dot com>
Ëæ×ÅXPµÄÁ÷ÐУ¬ÈËÃÇÔ½À´Ô½×¢ÖØÈí¼þµÄǰÆÚÉè¼Æ¡¢ºóÆÚµÄʵÏÖ£¬ÒÔ¼°¹á´©ÓÚÆäÖеIJâÊÔ¹¤×÷£¬¾¹ýÕâ¸ö¹ý³Ì³öÀ´µÄ×ÔÈ»ÊǸßÖÊÁ¿µÄÈí¼þ¡£ÉõÖÁÓÐÈËÉù³ÆXP»áÌÔ̵÷ÊÔÆ÷£¡Õ⵱ȻÊÇÓÐÒ»¶¨µÀÀíµÄ£¬È ......
LinuxÄÚºËÅäÖð취£º
1. make config
ÕâÖÖ°ì·¨»á±éÀúËùÓÐÅäÖÃÏҪÇóÓû§Öð¸öÑ¡ÔñY/N/M
2. make menuconfig
Õâ¸ö°ì·¨ÊÇ»ùÓÚncurse¿â±àÖÆµÄͼÐνçÃæ¹¤¾ß¡£³£ÓÃ
3. make xconfig
ÓÃÓÚ»ùÓÚX11µÄͼÐι¤¾ß
4. make gconfig
ÓÃÓÚ»ùÓÚgtk+ͼÐι¤¾ß
5. make defconfig
´´½¨Ò»¸öĬÈϵÄÅäÖã¬Éú³Éµ±Ç°µÄ.config
6. make x ......