一, 为什么要学习嵌入式 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, 就必须下狠心, 多努力, 不能 "三天打渔两天晒网", 至少应该 == 保证一个阶段学完一个知识体系 ==; 另外还要注重 == 多实践 ==.
八, 总结
学习嵌入式 Linux, 大家应该记住: 按顺序, 求踏实, 不求快, 少资料, 分阶段, 多实践!
祝大家在学习嵌入式 Linux 的道路上一帆风顺!-- 张栖银
九, 一些好的论坛和网站
Linux 入门到精通 http://os.yesky.com/linuxstudy/
Linux 论坛 http://www.linuxsir.org/main/
Linux 时代 http://bbs.chinaunix.net/linux.php
EDN 工程师的咨询中心与互动社区 http://www.ednchina.com/
中文数据手册, 芯片资料下载 http://www.alldatasheet.cn/
交叉编译工具下载 http://www.busybox.net/downloads/
代码研究所 http://www.180code.com/index.asp
来源: http://www.jianshu.com/p/d13ef54da62f