一、学什么?

嵌入式Linux所涵盖的知识面很广,需要按步骤、不间断的努力深入学习,才能有所成就。学习嵌入式Linux需要学习如下5大知识(按照学习步骤):

1.嵌入式处理器(ARM)与逻辑程序开发;

2.Linux系统管理;

3.Linux应用程序开发;

4.Linux驱动程序开发;

5.Linux内核开发与系统移植。

二、如何学?

1.学习第一大知识结构——嵌入式微处理器与逻辑程序开发时,需要学懂一下几点:

(1)ARM微处理器的两种工作模式(ARM模式和Thumb模式);

(2)ARM系统寄存器;

(3)ARM寻址方式;

(4)ARM汇编指令集;

(5)ARM环境C语言程序编程

(6)ARM中断与异常

(7)ADS(或其他)集成开发环境;

(8)裸机程序开发(如串口、LCD、时钟、LED、按键、网卡驱动、音频驱动、flash驱动等)

以上8点钟,第6和8点是非常重要的,而前5点则是基础。在这个阶段推荐看的书籍有:

(1)语言编程类:

《C语言程序设计》——谭浩强

《C语言深度解剖》

《C陷阱与缺陷》

《C专家编程》

《C++ Primer puls》第五版——Slephen Prala

《高质量C编程指南》

《程序员面试宝典》

(2)ARM微处理器类:

《ARM嵌入式系统开发——软件设计与优化》——斯洛斯(Sloss,A.N.)

然后就是各种驱动程序编写时,用到什么样的芯片就查阅相关的芯片手册,如网卡DM9000,音频的UDA1341等。

2.学习第二大知识结构——Linux系统管理时,需要学懂一下几点:

(1)Linux定制安装

(2)Linux命令详解(会熟练的运用)

(3)samba、nfs、tftp等服务器的配置与使用,以及Wireshark、Source Insight、Xshell、Ultraedit等软件的使用;

(4)Shell编程。

其中第2和第4点是最重要的,它将是学习以后的知识的一个最基础的技能。学会这些东西可以看一下两本书:

《Linux标准学习教材》——IT同路人

《Linux系统管理技术手册》——奈米斯,斯奈德,海因

3.学习第三大知识结构——Linux应用程序开发时,需要学懂一下几点:

(1)GCC、GDB、Makefile;

(2)文件、时间编程;

(3)多进程、多线程程序设计;

(4)进程间通讯;

(5)网络编程;

(6)QT图形化应用程序开发;

(7)Android图形化应用程序开发。

这个阶段的知识点都特别的重要,个人觉得除了第一点外,其他六点都需要下苦功夫学习,而第7和第8是这个阶段的最后两个也是最重要的,以后也可以直接应用于工程开发中。这个阶段可以学习一下两本书:

《Linux程序设计》第四版——马修(Matthew,N.),斯通斯(Stones,R.)

《UNIX环境高级编程》第二版——史蒂文斯,拉戈

4.学习第四大知识结构——Linux内核开发时,需要学习一下几点:

(1)Linux内核配置与裁剪;

(2)Linux内核模块开发;

(3)根文件系统的制作;

(4)进程子系统;

(5)内存子系统;

(6)Proc和sys文件系统;

(7)系统调用;

(8)内核定时器;

(9)内核异常分析;

这个阶段的知识非常的难,看书有时看上四五遍都无法理解,建议多去各种论坛上面看看,学习大家的经验。本知识中从第4点到第9点是Linux内核子系统的知识。这个阶段可以看一下两本书:

《深入理解LINUX内核》第三版——博韦,西斯特

《Linux内核源代码情景分析》

5.学习第五大知识结构——Linux驱动程序开发时,需要学习一下几点:

(1)字符设备驱动程序;

(2)总线、设备、驱动模型;

(3)硬件访问技术;

(4)中断处理;

(5)Input设备驱动;

(6)Platform驱动程序;

(7)PCI、USB驱动程序;

(8)网卡驱动程序;

(9)触摸屏驱动程序;

(10)串口驱动程序。

这个阶段所学习的驱动程序与第一阶段学习的驱动程序有本质的区别:第一个阶段学习的是裸机驱动程序,重在了解硬件,而这个阶段是在编写内核驱动模块,同时也是硬件驱动程序,它存在于操作系统内核当中,并给应用程序编程提供统一的编程界面,同时基本脱离硬件的具体操作。

这个阶段可学习如下书籍:

《Linux驱动开发入门与实战》——郑强

《LINUX设备驱动程序》——科波特

《精通Linux设备驱动程序开发》——温卡特斯瓦兰

至此,嵌入式Linux五大知识体系就学习完成了。

三、注意:

1.这五大知识体系是相互穿插,相互依赖的。大家学习的时候一定要按照先后顺序学习,如果后面学习的东西有不懂或不能理解的,一定要回头查阅以前学过的知识,或者上相关论坛与大虾们探讨;

2.在每个知识点中,我都罗列了至少两本书籍,但并不是每本书大家都必须去看,去研究,而是大家选择其中一本进行深入研究即可,知识我列出来的书相比较于其他书籍较好而已;另外每个部分的书籍是按照从易到难的顺序罗列的,大家可根据自己的具体情况进行学习;

3.学习过程是艰苦的,大家如果确定要学习嵌入式Linux,就必须下狠心,多努力,不能“三天打渔两天晒网”,至少应该保证一个阶段学完一个知识体系;另外还要注重多实践。

四、总结:学习嵌入式Linux,大家应该记住:按顺序,求踏实,不求快,少资料,分阶段,多实践!