你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

学嵌入式Linux的基础

[复制链接]
gaosmile 发布时间:2020-5-9 18:21

  微机原理:理解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。


收藏 评论1 发布时间:2020-5-9 18:21

举报

1个回答
likang1202 回答时间:2020-5-10 17:09:15
学习了

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版