当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 嵌入式Linux+Android学习路线

嵌入式Linux+Android学习路线 时间:2020-05-20      来源:原创

在移动互联网发展的今天,谈起嵌入式Linux+Android系统想必大家都不陌生,那么嵌入式Linux+Android系统包含哪些东西呢?申老师带领大家一起研究下。

① 电脑一开机,那些界面是谁显示的?

是BIOS,它做什么?一些自检,然后从硬盘上读入windows并启动它。类似的这个BIOS对应于嵌入式Linux+Android里的bootloader。这个bootloader要去Flash上读入内核,并启动它。

② 启动windows的目的是什么?

当然运行应用程序以便上网、聊天什么的了。这些上网程序、聊天程序在哪?

在C盘、D盘上, 所以,windows要先识别出C盘、D盘,在Linux下我们称之为根文件系统。

③ windows能识别出C盘、D盘,那么肯定有读写硬盘的能力,这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。

嵌入式Linux+Android能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。

简单地说,嵌入式linux系统里含有bootloader、内核、驱动程序、根文件系统、应用程序这5大块。而应用程序,我们又可以分为:C/C++、Android

所以,嵌入式Linux/Android系统包含以下6部分内容:

① bootloader

② Linux内核

③ 驱动程序

④ 使用C/C++编写的应用程序

⑤ Android系统本身

⑥ Android应用程序

Android跟Linux的联系实在太大了,它的应用是如此广泛,学习了Linux之后没有理由停下来不学习Android。在大多数智能设备中,运行的是Linux操作系统;它上面要么安装有Android,要么可以跟Android手机互联。现在,Linux+Android已成标配。

怎么学习嵌入式Linux+Android操作系统?本文假设您是零基础,以实用为主,用最快的时间让你入门; 后面也会附上想深入学习时可以参考的资料。在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改操作系统本身。

① 操作系统具有进程管理、存储管理、文件管理和设备管理等功能,这些核心功能非常

稳定可靠,基本上不需要我们修改代码。我们只需要针对自己的硬件完善驱动程序

② 学习驱动时必定会涉及其他知识,比如存储管理、进程调度。当你深入理解了驱动程

序后,也会加深对操作系统其他部分的理解

③ Linux内核中大部分代码都是设备驱动程序,可以认为Linux内核由各类驱动构成,但是要成为该领域的高手,一定要深入理解Linux操作系统本身,要去研读它的源代码。

学习驱动程序之前的基础知识:

1.C语言

只要是理工科专业的,似乎都会教C语言。我见过很多C语言考试90、100分的一上机就傻了,我怀疑他们都没在电脑上写过程序。理论再好,没有实践不能干活的话,公司招你去干嘛?反过来,实践出真知,学习C语言,必须练练练、写写写!当你掌握基本语法后,就可以在电脑上练习一些C语言习题了;当你写过几个C程序后,就可以进入下一阶段的裸机开发了。

① 不需要太深入作为快速入门,只要你会编写“Hello, world!”,会写冒泡,会一些基础的语法操作,暂时就够了。指针操作是重点,多练习;不需要去学习过多的数据结构知识,只需要掌握链表操作,其他不用学习,比如:队列、二叉树等等都不用学;不需要去学习任何的函数使用,比如文件操作、多线程编程、网络编程等等;这些知识,在编写Linux应用程序时会用,但是在操作系统特别是驱动学习时,用不着!永往直前吧,以后碰到不懂的C语言问题,我们再回过头来学习, 在后续的“裸机开发”中,会让你继续练习C语言,那会更实战化, C语言是在写代码中精进的。

② 可以在Visual Studio下学习,也可以在Linux下学习,后者需要掌握一些编译命令

2.PC Linux基本操作

对于PC Linux,我们推荐使用Ubuntu,在它上面安装软件非常简便, 我们的工作模式通常是这样:在Windows下阅读、编写代码,然后把代码上传到PC Linux去编译。实际上,Ubuntu的桌面系统已经很好用了,我们拿到各种智能机可以很快上手,相信Ubuntu的桌面系统也可以让你很快上手。为了提高工作效率,我们通常使用命令行来操作Ubuntu。不用担心,你前期只需要掌握这几条命令就可以了,它们是如此简单:

① cd : Change

Directory(改变目录)

cd 目录名 // 进入某个目录

cd .. // cd “两个点”:返回上一级目录

cd - // cd “短横”:返回上一次所在目录

② pwd : Print Work Directory(打印当前目录 显示出当前工作目录的绝对路径)

