您的位置首页>企业动态>

如何学习嵌入式Linux

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解如何学习嵌入式Linux问题。俗话说,万事开头难。刚开始的时候,是不是根本不知道怎

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解如何学习嵌入式Linux问题。

俗话说,万事开头难。刚开始的时候,是不是根本不知道怎么开始,因为一堆新名词,去图书馆看书找不到方向?它是arm、linux和uboot。我不知道从何说起。

下面跟着我一起学习设计嵌入式工程师日记。

简单来说,从arm基础到裸机编程,从uCOSII到linux,从基于linux的命令到shell编程,从u-boot到文件系统,最后到现在的linux驱动。从简单到复杂,从基础到高级,基本都是按照这个来的。

01第一阶段:嵌入式硬件基础和裸机程序开发

1.知识点:

(1)基本知识1)arm处理器、工作模式、寄存器、中断和异常、寻址模式和汇编指令集。

(2)熟悉ADS集成开发环境,为裸机程序开发做准备。

(3)裸机程序开发:LED、串口、LCD、触摸屏、NANDFLASH、IIC、IIS、DMA等。

2.过程和目的:

这个阶段的学习主要是熟悉嵌入式硬件,为以后的linux驱动打下基础。因为嵌入式主处理器架构是arm,所以我们借鉴arm。首先学习基础知识,然后在开发板上通过实践掌握。本阶段使用的数据主要包括:

(1) 《ARM嵌入式基础教程》本书重点介绍arm的基础知识。这本书是关于arm7的,但是arm的基本指令集和模型是一样的。

(2) 《嵌入式linux应用开发完全手册》本书主要介绍s3c2410接口模块,测试裸机时需要硬件知识。

3.花费的时间:大约两个月。

02第二阶段:linux基础和shell编程1。知识点:

(1)linux基础知识(2)linux安装和使用(3)linux常用命令(4)vi使用(5)简单的shell编程。

2.过程和目的:

这个阶段的学习主要是熟悉linux,会安装linux,了解Linux的基础知识,并且能够简单操作。最好一开始就在虚拟机上安装linux。安装开发板推荐的Fedora9,按照开发板提供的说明一步一步安装,然后在上面练习各种命令。

现阶段主要看《鸟哥的linux私房菜基础学习篇》。这本书有电子版,我们不需要全部看完。我们主要看前面对Linux基础知识和基本命令的描述。明白顺序就好。我记不太清了。以后用的时候再检查。这个阶段的主要目的是对linux有一个整体的了解,至少要知道一些基本的概念和一些基本的操作。

3.时间:一个月左右。

03第三阶段:linux应用基础开发1。知识点:(1)GCC,GDB,Make foundation (2)文件,时间编程(3)多进程和多线程编程(4)进程间通信。

2.过程和目的:

这个阶段的学习主要是关于linux应用程序的编写和调试,也是基础知识。主要目的是熟悉Linux。熟悉一些应用相关的概念,为以后打下基础。现阶段主要看《嵌入式Linux应用程序开发标准教程》。这本书非常详细地介绍了linux上的应用程序编程,并不难。最经典的《UNIX高级环境编程》更深入。刚开始读有点难。万事开头难,但开始还是很容易的。学完应用编程,就不用应用了。那些从事嵌入式linux行业的人需要基本技能。

3.时间:一个月左右

04第四阶段:uCOSII操作系统学习1。知识点:(1)嵌入式实时操作系统的概念和基础知识(2)阅读uCOSII源码(4)uCOSII操作系统(3)移植uCOSII操作系统(4)uCOSII操作系统的应用编程。

2.过程和目的:

这个阶段的学习主要是关于嵌入式实时操作系统。

统的基础,因为uCOSII是开源的,可以研究他的代码。对操作系统的任务调度以及资源管理有直观的认识。并且阅读他的源码能够提高自己的编程能力,规范自己的编程习惯。虽然提供了uCOSII的移植版本,但是自己实际移植一次能够有更深刻的认识。

这个操作系统比较简单,所以应用程序的编写就很重要,在上面实现几个功能还是有助于对系统的理解。这一阶段主要看的就是邵贝贝翻译的uCOSII作者所著的《嵌入式实时操作系统uCOS-II》,里面对操作系统的源码有详细的分析。看透这本书后就会对uCOSII有一个深入的了解。这一阶段的主要目的是了解操作系统的知识,比如任务调度,并发与竞态。还有一个目的就是锻炼自己的编程能力。因为如果看介绍操作系统原理的书会比较枯燥,我感觉阅读一个操作系统的源码比看一千本介绍原理的书来的实惠的多。

3.时间:大约一个月

05第五阶段:bootloader学习1.知识点:

(1)bootloader基础知识(2)u-boot基础与命令(3)u-boot移植

2.过程以及目的:

