嵌入式LINUX系统开发入门学习步骤和技能总结

嵌入式LINUX系统开发入门学习步骤和技能总结

对于很多学习嵌入式LINUX系统开发的人来说,经验和技巧是很重要的,要不然就会落得一个事倍功半的效果。对于一个初学者或是一个零基础的人来说,该从哪里着手学习,该买那种参考书?

这些问题也一直困扰着很多想在嵌入式LINUX系统开发有一番作为的人群,为此深圳达内福田培训中心的老师们就嵌入式LINUX系统开发入门学习的步骤和经验技巧做了些简单的总结,希望可以帮助到更多这方面有需求的人群。

首先就是跟着深圳达内福田培训老师们来了解下嵌入式LINUX系统开发入门学习的基本步骤:

1.Linux操作系统核心

课程主要包括Linux 的基本命令和linux培训基础编程知识,包括Linux的文件操作和目录操作命令,VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具等知识,为后续嵌入式linux学习做好准备。

2.C语言核心

讲解在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。C语言在嵌入式软件设计中的地位相当重要,学好C语言和数据结构将能为后续的学习、开发工作打下坚实基础。

3.Linux编程核心

将了解到Linux系统中的进程的概念,从内核的角度了解进程的原理和实现。同时会掌握Linux下守护进程的编写方法,了解Linux下几种进程间通讯的方法,并具备编写进程间通讯编程的能力。

4.ARM体系结构

了解ARM体系结构及工作原理,掌握ARM指令集,学会操作ARM处理器的基本方法。ARM处理器在嵌入式系统中有着广泛应用,消费类市场几乎90%以上产品都使用ARM处理器,掌握基于ARM的嵌入式软件开发,学员可以有更为广阔的用武之地。

5.嵌入式Linux移植

使学员快速掌握嵌入式系统开发的流程,系统移植的方法,Bootloader的原理,可以编写自己的Bootloader。学习本课程的学员能够从事嵌入式系统相关的项目开发。

学习嵌入式LINUX开发,必须注意学习的方式和方法!就把这个嵌 入式开发板当作一台WINDOWS PC,就像用VC一样在上面做开发(只是 开发模式由原来完全的本地开发变成宿主机--目标板的模式了)。 绝对不要去盲目阅读LINUX内核分析之类的书籍,对于初学者一两年内根本用不到这个!就像在WINDOWS下开发永远不要关心WINDOWS内核一个道理,不要因为LINUX

内核是源代码开放的,就非要去研究LINUX内核。

在嵌入式板卡上做任何稍微复杂些的工作,心里没底的话,就一定养成先在REDHAT LINUX PC测试的好习惯。无论你做GPRS/CDMA/PPP/ADSL拨号还是做USB无线网卡驱动,还是

SAMBA/VPN/SNMP等协议软件,都先在REDHAT LINUX 上配置好,测试通过有了感觉之后再到嵌入式上试,因为ARMLINUX跟REDHAT LINUX对于我们开发人员而言几乎没有任何区别!切忌冒进! 不要试图去通读CPU的manual,没有用的,就像不要为了做嵌入式LINUX就要通读LINUX内核源代码分析一个道流。以目前实际的工作为主线,涉及到什么再去大致了解一下相关内容,例如我们第二步要做MODULES形式的驱动,那么这时去大致翻翻那本《LINUX驱动开发》一书的几页还是会有些帮助的,但也没有必要全部通读!

除此之外深圳达内福田培训中心还有更多针对800多个核心知识点,近200万字的在线文档,近20xx道针对所有知识点的在线测试近,200道课后作业描述文档及作业在线评测平台等共各个学员更加深入的学习,对于此也可以打电话咨询下0755-82353533。

如果励志成为一名真正的嵌入式软件工程师一些必要的培训还是需要的。

 

第二篇:嵌入式Linux实时操作系统习题总结

第1章

1.嵌入式系统是指操作系统和功能软件集成于计算机硬件系统之中。嵌入式系统一般有3个主要的组成部分:硬件、实时操作系统以及应用软件。

2.嵌入式系统的三要素是嵌入、专用、计算机;即以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 。

3. 目前国际较为知名的有:VxWorks、NeutrinoRTOS、Nucleus Plus、 OS/9、VRTX、LynuxOS,RTLinux、BlueCat RT等。

4.嵌入式系统一般由硬件层、中间层、软件层和功能层组成。其作用分别如下:

(1)硬件层 :由嵌入式微处理器、外围电路和外设组成。操作系统和应用程序都可以固化在ROM或者Flash中。为方便使用,有的模块在此基础上增加了LCD、键盘、USB接口,以及其他一些功能的扩展电路。

(2)中间层 :硬件层与软件层之间为中间层,其作用将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关;

(3)软件层 :主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。操作系统是一个标准的内核,将中断、I/O、定时器等资源都封装起来,以方便用户使用。

(4)功能层 :由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。

5.非占先式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了。

6.在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称硬实时系统。在弱实时系统中,超时却不会发生致命的错误。其实时性的要求比硬实时系统要差一些。

7.嵌入式系统的设计步骤及各部分的主要工作如下。

(1)需求分析阶段,罗列出用户的需求;

(2)体系结构设计阶段,描述系统的功能如何实现;

