zoukankan      html  css  js  c++  java
  • [转]做为一个初学者,对linux一无所知,到底有没有一个公式化的方法可以一步一步进入高手的行列呢?

    做为一个过来人,我谈谈我自己的看法,欢迎大家补充:

    首先肯定的一点是:不要一上来就看内核代码,基本上你会很快被挫败感打败。内核正在变得越来越庞大,学习曲线越来越陡峭,当你一无所知的时候冒然进入linux kernel,你会发现处处都是障碍,处处都是大坑,你根本走不下去。最好的方法是把对内核源代码的热情先放在心里,从基本功开始。

    我认为的基本功包括两个方面:
    1、linux的基本操作。内核中的很多设计都是源于应用,你不理解用户空间的操作,也就不会知道内核空间在干什么。这时候,你需要做的就是在自己的计算机上安装一个GNU/linux操作系统,Debian、Ubuntu什么的都OK,最好去掉其他的OS,这可以强迫你在linux下进行学习,工作,生活。在这个过程中,你可能需要google检索一些信息,安装一些软件,学习使用这些软件,理解一些基本的linux的背景知识......如果你想要从事底层的软件开发,那么尽量在终端下工作,这样会让你和linux kernel更接近一些,从而提供更多关于内核的基础知识。

    2、第二个方面是软件相关的基础知识。你最好学习一些软件的逻辑思维,学习掌握一门语言,当然最好是c语言。掌握其基本的语法和语义,然后在linux环境下进行实际训练。这里不得不隆重推出一本经典之作《Unix高级环境编程》,仔细阅读这本书,然后动手实践,编写linux下的小程序,给自己找些乐子。

    有了基本功之后,你可以选择强攻Linux kernel,不过呢我还是建议从一个小的RTOS入手,构建下面的知识体系:
    1、关于OS的基本概念。什么是进程、什么是线程,什么是中断,什么是文件系统,什么是内存管理,什么是上下文,什么是设备管理等等。

    2、关于处理器以及周边硬件的基础知识。可以选择ARM,也可以选择其他的处理器,主要是从软件角度来理解一个处理器,知道CPU的基本组成,知道什么是MMU,TLB,中断处理流程,总线的概念,什么是指令集等等。这时候,相信你会接触一些汇编指令,不一定要能写,但是一定要能读懂。

    上面的阶段都没有接触Linux内核,但是不要着急,我们马上就要直面Linux内核了,第一个问题就是选择什么版本,不需要太新,但是越早的内核就会越简单,有助你可以把阅读linux内核代码的习惯持续下去。你有几个选择:
    1、配合《Linux内核完全注释》来理解0.12内核。我没有看过这本书,听说不错。
    2、配合《Linux内核情景分析》来理解2.4内核。当年就是这本书引领我来阅读内核的,我一直都对其充满感激之情
    3、配合《深入理解linux内核》来理解2.6.10内核。非常好的书,强烈推荐,我基本上阅读了好几遍这本书,中文版一遍,英文版3遍,每次都有不同的收获。

    阅读代码的过程有些枯燥,可以考虑撰写实际的驱动程序来调节一下,《Linux设备驱动》是不二之选。

    最后,整理一些心得:
    1、英语很重要、英语很重要、英语很重要。一定要学好英语,尽量看英文版书籍。
    2、多动手,多思考,多总结。如果有机会,把自己的心得整理出来并发布,和其他工程师交流,这个过程可以有助于夯实你对Linux kernel的理解。
    3、clone linux stable的代码仓库,多读一读git log,那是无穷的宝藏;

    转载地址:

    http://www.wowotech.net/forum/viewtopic.php?id=5

    http://www.wowotech.net/ 

  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/xuyaowen/p/linux-learning.html
Copyright © 2011-2022 走看看