bootloader是一个linux嵌入式系统的不可缺少的部分。这一阶段的学习主要是了解bootloader的作用,以及通用bootloader---u-boot的知识,刚开始学会用u-boot的各种命令。然后分析u-boot的启动流程和Makefile以及u-boot加载内核过程。然后按照别人的步骤一步一步的移植内核,多做几遍以熟悉这个过程。然后在熟悉整个u-boot的基础上,独自完成u-boot的移植,并添加自己修改。这一阶段主要参考资料就是光盘自带的u-boot移植参考手册和一些网络上的文章。个人感觉u-boot移植这方面的网络资源相当的丰富。

3.时间:大约一个月

06第六阶段:文件系统学习1.知识点:

(1)linux文件系统的种类与作用(2)熟悉busybox的使用,以及linux系统启动过程(3)构建自己的根文件系统

2.过程以及目的:

文件系统也是一个linux嵌入式系统不可缺少的部分,这一阶段的学习主要是熟悉根文件系统的作用以及基础知识,并且自己构建自己的根文件系统。这一阶段所看的书有《构建嵌入式linux系统》,这本书详细讲解了嵌入式linux的所有元素,包括文件系统。这里主要看文件系统这块。我还参考了网上的一些文章。这里首先要熟悉基本的一些Linux文件系统,然后学习busybox的使用以及linux的启动过程,最后参考别人的一步一步来构建自己的文件系统。

3.时间:大约半个月

07第七阶段:嵌入式图形界面GUI1.知识点:(1)嵌入式图形界面GUI的种类与特点(2)minigui基础知识(3)minigui移植与程序编写

2.过程以及目的:

嵌入式图形界面GUI作为嵌入式上层系统的东西也是需要了解的,这里我只学习了minigui,因为QT是需要C++++的知识,而我没有学过C++,所以只看了minigui的相关知识。这个阶段的目的主要是熟悉一下嵌入式图形接界面的开发流程,因为以后也不打算搞应用。

只是熟悉一下嵌入式组成的一些方面。这里只要将minigui移植到板子上能跑hello程序就可以了。其他的也不用深入了解。通过移植minigui对linux上运行的软件以及函数库,程序运行原理,编译器都会有一个新的认识。

3时间:大约半个月08第八阶段:linux驱动程序基础知识

1.知识点:

(1)看完《LINUX设备驱动程序》除了网络驱动程序,tty驱动程序,块驱动程序这几章不看,其他的都要看完。(2)实验书中所有例程,要仔细分析结果,理解相关知识点。(3)就算是例子,程序编程习惯一定要统一,文档一定要规范。

2.过程以及目的

这一阶段的目的就是为了linux驱动打基础,《LINUX设备驱动程序》(第三版)也就是大家所说的ldd3,是最经典的一本讲linux驱动的书,一定要看而且多看几遍。第一次看很难看进去,感觉讲的晦涩难懂。但是多看几遍就会由豁然开朗的感觉。看完了书,然后就是实验书中的例子。3.时间:大约两个月

09第九阶段:linux驱动实战

1.知识点:

(1)通过led驱动理解杂项字符设备的注册与实现,并掌握MINI2440的IO操作过程。(2)通过button驱动程序掌握基本的中断实现方法。(3)掌握PWM驱动程序。(4)通过触摸屏驱动程序掌握input设备模型的实现。(5)掌握ADC驱动程序的设计(6)掌握看门狗,rtc驱动程序的设计(7)通过LCD驱动程序分析platform设备模型的实现。

2.过程以及目的:

这一阶段的学习主要是掌握实际的简单的驱动程序的实现与ldd3中的差别,并且分析一些linux子系统。通过这一阶段的学习,能够对linux驱动程序有更深入的认识。并且锻炼自己阅读海量代码的能力。这一阶段主要工作就是看代码,实验,看代码,实验,通过现象学习知识。

3.时间:大约一个月

10

第十阶段:深入理解linux内核与USB子系统的研究

‌前九个阶段完成了,自己感觉嵌入式Linux应该应该算是入门了。所以要开始计划第十个阶段了。这一阶段基本上要确定自己未来的发展方向了。因为现在嵌入式系统的标准接口都有USB,所以学会USB的相关知识是很有竞争力的。搞驱动的人对内核应该有一定的了解,所以《深入理解Linux内核》还是必须的。

这一阶段主要是学习USB协议,阅读linuxUSB子系统全部的代码,通过阅读代码加深对USB的理解,随后就是熟悉各种USB类协议,编写和移植USB驱动了。USB是我确定的方向,因为我想搞什么东西都要专一,什么都搞,什么也搞不好。所以我决定学习USB。决定以后从事嵌入式有关USB方面的工作。这一阶段的学习正在进行中,现在正在linuxUSB子系统浩瀚的代码中漫游。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。