(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现;

(4)系统集成,把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误;

(5)系统测试,对设计好的系统进行测试,看其是否满足给定的要求。

8.Linux作为嵌入式操作系统的优势主要有以下几点:

(1)可应用于多种硬件平台。

(2)Linux的高度模块化使添加部件非常容易。

(3)Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件的一种通用操作系统。

(4)Linux可以随意地配置,不需要任何的许可证或商家的合作关系。

(5)Linux带有Unix用户熟悉的完善的开发工具。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。

9. Linux执行进程调度一般是在以下情况发生的:

(1)正在执行的进程运行完毕;

(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态;

(3)正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;

(4)执行中的进程提出I/O请求后被阻塞;

(5)系统分配的时间片已经用完;

(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级。

第4章

1、Linux 内核的编译菜单有好几个版本,运行:

(1)make config:进入命令行,可以一行一行的配置,但使用不十分方便。

(2)make menuconfig:大多数开发人员使用的Linux 内核编译菜单,使用方便。

(3)make xconfig:在2.4.X 以及以前版本中xconfig 菜单是基于TCL/TK 的图形库的。

2、在完成内核的裁减之后,内核的编译就只要执行以下几条命令:

make clean 编译内核之前先把环境给清理干净。

make dep 编译相关依赖文件

make zImage 创建内核镜像文件

make modules 创建内核模块。

make install 把相关文件拷贝到默认的目录。

3、此命令是装载压缩映像文件zImage到flash存储器中,地址是kernel分区,并采用xmodem传输协议。

4、此命令是设置网卡1的地址192.168.1.1,掩码为255.255.255.0,不写netmask参数则默认为255.255.255.0。

5、此命令将nfs服务的共享目录sharedir加载到/mnt/nfs。

6、此命令是装载根文件系统root.cramfs到flash存储器中,地址是根文件系统分区,并采用xmodem传输协议。

7、这个命令的操作同时进行了分区和格式化,0~128K存放vivi,128K~192K存放VIVI控制台指令,192K~1216K存放kernel,1216K~4288K存放root,其余部分存放应用程序。

第6章

1.使用虚拟地址寻址整个系统的主存和辅存的方式在现代操作系统中被称为虚拟内存。 虚拟内存的管理方法使系统既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了程序的运行速度,又节约了物理内存空间。

2.进程内存区域涉及到5种数据段,即:

①代码段:代码段是用来存放可执行文件的操作指令。

②数据段:数据段用来存放可执行文件中已初始化全局变量。

③BSS段:BSS段包含了程序中未初始化的全局变量。

④堆(heap):用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

⑤栈:栈是用户存放程序临时创建的局部变量。

3.在Linux系统中,内核在最高级执行,也称为“系统态”,在这一级任何操作都可以执行。而应用程序则执行在最低级,即所谓的“用户态”。在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。模块是在所谓的“内核空间”中运行的,而应用程序则是在“用户空间”中运行的。它们分别引用不同的内存映射,也就是程序代码使用不同的“地址空间”。

4.共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。

5.内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。

第9章

1.参考答案:

Mutex互斥量,用于操作某个临界资源时对该资源上锁,以实现互斥地对独占资源的使用。 Semophore信号灯,信号灯内有一计数器,可以用于对多个同类资源的分配。

Condition条件变量,条件变量用于等待信号。当一个线程需要等待某个信号时,就可到条件变量上等待,当信号具备时,系统会唤醒该线程继续运行。

2.参考答案:

本地:共享内存+信号量, 适合于大量数据传输。Linux支持系统V和POSIX的共享内存和信号量。(5分)

远程:Socket+应用协议。适合于跨网络的(大量)数据传输。Linux支持BSD的socket。应用层协议需要自行设计。(5分)

3.答案要点:程序是编译后形成的可执行代码,是静止的。进程是程序的一次执行,是活动的。线程是进程的可执行单元,同一进程的不同线程共享进程的资源和地址空间。

4.两种实现方法,一种是继承Thread,另外一种是实现接口Runnable。

同步的实现方法有两种,分别是synchronized, wait与notify。用synchronized可以对一段代码、一个对象及一个方法进行加锁。用wait与notify可以使对象处于等待及唤醒方式导致同步,因为每个对象都直接或间接的继承了Object类。

5、什么是BootLoader?主要有几种工作模式及主要功能是什么?

答:

Bootloader就是操作系统内核运行的一段小程序,完成进行初始化系统硬件设置的任务,(2分)

分为启动加载模式和下载模式。

(1启动加载模式

启动加载(Boot laoding)模式是指 Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。(2分)

(2)下载模式

在下载模式下,目标机上的 Bootloader 将先通过串口连接或网络连接等通信手段从宿主机下载文件。(2分)

6、 简述Bootloader有何作用?

答案要点:(1)首先,bootloader是在特定硬件平台运行的程序,严重依赖于硬件平台,需

要移植;(2)是系统上电之后,第一个运行的程序,系统在上电或复位时通常都从地址 0x0 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序;(3)bootloader程序的设计目标是启动嵌入式操作系统,嵌入式操作系统的启动需要一定的条件,这些条件由bootloader来满足;(4)Bootloader一般具有对存储器和网络接口操作的功能;如擦除、读写Flash,通过USB、串口下载文件等

相关推荐