【linux】内核源代码下载与阅读
?
原創(chuàng),轉(zhuǎn)載時請注明,謝謝。郵箱:tangzhongp@163.com
博客園地址:http://www.cnblogs.com/embedded-tzp
Csdn博客地址:http://blog.csdn.net/xiayulewa
?
"生于憂患,死于安樂"。
說說linux如何閱讀內(nèi)核源代碼,幾年里我所有的筆記和資料都用word寫的,看著它們靜靜的躺在硬盤里,就感覺有些浪費,希望能分享出來,因為包括ucos,u-boot,linux kernel的移植,我都喜歡下載官網(wǎng)比較新的版本,然后自己閱讀源代碼移植。因為要學(xué)的詳細點,而我word做的筆記太簡略了點,文章大部分還得重新整理。
源代碼下載
去http://www.kernel.org/中選擇某個適合自己的版本,我下載的是linux.3.10.53. 然后解壓,因為windows不支持符號鏈接,所以解壓還得去linux下,然后刪除arch下除所需體系結(jié)構(gòu)外的所有目錄,如我的體系結(jié)構(gòu)是arm,我就把除arm外的所有目錄都刪了,再去arm目錄下,將其它cpu的文件夾全部刪了,比如我的soc是s3c2440, 則mach-*類似的文件夾我只保留了mach-s3c24xx,而plat-*, 只保留plat-samsung,繼續(xù)目錄循環(huán)操作,最后只保留特定芯片相關(guān)的文件。 這里說說為什么要刪除,因為刪了看源代碼方便點,不然很多重名函數(shù)。
閱讀環(huán)境配置
??? 使用source insight,閱讀代碼很方便。
??? 略。
生成Map文件
?
??? 看看map文件內(nèi)容:
.text 0xc0008c40 0x4f34 arch/arm/kernel/built-in.o
0xc0008c40 elf_check_arch
0xc0008ccc arm_elf_read_implies_exec
0xc0008cf0 elf_set_personality
0xc00090d4 no_fp
0xc0009134 ret_from_exception
0xc0009144 __switch_to
0xc0009210 ret_to_user
?
Map文件包含了函數(shù),函數(shù)地址,函數(shù)所在的文件夾,如ret_to_user函數(shù)(標(biāo)號?)的地址為0xc0009210,其函數(shù)所屬文件在文件夾arch/arm/kernel/下。
??? Map文件存在的意義,linux跨平臺,有時同一個函數(shù)名可能在不同的文件出現(xiàn),用source insight搜索得到很多結(jié)果,此時根據(jù)map文件就可以定位linux編譯采用的是哪一個函數(shù),在內(nèi)核調(diào)試時就非常方便。
??? Map文件添加方法:
在src/Makefile中export LDFLAGS_vmlinux之前添加
LDFLAGS_vmlinux += -Map vmlinux.map
?
然后編譯make menuconfig, make。最后會在.config文件相同的目錄下生成該文件。
Make時也可以make -V > make.log,將make輸出信息打印到文件。
?
生成反匯編文件vmlinux.dis
??? 推薦文章的方法:http://www.cnblogs.com/sdphome/archive/2012/03/05/2380703.html
??? 簡便一點可以直接使用arm-linux-gcc -S vmlinux > vmlinux.dis
???
?
資源匯總
??? 內(nèi)核閱讀與調(diào)試 主要涉及到的文件:
??? 最重要的linux內(nèi)核源代碼,vmlinux.dis, make.log, vmlinux.map, vmlinux.lds, Makefile。
vmlinux.lds在linux內(nèi)核src\arch\arm\kernel目錄下。
?
實例
??? cdev_init, 直接在source insight搜,就找到了。
??? 之前調(diào)試時遇到過必須要對上述資源匯總的文件均進行查詢才查找到問題的案例,沒有做筆記,現(xiàn)在忘記了,一時沒有想到比較好的用例,有機會補上來。
轉(zhuǎn)載于:https://www.cnblogs.com/embedded-tzp/p/4443611.html
總結(jié)
以上是生活随笔為你收集整理的【linux】内核源代码下载与阅读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php的系统常量
- 下一篇: 扩展方法where方法查询不到数据,不会