阅读linux源码
⑴ 如何阅读linux源代码
用写字板打开就可以自动识别UNIX系统的换行符号。一个不会使用基础的编辑工具的新手,还是不要在源代码上浪费时间了。有空先学点基础编程吧~~~
⑵ linux阅读源码用什么软件
系统自带有vi
⑶ 如何通过阅读linux源代码深入学习linux内存子系统
首先,对linux的内存要有整体认识:建议看《深入理解linux内核》,英文好的看原版,没有完全理解不要急,毕竟操作系统没有那么容易学。
其次,导致linux内存管理机制复杂的原因在于Intel的体系结构不断要向前兼容,导致段式管理等一些不易理解的概念产生。建议看《独辟蹊径品内核 linux内核源代码导读》的前部分,在硬件体系结构上理解linux内存管理的演化。
第三,阅读源代码:建议看《linux内核源代码情景分析》。
⑷ 如何阅读linux源码
阅读linux源代码要掌握一定的386硬件知识,AT&T汇编语言结构,操作系统原理等等基础知识。但是及时掌握这些知识读懂源码还是很困难的(当然掌握操作系统原理也是一件不容易的事情),建议你先去看一下u/cos源代码,根据其源代码试着自己给51单片机写一个小的分时操作系统,移植到单片机上试试效果。然后再根据对u/cos理解自己写一个自己的u/cos,并移植到arm7平台上,一步一步来。。。。。。总之linux操作系统是一个很复杂的软件,它不仅仅要求你对大型软件架构有很深入的认识,还要求你对硬件的操作非常熟悉,我们经常看到在linux系统中常常会有汇编语言与c语言的嵌套。阅读linux源代码不是一件容易的事情,要不断的学习,让我们一起来努力吧!
⑸ 如何阅读linux的源代码
1.精通C
2.懂汇编、计算机体系结构、操作系统原理
3.懂算法和数据结构
4.找一本介绍linux源代码的书看,按照书上的步骤做。
5.当然,你要有linux源代码,并且尽可能多地阅读相关文档。
www.oldlinux.org上有一个《linux内核源代码完全注释》的电子文档,是基于linux0.11版的内核注释的。我承认,由于对C的一知半解,加上没学过汇编和体系结构,算法和数据结构也勉勉强强,虽然只有1万行左右的代码,还是没能坚持把它看完。
要是你不喜欢看电子版的,该书已由机械工业出版社出版,你可以向出版社联系购买。
⑹ 在Windows下如何阅读Linux下的源代码
windows下一般使用source insight来阅读linux源码。
Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。
⑺ Linux 平台下阅读 Linux 内核源码好用的工具有哪些
可以使用vim 我个人感觉如果你在linux系统下。基本上编码或者阅读文本都可以使用vim。太强大的一个编辑器了。
⑻ 如何阅读Linux源代码
用Linux的人越来越多了,阅读Liux的人也越来越多了。但是,很多人下了很打的功夫,收益不是很大,下面给大家介绍一下,学Linux阅读Linux内核源代码的捷径。 把内核源码解压后,你会发下,那么多文件夹,早期版本的Linux文件夹还比较少,后来越来越多,这也造成了阅读的困难,下面给大家简单的介绍一下,希望对大家的学习,起作用,能做到事半功倍。
⑼ 怎么开始读Linux内核源码
本人是一名 android display方面的工程师,结合实际工作经验聊聊(观点未必正确)
1. 准备工作:选择什么样的版本,使用什么样的工具,这个需要考虑好。
如果是要参考书的话,kernel版本一般都应该选择和书里面同步的版本,不要去选择最新的版本。因为最新的版本,各种改动比较多,反而对不上书了。
工具问题,你可以选择windows下的source insight,也可以选择linux下vim+ctags;
2. 第一遍浏览,我建议是先把kernel里面的 start_kernel() 函数里面的东西看清楚(不一定看明白),看看这个过程中,出现了什么玩意,有哪些分支,并将分支初略的画出一张图来(当然,我自己并没做到这一点,有点讽刺了)。
这里面最重要的几个地方,我个人认为,应该搞明白mole机制,它是怎么通过编译链接脚本放在特定的区域,然后系统起来后,又是如何去(按照什么规则)去加载这些模块;
应该搞明白sysfs系统,这个对于驱动和用户空间的连接,有非常大的作用;
系统调用的open()应该走一遭,看看用户空间到kernel之间参数是如何传递,又是怎么通过vfs系统,把open的动作最终落实到某一个驱动的open()上去的;
对kernel启动过程中,内存的分配算法,是怎么从伙伴算法切换到最终的算法上,也应该略有耳闻;对fork()函数的过程有所明白。
对kernel中基本的数据结构实现过程、锁机制实现过程要有概念:
这一部分,总结起来,应该看的路线是:
start_kernel()
mole_init() 宏实现 // 看这个的时候,强烈建议,把makefile真正的意图弄明白
open() 系统调用
fork() 系统调用
sysfs 框架实现
双链表是如何实现的;
锁最终是依靠什么来保证的?(其实还是硬件来保证的)
对于数据结构和锁这部分,就按照《Linux内核设计与实现》里面的东西挨个挨个看。有兴趣,自己也可以实现一个双链表公共API,随便哪个项目,一旦用上,直接抛进去,也未尝不可。
第一遍浏览,窃以为,上面这几部分看明白后,kernel的代码对你依然很难,但已经不再有神秘的面纱。
后续,你想研究某个模块,直接快速定位到那边去就行。
3. 在完全用眼睛看完上面这部分内容后,kernel的路或许找到了,但是,万里长征的第一步,并没有迈出。这个时候,动手是很重要的了。
网上有各种方法,比如说,去kernel maillist里面订阅bug,然后自己试着解bug,此方法可取,而且是非常好。这里会遇到一个问题是,我们该怎么调试?
有人是架各种虚拟机或者多台物理机一起开干,这个可以有。(但是本人动手能力确实有限,这个没干成,本人是后面借助了公司的开发板)
如果你也像我一样,动手能力不足,如果你恰巧是手机或者类似手机开发公司的,你可以直接使用公司的开发机,通过串口log,将printk()的级别设置为3,把你需要的信息打印出来;
如果你是学生或者爱好者,可以花500左右人民币,去淘宝上买一个开发板,也是带串口的,所有的debug信息都是通过串口打印出来,保存到一个Log文件中,然后分析;
至于买什么样的板子,你可以随便选择,经典的s3c2440也行,高端点的树莓派,或者全志什么的,都可以。(不推荐全志,他们添加和修改硬件比较多,驱动也许不好搞)
4. 选择你喜欢的模块,进行深入研究,通过log打印,反复推敲,这个时候,bug是最好的导师。多关注kernel/Documents/ 目录下的文档。
你需要注意的是,一定要把该模块无关的东西砍掉,否则,生命是有限的,而代码是无限的。
最后一句话是,在用眼睛看完后,思考过后,还得动手,然后再思考。否则,只读的话,仅能扫盲。