嵌入式linux学习之路

非计算机专业,导师基本做单片机的项目,所以基本靠自学,经过两年实践,证明该学习路线基本可靠
所以分亨给对嵌入式Linux感兴趣的学弟学妹
要学的东西真的很多,这里仅提供入门之道,分为基础知识和实践两个部分

第一部分,专业知识
C语言学习
《C和指针》
《C专家编程》
《C陷阱与缺陷》
上面三本书,认真看吧,特别是C和指针,可以当教材看,认真做做书后习题,我从这本书中受益菲浅
后两本用于提高,比如可以知道: char * const*(*next)() 是个啥东西, i+++j为什么是 (i++)+j之类
还有一些常见的面试试如判断一个链表是否有环, 怎么判断一个数是有符号数还是无符号数,书中都有涉及
打好C语言基础,不管是以后读源代码,还是写程序,或者应付笔试都是很重要的

数据结构与算法
《数据结构基础(C语言版)》
《算法设计与分析》 王晓东
数据结构那本书对我最大的帮助应该在于理解递归吧,这对以后学习动态规化和分治算法都很有帮助
当然也熟悉了树,链表,栈,排序算法等
个人比较得意的是有一次笔试中出现了字符串匹配算法,自己写了个KMP算法,所以学的时侯认真学,不要总想学这个到底有没有用。
嵌入式对算法要求不是很高,理解动态规划和分治即可

计算机系统结构
《深入理解计算机系统》
两个面试问题:程序优化有哪些方法, 一个while循环里有很多if语句,对程序有什么影响,看完这本书,你可以找到答案
另外,书中对有符号数无符号数,汇编,程序的链接,caceh,流水线,虚拟存储管理都得介绍得比较详细
最后书里有个栈溢出的实验,值得一试

Linux编程入门
《Unix操作系统设计》 Maurice J.bach著 陈葆珏 等译 
《Unix/Linux编程实践教程》  Burce Molay著 杨宗源 等译 
这两本书虽然都比较老了,但是都相当经典
一个操作系统理论,一个编程实践,对我帮助最大的是对文件系统的描述及一些相关的系统调用,fifo,信号的编程等等
可以说是这本书带我走进了Linux 的大门
如果以上两本书找不到,市面上新出了一些Linux编程的书,貌似很多都不错,自己上China-pub上看看

Linux 编程进阶
《Unix环境高级编程》
《Unix 网络编程》
过于经典,不多作介绍

内核学习
《Linux内核设计与实现》
《深入理解Linux内核》 第三版
过于经典,不多作介绍,只强调一点,多读几遍

驱动学习
《Linux设备驱动程序》
《Linux设备驱动开发详解》
一本国外的经典,最注重驱动整体框架的分析,同时包括与驱动程序相关的东西,如同步机制,内存管理,中断等等
一本国内人的经典,前面一部分对上一本书作了一个总结,后面一部分是具体的外设驱动

arm学习
《ARM体系结构与编程》
《ARM嵌入式系统开发-软件设计与优化》
第一本书的ARM指令讲得很好,第二本的中断及内存管理很到位,书中还介绍了一些程序优化的方法

另外还有一些书籍,可以根据自己兴趣看看:
《C++ Primer》讲得很全,适合当参考书
《TCP/IP 详解 (卷一)》个人觉得比《用TCP/IP进行网际互联》更适合程序员读,作者做了很多实验,并且贴出了实验结果,相当直观
《程序员的自我修养-链接、装载与库》我从中学到一些位置无关代码还有动态库的装载的知识
《编程珠玑》、《编程之美》开拓思维,还有一些常见的算法题,都可以从中找到原型

第二部分,实践
你可以不参加培训班,但你必须得有开发板,我是自己买的mini2440开发板
学习过程如下:
1.理解ELF文件格式:代码段,数据段之类,理解链接地址,运行地址(记不太清了),网上有经典的资料,名字好像是《arm学习报告一二三》
2.按照 《2410开发完全流程》走一遍,就是把2440当单片机用,里面有SDRAM,MMU,GPIO,NADN Flash, 中断的实验,比较不错
3.学习vivi, uboot, 最经典的资料就是《vivi开发笔记》
   上面提到的资料,网上都可以免费下载,在这里感谢作者们的无私奉献
4.终于可以从事内核的移植,驱动的开发了,推荐的教程是韦东山的《嵌入式Linux应用开发完全手册》这本书相当实用,所谓实用,就是你按照它的步骤编译内核,根文件系统,移植Uboot是可以成功的(不要以为这些东西很简单,一些莫名其妙的错误会让你束手无策)
5.最后就是不断的编程,看源代码,最好参与些相关的项目

以上只是我个人的方法,大家学习习惯可能不一样,情况也不一样,所以仅供参考
但所列的书籍都是相当经典的

最后,把口语练好,要不,你将错过以下公司:intel,AMD, Marvell
成绩能考好点就考好点吧,在找工作时还是很有用的,基本上说找工作成绩不重要的,大部分都是成绩不好的,所以他们体会不到这个的重要性(这么说可能也有些偏激,但基本是实事)

你可能感兴趣的:(数据结构,编程,linux,算法,嵌入式,linux内核)