微机原理:了解ARM微处理器的作业原理
操作体系原理:了解Linux操作体系的作业原理
电子技术根底:了解依据ARM的嵌入式设备的电路原理图,编写Linux驱动程序的根底
汇编言语:阅览、编写Bootloader和Linux内核源代码(包含驱动程序)
C言语:阅览、编写Bootloader和Linux内核源代码(包含驱动程序),阅览、编写Linux使用程序
C++言语:阅览、编写Linux图形使用程序
(Java言语:Android编程)
规划一个ARM+Linux设备,分为硬件规划和软件规划。硬件规划不必多说,软件规划是咱们评论的要点。依据ARM的嵌入式设备,实际上便是一种简化版的电脑加上特定功用的硬件。通用的PC在开机发动时,首要会运转主板上的BIOS,然后才发动操作体系;对应于ARM设备,开机时首要发动 Bootloader,初始化硬件,然后Bootloader将Linux内核(2MBytes左右)搬到内存中,然后Linux在内存中运转,接收整个设备的办理运转。所以学习嵌入式Linux,首要要学习Bootloader。
Linux用的Bootloader品种比较多,都是开放源代码的,现在比较盛行用u-boot。Bootloader的源代码是用汇编言语和C言语编写的,所以要有汇编言语和C言语根底,汇编言语代码在悉数代码中仅占1%的份额,绝大部分代码是C言语代码。Bootloader代码经过编译器编译成ARM可执行的映像文件,巨细在几十kBytes至几百kBytes。这个映像文件经过专用的接口(JTAG)和专用的软件烧写到ARM的 FlashROM上。在网上能够下载Bootloader源代码,由于每一种嵌入式设备的硬件不尽相同,所以下载来的源代码不一定彻底适用于当时的硬件,要依据硬件的装备对Bootloader源代码进行一些修正,这一步叫做Bootloader的移植。
学完Bootloader移植,下一步便是Linux内核的移植和驱动程序的编写。与Bootloader相似,Linux内核的移植也是依据硬件状况对Linux内核源代码进行修正,让Linux内核能在硬件开发板上运转起来。Linux内核源代码可到相关网站下载,移植的进程主要是针对中心硬件(MPU、内存、FlashROM)修正Linux内核源代码,让Linux内核能在开发板上运转起来。Linux内核源代码修正完结后,经过编译生成 Linux内核映像文件,可在开发板的内存中运转;Linux内核映像文件并不大,一般在2MBytes左右。Linux内核移植完结后,尽管Linux 已可在硬件上运转,可是许多外围硬件(如LCD、键盘、鼠标等)并没有被驱动起来,所以下一步便是外围硬件的驱动程序编写。与PC上常用的Windows 操作体系不同,Linux的驱动程序是在内核里边的,不能像Windows那样方便地装置硬件驱动程序。Linux硬件驱动程序代码写好后,放在内核源代码中,再从头编译Linux内核,从头运转内核后才能在Linux上操作对应硬件。
Linux的文件体系与Windows也不相同。Windows的内核和文件体系是一体的,在WIndows的资源办理器中可检查悉数内核文件和使用程序文件。Linux内核是一个独自的文件,而一切使用程序却都放在一个称为文件体系的文件包内,这样做的优点是内核和使用程序是分割开的,利于内核的安稳,即便使用程序溃散了,也不会影响到内核,在文件体系中处理使用文件时也不会误删除内核,所以Linux比Windows安稳得多。相似于 Windows中的磁盘分区,Linux内核映像占一个独自分区,文件体系有必要在其他分区上。Linux内核运转今后,会寻觅文件体系对应的那个包(分区),并挂载这个包,称作文件体系挂载。文件体系挂载上今后,能够用与Windows资源办理器相似的办法办理使用程序,但办理不了内核的任何细节。文件体系里的一切文件都是经过目录和文件方法办理的。
再下来便是使用程序的编写了。Linux的使用程序分有图形显现的使用程序和无图形显现的使用程序。无图形显现的使用程序运转起来就像在 Windows的“命令提示符”界面中运转,不需求在显现屏上显现任何内容,或仅需求显现一些简略字符,这类程序在嵌入式范畴用处广泛,由于许多嵌入式设备是没有LCD显现屏的。有图形显现的使用程序是在有LCD显现屏的嵌入式设备上运转的,例如手机。
无图形显现的使用程序主要用C言语编写,直接使用Linux内核供给的编程接口完结各种功用。C言语程序能够完成许多功用,就算是多线程、多进程也都可轻松搞定。Linux内核供给的编程接口都是C言语可直接调用的函数,实际上Linux这种操作体系编程便是C言语编程。
有图形的使用程序编写相对杂乱一些。Linux自身的编程是依据C言语的,要想让Linux有图形显现,有必要给Linux加上一个图形用户界面(GUI),Linux的GUI现在有许多,桌面Linux用的有Gnome、KDE等,嵌入式Linux用Qt、MiniGUI等。这些GUI实际上都是在内核供给的C编程接口的根底上封装一些图形接口,然后做成图形库供使用程序调用。Linux的GUI多是开放源代码的,也有一些商用GUI不开放源代码。咱们能够下载GUI的源代码,然后用编译器编译成库文件,然后将这些库文件放到文件体系的特定目录下。GUI实际上是使用程序的一部分,而不属于 Linux内核。GUI供给的编程接口多为C/C++接口,所以图形使用程序常用C言语或C++言语编写。也有特别的如Android,供给的是Java 编程接口。所以图形使用程序编写需求把握C/C++编程言语(Java言语)。
经过上面的介绍,想学嵌入式Linux的朋友们,能够依据自己的状况以及作业的要求,决议自己在嵌入式Linux上的发展方向,或去弥补自己的缺乏,以便进一步学习嵌入式Linux。