如何查看linux内核源代码?
一般在Linux系统中的/usr/src/linux*.*.*(*.*.*代表的是内核版本,如2.4.23)目录下就是内核源代码(如果没有类似目录,是因为还没安装内核代码)。另外还可从互连网上免费下载。注意,不要总到去下载,最好使用它的镜像站点下载。请在mirrors/里找一个合适的下载点,再到pub/linux/kernel/v2.6/目录下去下载2.4.23内核。
代码目录结构
在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于Linux-2.4.23目录):
1.arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是IntelCPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。
2.include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。
3.init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。
4.mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。
5.drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。
6.ipc目录包含了核心进程间的通信代码。
7.modules目录存放了已建好的、可动态加载的模块。
8.fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。
Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。
9.net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。
10.lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。
11.scripts目录包含用于配置核心的脚本文件。
12.documentation目录下是一些文档,是对每个目录作用的具体说明。
一般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。
在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。对于Linux启动的代码可顺着Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解。
绛旓細涓鑸湪Linux绯荤粺涓殑/usr/src/linux*.*.*锛*.*.*浠h〃鐨勬槸鍐呮牳鐗堟湰锛濡2.4.23锛夌洰褰曚笅灏辨槸鍐呮牳婧愪唬鐮侊紙濡傛灉娌℃湁绫讳技鐩綍锛屾槸鍥犱负杩樻病瀹夎鍐呮牳浠g爜锛夈傚彟澶栬繕鍙粠浜掕繛缃戜笂鍏嶈垂涓嬭浇銆傛敞鎰忥紝涓嶈鎬诲埌鍘讳笅杞斤紝鏈濂戒娇鐢ㄥ畠鐨勯暅鍍忕珯鐐逛笅杞姐傝鍦╩irrors/閲屾壘涓涓悎閫傜殑涓嬭浇鐐癸紝鍐嶅埌pub/linux/kernel/v2...
绛旓細瀹冪殑浣跨敤绠鍗曚粙缁嶅涓:鍏堥夋嫨Project鑿滃崟涓嬬殑new锛屾柊寤轰竴涓伐绋嬶紝杈撳叆宸ョ▼鍚嶏紝鎺ョ潃瑕佹眰浣犳妸娆茶鐨婧愪唬鐮鍔犲叆(鍙互鏁翠釜鐩綍鍔)鍚庯紝璇ヨ蒋浠跺氨鍒嗘瀽浣犳墍鍔犵殑婧愪唬鐮併傚垎鏋愬畬鍚庯紝灏卞彲浠ヨ繘琛岄槄璇讳簡銆傚浜庢墦寮鐨勯槄璇绘枃浠讹紝濡傛灉鎯鐪鏌愪竴鍙橀噺鐨勫畾涔夛紝鍏堟妸鍏夋爣瀹氫綅浜庤鍙橀噺锛岀劧鍚庣偣鍑诲伐鍏锋潯涓婄殑鐩稿簲閫夐」锛岃鍙橀噺鐨勫畾...
绛旓細涓鑸湪Linux绯荤粺涓殑/usr/src/linux*.*.*(*.*.*浠h〃鐨勬槸鍐呮牳鐗堟湰,濡2.4.23)鐩綍涓嬪氨鏄唴鏍告簮浠g爜(濡傛灉娌℃湁绫讳技鐩綍,鏄洜涓鸿繕娌″畨瑁呭唴鏍镐唬鐮)銆傚彟澶栬繕鍙粠浜掕繛缃戜笂鍏嶈垂涓嬭浇銆傛敞鎰,涓嶈鎬诲埌http://www.kernel.org/鍘讳笅杞,鏈濂戒娇鐢ㄥ畠鐨勯暅鍍忕珯鐐逛笅杞姐傝鍦╤ttp://www.kernel.org/mirrors/閲屾壘涓涓悎閫傜殑涓嬭浇...
绛旓細1銆Linux鏍稿績婧愮▼搴忛氬父閮藉畨瑁呭湪/usr/src/linux涓嬶紝鑰屼笖瀹冩湁涓涓潪甯哥畝鍗曠殑缂栧彿绾﹀畾锛氫换浣曞伓鏁扮殑鏍稿績锛堢殑浜屼釜鏁颁负鍋舵暟锛屼緥濡2.0.30锛夐兘鏄竴涓ǔ瀹氬湴鍙戣鐨勬牳蹇冿紝鑰屼换浣曞鏁扮殑鏍稿績锛堜緥濡2.1.42锛夐兘鏄竴涓紑鍙戜腑鐨勬牳蹇冦2銆佹牳蹇冩簮绋嬪簭鐨勬枃浠舵寜鏍戝舰缁撴瀯杩涜缁勭粐锛屽湪婧愮▼搴忔爲鐨勬渶涓婂眰锛屽嵆鐩綍/usr/sr...
绛旓細鐢linux涓娈垫椂闂翠簡锛屾湁鏃跺欐兂鐪嬬湅ls銆乧at銆乵ore绛夊懡浠ょ殑婧愪唬鐮锛屽湪涓嬭浇鐨鍐呮牳婧愮爜涓敤cscope娌¤兘鎵惧埌锛屽湪缃戜笂鎼滅储浜嗕竴涓嬶紝灏嗘柟 娉曟荤粨濡備笅锛氫互鎼滅储ls鍛戒护婧愮爜涓轰緥锛屽厛鎼滅储鍛戒护鎵鍦ㄥ寘锛屽懡浠ゅ涓嬶細lpj@lpj-linux:~$ which ls /bin/ls鐢ㄥ懡浠ゆ悳绱㈣杞欢鎵鍦ㄥ寘锛屼唬鐮佸涓嬶細lpj@lpj-linux:~$ dpkg -S ...
绛旓細濡備綍鏌ョ湅linux鍐呮牳婧愪唬鐮侊紵涓鑸湪Linux绯荤粺涓殑/usr/src/linux*.*.*锛*.*.*浠h〃鐨勬槸鍐呮牳鐗堟湰锛屽2.4.23锛夌洰褰曚笅灏辨槸鍐呮牳婧愪唬鐮侊紙濡傛灉娌℃湁绫讳技鐩綍锛屾槸鍥犱负杩樻病瀹夎鍐呮牳浠g爜锛夈傚彟澶栬繕鍙粠浜掕繛缃戜笂鍏嶈垂涓嬭浇銆傛敞鎰忥紝涓嶈鎬诲埌http://www.kernel.org/鍘讳笅杞斤紝鏈濂戒娇鐢ㄥ畠鐨勯暅鍍忕珯鐐逛笅杞姐傝鍦╤ttp:/...
绛旓細銆佸叧闂枃浠惰璋冪敤close()绛夌瓑濡備綍鏌ョ湅linux鍐呮牳婧愪唬鐮侊紵涓鑸湪Linux绯荤粺涓殑/usr/src/linux*.*.*锛*.*.*浠h〃鐨勬槸鍐呮牳鐗堟湰锛屽2.4.23锛夌洰褰曚笅灏辨槸鍐呮牳婧愪唬鐮侊紙濡傛灉娌℃湁绫讳技鐩綍锛屾槸鍥犱负杩樻病瀹夎鍐呮牳浠g爜锛夈傚彟澶栬繕鍙粠浜掕繛缃戜笂鍏嶈垂涓嬭浇銆傛敞鎰忥紝涓嶈鎬诲埌http://www.kernel.org/鍘讳笅杞斤紝鏈濂戒娇鐢ㄥ畠...
绛旓細www.kernel.org閲屾湁linux鐨勫唴鏍告簮浠g爜锛屼汉瀹剁紪璇戝唴鏍搁兘瑕佸幓閭i噷涓嬭浇鏈鏂扮殑鍐呮牳浠g爜銆傝嚦浜嶭inux涓嬪叾浠栬蒋浠剁殑婧愪唬鐮侊紝浣犲彲浠ュ幓鐩稿叧鐨勫湴鍧涓嬭浇銆傛渶濂戒娇鐢╣oogle.com锛岃嫳鏂囩殑锛屼笉瑕佺敤涓枃鐨勭櫨搴︽垨璋锋瓕銆傝繕鏈夊緢澶氫汉鍐欎簡鍏充簬闃呰linux婧愪唬鐮佺殑涔︼紝姣斿璧电偗鍐欑殑涓鏈垎鏋愭棭鏈熷唴鏍1.01鐨勩俻s鏂囦欢鏄痯ostscript璇█...
绛旓細tty uname unexpand uniq unlink uptime users wc who whoami yes 閮藉寘鍚湪 coreutils 杞欢鍖呬腑锛宑oreutils 杞欢鍖鐨勬簮鐮鍙互鍦 http://ftp.gnu.org/gnu/coreutils/ 涓嬭浇鍒般傚彟澶栵紝杩樻湁涓閮ㄥ垎鍛戒护鏄 bash 鍐呯疆鐨勶紝渚嬪 cd 绛夛紝鍙互鍦 bash 鐨勬簮鐮佷腑鎵惧埌銆俬ttp://ftp.gnu.org/gnu/bash/ ...
绛旓細1. 瀹夎蹇呰鐨勮蒋浠跺寘锛堜緥濡傚湪Debian鎴朥buntu涓婏紝浣犻渶瑕佸畨瑁卄build-essential`鍜宍libncurses-dev`锛夈2. 鍒囨崲鍒鍐呮牳婧愪唬鐮鐩綍锛堜緥濡俙cd /usr/src/linux`锛夈3. 杩愯`make menuconfig`鍛戒护鏉ュ惎鍔ㄥ唴鏍搁厤缃彍鍗曘4. 鍦ㄨ彍鍗曚腑鎵惧埌骞朵慨鏀圭浉鍏崇殑閰嶇疆椤广5. 淇濆瓨骞堕鍑鸿彍鍗曘6. 杩愯`make && make ...