返回列表 发帖

[站长原创] 跟我学嵌入式基础知识篇之 - 嵌入式开发基本概念

[站长原创] 跟我学嵌入式基础知识篇之 - 嵌入式开发基本概念

嵌入式开发联盟www.mcuos.com

Osboy站长原创

QQ:82475491

Mcuos.com@gmail.com


针对近些日子新手的学习一些最基本的嵌入式开发中涉及到的一些基础知识,基本概念,本来我认为大家应该懂的,但是发现确实不少徒弟们还处于比较初级的学习阶段,所以这里我做个总结,下面的概念都是你必须要知道的,请花一定的时间理解这些概念,不懂的网上搜索下为自己拓展下这些知识点:


(1)嵌入式系统

对于嵌入式系统的概念,我的理解就是:嵌入式系统一定是个软件,硬件统一起来的概念,特定的软件系统是紧密的、有针对性的某款具体硬件的,有的嵌入式系统是有独立使用功能的,比如无线路由器,而有的只是一个嵌入式产品的一部分,比如手机modem部分,DSP处理器部分。

(2)arm

arm有两个概念,一个是指arm公司,一个是指arm核,我们看到的arm926,arm11,cortexa8,a9等说法,都是arm core的概念,是arm公司设计的最基本的架构,它类比于x86的概念。

而平时我们说的6410,2440,都是叫嵌入式处理器的,是具体的CPU的概念。是这些半导体公司使用arm core,再加上自己的外设IP,造就出的一颗特定的CPU产品。举例子:s3c6410是基于arm11的core来做出的一个CPU,但是6410不等同于arm11处理器。

(3)Linux

Linux是个操作系统,是运用操作系统理论写的一个软件,它实现了最基本的操作系统API给上层用户,同时它还管理着硬件操作。

(4)ubuntu

ubuntu是个linux的发行版,其实就是个桌面系统,winxp总用过吧,类似了。就是把一系列具有界面功能的软件组合在一起供你方便的使用么。你可以把ubuntu理解成一系列的linux应用软件的组合。我们就是利用ubuntu来进行程序的交叉编译的哦。

(5)c语言

Linux内核的所有程序都是用c语言开发的,没学过c语言的赶紧开始吧,这个是最基本的元素了,c语言都不懂其他的啥也别看了。编程语言可是所有应用,内核等软件的基础啊。

(6)开发板

拿ok6410的开发板来举个例子,s3c6410是颗三星的CPU,它是基于arm11的core制作的。而ok6410是个开发板,是用s3c6410作为主CPU,然后自己设计一些外设,组合成的一块板子,可以用来做产品搞开发,这就是开发板的概念。你可以类比联想下:你的笔记本电脑就是个开发板,它有好多外设供你使用,键盘,lcd,usb,硬盘,内存等等吧,它用的CPU是intel x86的核。

(7)GCC,Glibc

gcc是编译器,是用来在linux的环境下编译c语言的编译器,因为linux是用c语言写的,所以gcc也是用来编译linux的编译器工具。这个可以联想windows上的c编译工具,tubo c,VC++,不过这类都是IDE集成开发环境,我们这的gcc完全是单个的,命令行编译器。

glibc,是一些列c语言的库函数的组合,就是一些最基本的,最通用的功能,不需要你自己再去实现啦,你只需要调用glibc中这些库就可以啦,方便啊。

(8)编译器工具链

顾名思义就是把一系列用来编译生成程序最终可执行档的工具组合,比如:gcc,glibc等。我们在编译arm linux的时候经常看到arm-linux-gcc这类都是用来交叉编译基于arm的cpu的程序可执行文件,当我要你在ubuntu上编译个c hello程序,gcc -c hello.c hello,其实生成的hello程序是针对x86架构的程序,因为这个hello程序我不是要你们运行了么?哪里运行的,就是你自己的PC机啊。你pc是什么cpu的啊,x86的啊。

如果你想编译基于arm核的CPU的的程序,运行在ok6410的开发板上,你就要用arm-linux-gcc的编译器,这个编译完成之后生成的文件只能运行在arm的开发板上的哦,arm-linux-gcc -c hello.c hello,把你编译后的hello文件在你的电脑上运行下,怎么样,执行不了了吧?因为这个是针对arm的文件,不是x86的了。

(9)Makefile

你编译一个简单的hello.c文件,执行:arm-linux-gcc -c hello.c hello,这个看上去很简单,但是如果你要编译linux内核这么多,上万的文件,难道你也一个个的书写文件名字?肯定是不行的,所以我们发明了Makefile了,呵呵,就是把一系列编译命令抽象的统一起来到Makefile中,然后你编译只需要输入一个make就可以了。

       Makefile文件 Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

(10)shell命令行解释器

我不是经常要大家编译c程序么,输入的一些linux命令什么的不都是在用一个叫“终端解释器”的工具么?这个工具就是shell命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给linux系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

(11)shell脚本

更明白的来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易的就能够一个操作执行多个命令,每一个单个的命令都可以运行在shell命令行解释器中运行,而一系列的命令被汇总到一个文件中,统一执行,这个文件就是shell脚本。

(12)编译Linux内核

大家要知道编译linux内核用的也是arm-linux-gcc工具,但是不需要glibc库的,glibc的库是给linux应用程序来用的,我们的内核和应用是有区别的,linux内核有自己的c库,属于内核程序。

编译内核,就是make命令,然后makefile就会自动编译全部内核文件,make menuconfig是用来配置linux内核的命令。

(13)内核开发,驱动开发

内核开发与驱动开发相辅相成,对于Linux内核的开发者来说,比如linux之父linus,他就是个内核开发者,对linux内核相关的程序进行设计开发者,而我们目前的阶段都是处于驱动开发阶段,都是利用linux的内核提供的函数API开发自己的驱动程序。

(14)交叉编译

我们先看一个非交叉编译的情况,当我们在ubuntu x86的pc上,写一个hello的程序,然后gcc -c hello.c hello来生成hello文件,并运行在ubuntu的命令解释器终端工具中。那么这个在x86的机器上编译程序hello,并且这个hello可以直接运行在x86的机器中的过程就是“编译”,它是个“非交叉编译”的概念。

那么我们的arm上面的程序是如何编译的呢?

我们利用arm-linux-gcc -c hello.c hello来编译生成hello程序,是不能运行在x86上面的,只能在arm的板子上,例如:ok6410开发板,运行。

这个过程,编译器在ubuntu的x86 pc机上编译能够运行在arm架构的开发板上的过程就是“交叉编译”的概念啊。





分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

先顶一下,楼主辛苦了,我看看。。。。。。一定要学习、学习。。。。。。。

TOP

很好,真是学习了

TOP

很好,真是学习了
ccgydxlyj 发表于 2013-4-19 15:18



    继续努力吧,没那么难的,今天和你交流的不错,继续努力。

TOP

学习了,基础知识很重要!

TOP

学习了,基础知识很重要!

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服