嵌入式linux可以说是嵌入式学习的重点也是嵌入式学习的难点,很多人在学习嵌入式学习到这一步,就会觉得很迷茫,不知道如何去学,问别人,别人也不会给你讲的很详细,有时候你的很多知识还没掌握好,没有计划的去学习,到头来还是模糊不清,感觉又得学什么arm,linux,又是什么uboot,就会感觉这都是什么,学的都乱的不行了,那么学嵌入式linux到底从何学起,一起来跟着我这个老鸟一起来学习。
我们先来简单的了解一下,嵌入式linux学习线路很简单,首先从arm基础知识到裸机编程,从uCOSII到linux,从linux基础的命令到shell编程,从u-boot到文件系统,最后到现在的linux驱动程序。从简单到复杂,从基础到高级基本是按照这个来的。
刚开始我想你就应该明白了吧:那就是嵌入式硬件基础以及裸机程序开发
在这一阶段你总共要学这3点:
(1) arm处理器基础知识,工作模式,寄存器,中断与异常,寻址方式,汇编指令集
(2) 裸机程序开发:LED,串口,LCD,触摸屏,NANDFLASH,IIC,IIS,DMA等
(3) 熟悉ADS集成开发环境为裸机程序开发做准备
学习完这几点以后,就是要熟悉嵌入式的硬件,为以后的linux驱动打基础。因为嵌入式主打处理器架构就是arm,所以针对arm来学习。首先学习基础知识,然后通过在开发板上的练习来掌握。这一阶段所用的资料主要有:
(1) 《ARM嵌入式基础教程》 这本书主要看arm基础的知识。这本书是讲arm7的,但是arm的基础的指令集以及模型是一样的。
(2) 《嵌入式linux应用开发完全手册》 这本书主要看介绍s3c2410接口模块的部分,实验裸机的时候需要硬件的知识。
在这一阶段你要花费:大约两个月的时间来学。
接下来:linux基础以及shell编程
这一阶段你需要掌握:
(1) linux基础知识
(2) linux安装与使用
(3) linux常用命令
(4) vi使用
(5) 简单shell编程
学习这个就是让你:熟悉linux,会安装linux,了解Linux的基础知识,会简单的操作。刚开始安装linux还是在虚拟机上安装比较好,安装开发板推荐的Fedora9,按照开发板配套的说明一步一步的安装,然后在上面练习各种命令。
推荐给你看《嵌入式Linux基础教程》《Linux Shell编程从初学到精通》
3.时间:大约一个月。
第三阶段:linux应用程序基础开发
1.知识点:
(1) GCC,GDB,Make 基础
(2) 文件,时间编程
(3) 多进程,多线程程序设计
(4) 进程间通信
2. 过程以及目的:
这一阶段的学习主要是了解linux应用程序的编写调试,也都是基础知识,主要目的还是熟悉Linux。熟悉其中应用程序有关的一些概念,为以后打基础。这一阶段主要看了《嵌入式Linux应用程序开发标准教程》,这本书对linux上应用程序编写讲的很详细,而且不是很难,那本最经典的《UNIX高级环境编程》讲的比较深入,刚开始看有点难,万事开头难还是从简单的开始。学习应用编程以后也不一定搞应用,从事嵌入式linux行业的人,这是必须的基本技能。
3. 时间:大约一个月
第四阶段:uCOSII操作系统学习
1.知识点:
(1)嵌入式实时操作系统的概念以及基础知识
(2)uCOSII操作系统源代码阅读
(3)移植uCOSII
(4)uCOSII操作系统应用编程
2.过程以及目的:
这一阶段的学习主要是了解嵌入式实时操作系统的基础,因为uCOSII是开源的,可以研究他的代码。对操作系统的任务调度以及资源管理有直观的认识。并且阅读他的源码能够提高自己的编程能力,规范自己的编程习惯。虽然提供了uCOSII的移植版本,但是自己实际移植一次能够有更深刻的认识。
这个操作系统比较简单,所以应用程序的编写就很重要,在上面实现几个功能还是有助于对系统的理解。这一阶段主要看的就是邵贝贝翻译的uCOSII作者所著的《嵌入式实时操作系统uCOS-II》,里面对操作系统的源码有详细的分析。看透这本书后就会对uCOSII有一个深入的了解。这一阶段的主要目的是了解操作系统的知识,比如任务调度,并发与竞态。还有一个目的就是锻炼自己的编程能力。因为如果看介绍操作系统原理的书会比较枯燥,我感觉阅读一个操作系统的源码比看一千本介绍原理的书来的实惠的多。
3.时间:大约一个月
再来就是:bootloader学习
你需要从这几个方面来入手:
(1)bootloader基础知识
(2)u-boot基础与命令
(3)u-boot移植
学习这个你需要达到:了解bootloader的作用,以及通用bootloader---u-boot的知识,刚开始学会用u-boot的各种命令。然后分析u-boot的启动流程和Makefile以及u-boot加载内核过程。然后按照别人的步骤一步一步的移植内核,多做几遍以熟悉这个过程。然后在熟悉整个u-boot的基础上,独自完成u-boot的移植,并添加自己修改。这一阶段主要参考资料就是光盘自带的u-boot移植参考手册和一些网络上的文章。个人感觉u-boot移植这方面的网络资源相当的丰富。
大约需要一个月来学习
第六阶段:文件系统学习
1.知识点:
(1)linux文件系统的种类与作用
(2)熟悉busybox的使用,以及linux系统启动过程
(3)构建自己的根文件系统
2.过程以及目的:
文件系统也是一个linux嵌入式系统不可缺少的部分,这一阶段的学习主要是熟悉根文件系统的作用以及基础知识,并且自己构建自己的根文件系统。这一阶段所看的书有《构建嵌入式linux系统》,这本书详细讲解了嵌入式linux的所有元素,包括文件系统。这里主要看文件系统这块。我还参考了网上的一些文章。这里首先要熟悉基本的一些Linux文件系统,然后学习busybox的使用以及linux的启动过程,最后参考别人的一步一步来构建自己的文件系统。
3.时间:大约半个月
嵌入式图形界面GUI也是需要涉及学的
在这个点你需要学:
(1)嵌入式图形界面GUI的种类与特点
(2)minigui 基础知识
(3)minigui 移植与程序编写
嵌入式图形界面GUI作为嵌入式上层系统的东西也是需要了解的,这里我只学习了minigui,因为QT是需要C++的知识,而我没有学过C++,所以只看了minigui的相关知识。这个阶段的目的主要是熟悉一下嵌入式图形接界面的开发流程,因为以后也不打算搞应用。
只是熟悉一下嵌入式组成的一些方面。这里只要将minigui移植到板子上能跑hello程序就可以了。其他的也不用深入了解。通过移植minigui对linux上运行的软件以及函数库,程序运行原理,编译器都会有一个新的认识。
大约半个月来学
第八阶段:linux驱动程序基础知识
1.知识点:
(1)看完《LINUX设备驱动程序》除了网络驱动程序,tty驱动程序,块驱动程序这几章不看,其他的都要看完。
(2)实验书中所有例程,要仔细分析结果,理解相关知识点。
(3)就算是例子,程序编程习惯一定要统一,文档一定要规范。
2.过程以及目的
这一阶段的目的就是为了linux驱动打基础,《LINUX设备驱动程序》(第三版)也就是大家所说的ldd3,是最经典的一本讲linux驱动的书,一定要看而且多看几遍。第一次看很难看进去,感觉讲的晦涩难懂。但是多看几遍就会由豁然开朗的感觉。看完了书,然后就是实验书中的例子。
3.时间:大约两个月
第九阶段:linux驱动实战
1. 知识点:
(1)通过led驱动理解杂项字符设备的注册与实现,并掌握MINI2440的IO操作过程。
(2)通过button驱动程序掌握基本的中断实现方法。
(3)掌握PWM驱动程序。
(4)通过触摸屏驱动程序掌握input设备模型的实现。
(5)掌握ADC驱动程序的设计
(6)掌握看门狗,rtc驱动程序的设计
(7)通过LCD驱动程序分析platform设备模型的实现。
2.过程以及目的:
这一阶段的学习主要是掌握实际的简单的驱动程序的实现与ldd3中的差别,并且分析一些linux子系统。通过这一阶段的学习,能够对linux驱动程序有更深入的认识。并且锻炼自己阅读海量代码的能力。这一阶段主要工作就是看代码,实验,看代码,实验,通过现象学习知识。
3. 时间:大约一个月
最后就是linux内核与USB子系统的研究
前面你已经学的差不多了,那么就算是初入门了,这一阶段基本上要确定自己未来的发展方向了。因为现在嵌入式系统的标准接口都有USB,所以学会USB的相关知识是很有竞争力的。搞驱动的人对内核应该有一定的了解
这一阶段主要是学习USB协议,阅读linux USB子系统全部的代码,通过阅读代码加深对USB的理解,随后就是熟悉各种USB类协议,编写和移植USB驱动了。
看了这么详细的嵌入式linux学习步骤,你是否学会了呢,你可以跟着这个步骤一点一点的学习,那么你就可以迈入嵌入式linux的大门了。如果想要更精通,那么你就需要深入学习,先掌握上面这些,对以后的深入学习还是很有帮助的,还有,学习嵌入式linux切记要理论与实际相结合,这样才能学习更好哦。