③ mkdir : Make

Directory(创建目录)

mkdir abc // 创建文件夹abc

mkdir -p a/b/c // 创建文件夹a,再a下创建文件夹b,再在b下创建文件夹c

④ rm : Remove(删除目录或文件)

rm file // 删除名为file的文件

rm -rf dir // 删除名为dir的目录

⑤ ls : List(列出目录内容)

⑥ mount : 挂载

mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mnt

mount -t yaffs /dev/mtdblock3 /mnt

⑦ chown : Change

owner(改变文件的属主,即拥有者)

chown book:book /work -R // 对/work目录及其下所有内容,属主改为book用户,组改为book

⑧ chmod : Change mode(改变权限),下面的例子很简单粗暴

chmod 777 /work -R // 对/work目录及其下所有内容,权限改为可读、可写、可执行

⑨ vi : Linux下最常用的编辑命令,使用稍微复杂,请自己搜索用法。

要练习这些命令,你可以进入Ubuntu桌面系统后,打开终端输入那些命令;或是用SecureCRT、putty等工具远程登录Ubuntu后练习。

3.硬件知识

我们学习硬件知识的目的在于能看懂原理图,看懂通信协议,看懂芯片手册;不求能设计原理图,更不求能设计电路板。对于正统的方法,你应该这样学习:

① 《微机原理》,理解一个计算机的组成及各个部件的交互原理。

② 《数字电路》,理解各种门电路的原理及使用,还可以掌握一些逻辑运算(与、或等)。

③ 《模拟电路》

4.Windows下的单片机开发

很多学校都开通了单片机的课程,很多人都是从51单片机、AVR单片机,现在比较新的STM32单片机开始接触嵌入式领域,并且使用Windows下的开发软件,比如keil、MDK等。问题来了,要不要专门学习Windows下的单片机开发?

① 如果这是你们专业的必修课,那就学

② 如果你的专业跟单片机密切相关,比如机械控制等,那就学

③ 如果你只是想从单片机入门,然后学习更广阔的嵌入式Linux,那么放弃在Windows学习单片机,理由如下:

① Windows下的单片机学习,深度不够

Windows下有很好的图形界面单片机开发软件,比如keil、MDK等。

它们封装了很多技术细节,比如:

你只会从main函数开始编写代码,却不知道上电后第1条代码是怎么执行的;

你可以编写中断处理函数,但是却不知道它是怎么被调用的;

你不知道程序怎么从Flash上被读入内存;

也不知道内存是怎么划分使用的,不知道栈在哪、堆在哪;

当你想裁剪程序降低对Flash、内存的使用时,你无从下手;

当你新建一个文件时,它被自动加入到工程里,但是其中的机理你完全不懂

② 基于ARM+Linux裸机学习,可以学得更深,并且更贴合后续的Linux学习。

实际上它就是Linux下的单片机学习,只是一切更加原始:所有的代码需要你自己来编写;哪些文件加入工程,需要你自己来管理。在工作中,我们当然倾向于使用Windows下更便利的工具,但是在学习阶段,我们更想学习到程序的本质。一切从零编写代码、管理代码,可以让我们学习到更多知识:

你需要了解芯片的上电启动过程,知道第1条代码如何运行;

你需要掌握怎么把程序从Flash上读入内存;

需要理解内存怎么规划使用,比如栈在哪,堆在哪;

需要理解代码重定位;

需要知道中断发生后,软硬件怎么保护现场、跳到中断入口、调用中断程序、恢复现场;

你会知道,main函数不是我们编写的第1个函数;

你会知道,芯片从上电开始,程序是怎么被搬运执行的;

你会知道,函数调用过程中,参数是如何传递的;

你会知道,中断发生时,每一个寄存器的值都要小心对待;

你掌握了ARM+Linux的裸机开发,再回去看Windows下的单片机开发,会惊呼:怎么那么简单!并且你会完全明白这些工具没有向你展示的技术细节。

驱动程序=Linux驱动程序软件框架+ARM开发板硬件操作,我们可以从简单的裸机开发入手,先掌握硬件操作,并且还可以:

① 掌握如何在PC Linux下编译程序、把程序烧录到板子上并运行它

② 为学习bootloader打基础:掌握了各种硬件操作后,后面一组合就是一个bootloader

以上是我对嵌入式Linux+Android开发学习过程的见解,希望对大家有所帮助。

上一篇:STM32开发环境搭建

下一篇:QT基础

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2020 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号京公海网安备11010802025203号

回到顶部