嵌入式Linux七大学习步骤,你了解几个呢?(嵌入式linux基础教程)
一、为什么要学习嵌入式Linux?
学习嵌入式Linux的原因,归纳起来有以下三个:
- 兴趣:兴趣是学习东西最好的导师;
- 职业发展:嵌入式Linux开发有好的公司和好的职业发展;
- 高收入:嵌入式开发比平常的软件开发有更高的收入;
二、学习对象,是否适合我?
并不是任何人都适合来学习嵌入式Linux,要想学习嵌入式Linux,必须是计算机相关的学生或者毕业生,或者对计算机有强烈爱好并具有基本计算机知识的同学。
当前大学毕业生应具有的技能有:演算技能、交际能力、创新能力、与人合作、信息处理、外语应用、自我提高、解决问题及核心技能。
三、如何学好嵌入式Linux?
选择学习嵌入式Linux道路之后,要如何才能学好嵌入式Linux呢?要明白以下两点:
- 学什么?
- 如何学?
四、学什么?
嵌入式Linux所涵盖的知识面很广,需要按步骤、不间断的努力深入学习,才能有所成就。学习嵌入式Linux需要学习如下5大知识(按照学习步骤):
- 嵌入式处理器(ARM)与裸机程序开发;
- Linux系统管理;
- Linux应用程序开发;
- Linux驱动程序开发;
- Linux内核开发与系统移植。
五、如何学?
5.1 第一大知识结构——嵌入式微处理器与逻辑程序开发时,需要学懂一下几点
- ARM微处理器的两种工作模式(ARM模式和Thumb模式);
- ARM系统寄存器;
- ARM寻址方式;
- ARM汇编指令集;
- ARM环境C语言程序编程
- ==ARM中断与异常==
- ADS(或其他)集成开发环境;
- ==裸机程序开发(如串口、LCD、时钟、LED、按键、网卡驱动、音频驱动、flash驱动等)==
以上8点钟,第6和8点是非常重要的,而前5点则是基础。在这个阶段推荐看的书籍有:
- 语言编程类:
- ==《C语言程序设计》==——谭浩强
- 《C语言深度解剖》
- ==《C陷阱与缺陷》==
- ==《C专家编程》==
- ==《C Primer puls》==第五版——Slephen Prala
- 《高质量C编程指南》
- ==《程序员面试宝典》==
- ARM微处理器类:
- ==《ARM嵌入式系统开发——软件设计与优化》==——斯洛斯(Sloss,A.N.)
然后就是各种驱动程序编写时,用到什么样的芯片就查阅相关的芯片手册,如网卡DM9000,音频的UDA1341等。
5.2 第二大知识结构——Linux系统管理时,需要学懂一下几点
- Linux定制安装
- Linux命令详解(会熟练的运用)
- samba、nfs、tftp等服务器的配置与使用,以及Wireshark、Source Insight、Xshell、Ultraedit等软件的使用;
- Shell编程。
其中第2和第4点是最重要的,它将是学习以后的知识的一个最基础的技能。学会这些东西可以看一下两本书:
- 《Linux标准学习教材》——IT同路人
- 《Linux系统管理技术手册》——奈米斯,斯奈德,海因
5.3 第三大知识结构——Linux应用程序开发时,需要学懂一下几点
- GCC、GDB、Makefile;
- 文件、时间编程;
- 多进程、多线程程序设计;
- 进程间通讯;
- 网络编程;
- ==QT图形化应用程序开发==;
- == Android图形化应用程序开发==。
这个阶段的知识点都特别的重要,个人觉得除了第一点外,其他六点都需要下苦功夫学习,而第7和第8是这个阶段的最后两个也是最重要的,以后也可以直接应用于工程开发中。这个阶段可以学习一下两本书:
- 《Linux程序设计》第四版——马修(Matthew,N.),斯通斯(Stones,R.)
- 《UNIX环境高级编程》第二版——史蒂文斯,拉戈
5.4 第四大知识结构——Linux内核开发时,需要学习一下几点
- Linux内核配置与裁剪;
- Linux内核模块开发;
- 根文件系统的制作;
- ==进程子系统==;
- ==内存子系统==;
- ==Proc和sys文件系统==;
- ==系统调用==;
- ==内核定时器==;
- ==内核异常分析==;
这个阶段的知识非常的难,看书有时看上四五遍都无法理解,建议多去各种论坛上面看看,学习大家的经验。本知识中从第4点到第9点是Linux内核子系统的知识。这个阶段可以看一下两本书:
- 《深入理解LINUX内核》第三版——博韦,西斯特
- 《Linux内核源代码情景分析》
5.5 第五大知识结构——Linux驱动程序开发时,需要学习一下几点
- 字符设备驱动程序;
- 总线、设备、驱动模型;
- 硬件访问技术;
- 中断处理;
- Input设备驱动;
- Platform驱动程序;
- PCI、USB驱动程序;
- 网卡驱动程序;
- 触摸屏驱动程序;
- 串口驱动程序。
这个阶段所学习的驱动程序与第一阶段学习的驱动程序有本质的区别:第一个阶段学习的是裸机驱动程序,重在了解硬件,而这个阶段是在编写内核驱动模块,同时也是硬件驱动程序,它存在于操作系统内核当中,并给应用程序编程提供统一的编程界面,同时基本脱离硬件的具体操作。
这个阶段可学习如下书籍:
- 《Linux驱动开发入门与实战》——郑强
- 《LINUX设备驱动程序》——科波特
- 《精通Linux设备驱动程序开发》——温卡特斯瓦兰
至此,嵌入式Linux五大知识体系就学习完成了。
六、学习顺序?
由于嵌入式Linux知识架构非常多,也非常难,为了达到学习的真正效果,建议按照以下顺序进行学习:
- 嵌入式处理器与裸机程序开发;
- Linux系统管理;
- Linux应用程序开发;
- Linux内核开发基础;
- 嵌入式Linux环境搭建;
- Linux驱动程序开发;
- 深入学习Linux内核;
这里将学习的过程分为三个重要的阶段,大家可以根据自身的情况调整学习的时间和进度。
image
图1 嵌入式学习第一阶段
image
图2 嵌入式学习第二阶段
image
图3 嵌入式学习第三阶段
当然,就目前形式来说,一般的第三个阶段的学习转为了Java程序语言的学习和Android系统的开发上面了,这个根据个人的兴趣爱好分享发展,但是前面两个阶段是必须要熟练掌握的。
七、注意
根据个人的学习经验,得出如下几点需要注意:
- 这五大知识体系是相互穿插,相互依赖的。大家学习的时候一定要==按照先后顺序学习==,如果后面学习的东西有不懂或不能理解的,一定要回头查阅以前学过的知识,或者上相关论坛与大虾们探讨;
- 在每个知识点中,我都罗列了至少两本书籍,但并不是每本书大家都必须去看,去研究,而是大家==选择其中一本进行深入研究即可==,知识我列出来的书相比较于其他书籍较好而已;另外每个部分的书籍是按照从易到难的顺序罗列的,大家可根据自己的具体情况进行学习;
- 学习过程是艰苦的,大家如果确定要学习嵌入式Linux,就必须下狠心,多努力,不能“三天打渔两天晒网”,至少应该==保证一个阶段学完一个知识体系==;另外还要注重==多实践==。