嵌入式底层开发总结[精选多篇]

时间:2019-05-12 13:50:20下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《嵌入式底层开发总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《嵌入式底层开发总结》。

第一篇:嵌入式底层开发总结

嵌入式底层开发总结

51单片机应该是大部分搞嵌入式最先接触的,也是学生时期接触的第一款单片机,本人是电子信息工程毕业的,接触的第一个单片机也是51,然后是STM32.51和STM32 STM32比51 难一点,不过本质上都是单片机,STM32片上外设多很多,定时器啥的复杂多的多。STM32片上外设多,功能强大,可以说学了STM32之后基本上所有的单片机应该都能马上上手的,虽然我也只是只接触到51 和STM32.。大四全国电子设计大赛之后就再也没有接触到单片机了。后来工作就一直是ARM+linux,android。

------------------任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳;如果只有软件没有硬件,则软件就是一堆无用的字符。在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过特定的软件接口去操作底层硬件,用户在用户空间可以很容易的把软件设计目标放在策略与需求上,可以很方便的屏蔽掉底层实现,从而很好的完成客户功能需求。计算机系统是软件和硬件的结合体。而软件又分为应用层软件和驱动层软件。驱动层软件是应用层软件和底层硬件的纽带。通过驱动层软件实现对底层硬件屏蔽。

在裸机时代,比如单片机系统,程序员往往是直接操作硬件寄存器,直接设置硬件。而在Linux操作系统中,硬件驱动程序中实现对硬件直接操作,而用户空间,通过通用的系统调用接口,实现对硬件操作,应用程序没有直接操作底层设备,通过posix标准,应用程序的系统调用往往是被规定和限值,用户只能通过规定的接口实现对底层硬件的操作,导致了应用程序在类UINIX操作系统具有非常好的可移植性。

图2.1 直接操作硬件程序

上图2.1 是裸机时代,应用程序和硬件操作糅合在一起,应用程序和硬件操作高度耦合的框图,上述代码一般很难有良好的代码互用和移植性。往往从一个平台移植到另一个平台,甚至是同一平台不同硬件配置都要求很大的代码改动,另外从应用层来说,应用与驱动高度耦合,应用程序也几乎难以移植,甚至说是没有应用程序概念,原因在于应用与驱动的纠缠不清。

图2.2 无操作系统应用程序和设备驱动程序关系

上图2.2所示,良好的裸机代码框架,设备驱动层和应用层之间有良好的分层思想,用户可以较好的实现策略和需求,例如:客户要求实现流水灯程序,程序员在底层机制实现(硬件操作)的基础下,可以充分在用户应用程序中把主要精力方法流水灯的实现,即策略。但是在良好的裸机程序设计,代码移植性可能从一个平台移植到另外一平台只需要修改少量的底层驱动,例如:LED_ON()的实现。但是在用户空间,没有系统调用概念,函数接口千差万别。应用程序移植性差。

图2.3 Linux系统调用框图

操作系统中,需求决定应用程序,通过系统调用,调用底层驱动,此外,在驱动程序中,把一部分公用的驱动接口抽象出来,如此,程序员只需修改很少量的驱动资源,形成特定的驱动框架。导致用户只需添加专用的硬件属性作为平台资源,在内核中获取资源,大大解放了设备驱动开发,提高了设备驱动的通用型。在用户空间,由于遵循posix标准,类UNIX操作系统中,所有操作接口基本一样,从而方便了应用程序的移植,应用程序几乎不要做修改。如图2.3所示。

Linux操作系统对于所有的硬件都是当做一个文件来操作:一切设备皆文件。Linux设备文件一般分为字符设备,块设备,网络设备。在Linux系统中,除了网络设备之外,所有的设备都被映射到Linux的文件系统中。如图2.4所示。

图2.4 Linux操作系统与应用程序关系

----------------讲讲51,linux,安卓之间的差别。先申明一下,我是实际工作中没有使用过单片机,我使用单片机仅仅是用来参加全国电子设计大赛。工作主要在android driver这一块。我们这一行很多人说单片机是有瓶颈的,我也不是很清楚。但是实话实说,这鸟东西太简单了,没啥技术含量的,你要之后android的庞大。

欢迎点赞。后面会说说android,linux,51,32单片机之间的联系与学习方法,虽然我也是菜鸟,如果你现在看不懂也没关系,有个映像就行。以后就有方向去学习了。想当初我真的是一个人孤孤学习linux ================= 补充一个:单片机要点亮一个led等,同样在安卓上你点亮一个灯也要驱动的,不然怎么亮呢,只是我们只看到了app。背后驱动,怎么实现的,安卓架构,跟单片机有啥区别,相同的地方。其实手机arm芯片跟单片机都是嵌入式微处理器,单片机叫做微控制器。高通,mtk啥的也是嵌入式微处理器~都是一样的~但是难度你想想看就知道了。

51单片机大家都知道了,裸机,直接操作硬件,直观,简单,没有框架,没有系统。STM32,可以学习一下RTOS了,实时的小系统,ucos II等等许多实时系统,STM32+ucos II这种组合学习方式还是挺好的。STM32比较难的在我印象中一个是时钟树,因为我们从51,没有时钟树的概念12M晶振,时钟不要你配置,而比较新的ARM框架,外设都是有时钟的。可能刚刚接触概念不是很清楚,但是也是很简单的。另外一个是定时器,什么输入捕获模式,定时器模式,编码器模式。。。强大的多,比起51。总的来说还是简单的。因为是没有框架的原因,代码量真的很少。你要知道,MTK android 5.1 所有的东西加起来 10G多,包括bootloader,linux kernel,android framework,定制的部分。等等。我们接触的就那些目录,当你去看C++,java代码时,你就知道面向过程的代码真的很容易看。可能有些朋友不知道android的框架,以及android 与linux之间的关系,以及linux驱动与裸机的关系,联系与区别。你现在只要知道linux驱动比较大,android框架更大。单片机简单。单片机一般是C语言,而android一般涉及三种语言:底层linux内核C,中间的JNI层是C++,framework和app是java。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 学过51单片机的朋友知道,我们要点亮一个LED灯,是这样子的P0 = xxx,我们就点亮了一个,好。一烧写,好,灯亮了。linux,上我们要亮一个灯,有点难了,有了操作系统,没那么容易了。一般人搞不定了。好,到android,更加难了。但是你想一想手机芯片也是ARM。亮灯这种肯定都是CPU的管脚操作。上了系统了,难了,点个灯都费劲的。本质上是一样的。很多人都知道单片机有瓶颈的。原因是会点硬件,会点C,轻轻松松就可以亮灯的。入门容易。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 我举一个小的例子说明一下51,linux,android三者的之间的差别。你就知道是啥区别。下面是51单片机: 大概是这样: int main(void)//一个main函数搞定 { P0 = 0xxx;while(1);return 0;} linux: 驱动程序: #include #include #include //file_operatios

//class_create/device_create #include #include //kmalloc #include //ioremap #include #include“led.h”

struct s5pv210_device *s5pv210_dev;

volatile unsigned long *gpc0con = NULL;volatile unsigned long *gpc0dat = NULL;

staticintled_open(structinode *inode, struct file *file){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);

/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/ *gpc0con &= ~((0xf<<12)|(0xf<<16));*gpc0con |=((0x1<<12)|(0x1<<16));return 0;} staticintled_close(structinode *inode, struct file *file){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);//iounmap(S5PV210_PA_GPC0CON);return 0;}

staticssize_tled_read(struct file *file, char __user *buf, size_t count, loff_t *offset){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);return 0;}

//write(fd, &val, 4)static ssize_tled_write(struct file *file, const char __user *buf, size_t count, loff_t *offset){ int ret;unsignedintval;printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);

/*获取用户空间数据*/ ret = copy_from_user(&val,buf,count);if(ret){ printk(KERN_ERR“copy data from user failed!n”);return-ENODATA;}

printk(KERN_INFO“copy data from user: val=%dn”,val);if(val){ //点亮LED *gpc0dat |=((0x1<<3)|(0x1<<4));} else { //熄灭LED *gpc0dat &= ~((0x1<<3)|(0x1<<4));} return ret?0:count;}

staticstructfile_operationsled_fops={.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_close, };

staticint __initled_init(void){ int ret;printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);s5pv210_dev = kmalloc(sizeof(struct s5pv210_device),GFP_KERNEL);if(s5pv210_dev==NULL){ printk(KERN_INFO“no memory malloc for s5pv210_dev!n”);return-ENOMEM;} /*注册*/ led_major = register_chrdev(0,“led”,&led_fops);if(led_major<0){ printk(KERN_INFO“register major failed!n”);ret =-EINVAL;goto err1;}

/*创建设备文件*/ s5pv210_dev->led_class = class_create(THIS_MODULE,“led_class”);if(IS_ERR(s5pv210_dev->led_class)){ printk(KERN_ERR “class_create()failed for led_classn”);ret =-EINVAL;goto err2;}

s5pv210_dev->led_device = device_create(s5pv210_dev->led_class,NULL,MKDEV(led_major,0),NULL,“led”);if(IS_ERR(s5pv210_dev->led_device)){ printk(KERN_ERR “device_create failed for led_devicen”);ret =-ENODEV;goto err3;}

/*将物理地址映射为虚拟地址*/ gpc0con = ioremap(S5PV210_PA_GPC0CON,8);if(gpc0con==NULL){ printk(KERN_INFO“ioremap failed!n”);ret =-ENOMEM;goto err4;} gpc0dat = gpc0con + 1;

return 0;err4: device_destroy(s5pv210_dev->led_class,MKDEV(led_major,0));err3: class_destroy(s5pv210_dev->led_class);err2: unregister_chrdev(led_major,“led”);err1: kfree(s5pv210_dev);return ret;} static void __exit led_exit(void){ printk(KERN_INFO“%s()-%dn”, __func__, __LINE__);unregister_chrdev(led_major,“led”);device_destroy(s5pv210_dev->led_class,MKDEV(led_major,0));class_destroy(s5pv210_dev->led_class);iounmap(gpc0con);kfree(s5pv210_dev);} module_init(led_init);module_exit(led_exit);MODULE_LICENSE(“GPL”);

应用程序:

#include #include #include #include #include #include #include #include /* **./led_test on 点亮LED **./led_test off 熄灭LED */ int main(intargc, char **argv){ intfd;intval =0;fd = open(“/dev/led”, O_RDWR);if(fd<0){ perror(“open failed!n”);exit(1);}

if(strcmp(argv[1], “on”)==0){ val = 1;} else { val = 0;}

if(write(fd, &val, 4)!=4){ perror(“write failed!n”);exit(1);} close(fd);return 0;}

android:

不知道大家清不清楚android与linux之间的关系。

android是基于linux内核的,linux操作系统的5大组件:驱动,内存管理,文件系统,进程管理,网络套接字。android是基于linux kernel上的,大家平时只看到了app。app是java语言的,其实每运行一个java应用程序,实际上是fork一个linux应用程序。android四大组件,activity,service,Broadcast Receiver,Content Provider。这是android的主要框架,java应用开发是基于这开发的。android平台是基于linux内核的。在linux运行之后才建立起java世界。

直接上代码:上面的linux的驱动在android是一样的,适用于android。驱动ok之后是应用层了,也就是应用程序。我下面就是最直接的应用,不包含任何android框架性的东西,大家可以直接看到,应用app->jni->linux驱动这三层调用关系。下面是jni代码是c++; #define LOG_TAG “led-jni-log” #include

#include “jni.h”

#include #include #include #include #include #include #include

staticintfd =-1;jintopen_led(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);fd = open(“/dev/led1”, O_RDWR);if(fd< 0){ LOGE(“open : %sn”, strerror(errno));return-1;} return 0;}

jintled_on(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);intval = 1;jint ret = 0;ret = write(fd, &val, 4);if(ret!= 4){ LOGE(“write : %sn”, strerror(errno));return-1;} return 0;}

jintled_off(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);intval = 0;jint ret = 0;ret = write(fd, &val, 4);if(ret!= 4){ LOGE(“write : %sn”, strerror(errno));return-1;} return 0;}

jintclose_led(JNIEnv *env, jobjectthiz){ LOGD(“$$%sn”, __FUNCTION__);if(fd> 0)close(fd);return 0;}

staticJNINativeMethodmyMethods[] ={ {“openDev”, “()I”,(void *)open_led}, {“onDev”, “()I”,(void *)led_on}, {“offDev”, “()I”,(void *)led_off}, {“closeDev”, “()I”,(void *)close_led}, };jintJNI_OnLoad(JavaVM * vm, void * reserved){ JNIEnv *env = NULL;jint ret =-1;ret = vm->GetEnv((void **)&env, JNI_VERSION_1_4);if(ret < 0){ LOGE(“GetEnv errorn”);return-1;}

jclassmyclz = env->FindClass(“com/ledtest/LedActivity”);if(myclz == NULL){ LOGE(“FindClass errorn”);return-1;} ret = env->RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));if(ret < 0){ LOGE(“RegisterNatives errorn”);return-1;}

return JNI_VERSION_1_4;} 然后是java app: packagecom.ledtest;

importandroid.os.Bundle;importandroid.app.Activity;importandroid.util.Log;importandroid.view.Menu;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;

public class LedActivity extends Activity {

final String TAG = “LedActivity”;public Button btn_on = null;public Button btn_off = null;

public void init(){ btn_on =(Button)this.findViewById(R.id.btn1);btn_on.setOnClickListener(clickListener);

btn_off =(Button)this.findViewById(R.id.btn2);btn_off.setOnClickListener(clickListener);}

OnClickListenerclickListener = new OnClickListener(){ public void onClick(View v){ switch(v.getId()){ case R.id.btn1: Log.d(TAG, “led on in app”);onDev();break;case R.id.btn2: Log.d(TAG, “led off in app”);offDev();break;default: break;} } };

@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState);setContentView(R.layout.activity_led);init();openDev();}

@Override publicbooleanonCreateOptionsMenu(Menu menu){ // Inflate the menu;this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_led, menu);return true;}

@Override protected void onDestroy(){ // TODO Auto-generated method stub super.onDestroy();

closeDev();} static { System.loadLibrary(“led_jni”);}

public native intopenDev();

public native intonDev();

public native intoffDev();

public native intcloseDev();}

框架是这样的:最上层是java,点开app,点击一下一个button,点亮了LED,调用onDev();onDev调用c++的led_on,然后led_on是调用驱动的led_write,明白不?这样说吧:linux驱动是最下层的,驱动嘛。然后是c++层,c++包装一下是给java调用的,然后到java层。下面是android比价经典的一张框架图。

linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。

第二篇:嵌入式软件工程师底层驱动内核工程师

嵌入式软件工程师 嵌入式软件工程师嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。

嵌入式软件工程师就是编写嵌入式系统的工程师。

嵌入式软件工程师待遇

IBM、微软、华为、Yahoo、联想、搜狐、亚信、花旗...2010'应届毕业生就业安置计划火热启动:先实训后上岗,转正年薪50000元。

怎样做个嵌入式软件工程师

应具备哪些能力,最直接的方法,就是去根据各公司,招聘网站的嵌入式软件工程师的应聘要求来分析

我帮你总结下:

1.最重要的是C语言编程,以及C++,这个与你读程,应用,开发项目,做系统移植息息相关;

2.操作系统: LINUX,WINCE等,至少学习过一种,并且还需要对些基础知识有蛮多的了解;

3.对ARM,FPGA,DSP等这些硬件比较了解。

这是最常规的条件

当然,一些基本素质,像英语能力,或是啥的,也很重要

推荐: 你可以去按照招聘要求分析,也可以按照培训机构的培训目的,方向,内容来分析得知,像海同科技就是蛮不错的嵌入式软件工程师发展前景分析

嵌入式领域较新,目前发展非常快,很多软硬件技术出现的时间都不太长(如ARM处理器、嵌入式操作系统、LINUX操作系统),大多数人没有条件接触或进入嵌入式行业,更谈不上能有机会接受专业人士的指导。因此,踏进这个行业的难度比较大,嵌入式人才稀缺,身价自然也水涨船高。

权威部门统计,我国嵌入式人才缺口每年50万人左右。根据前程无忧网发布的调查报告,嵌入式软件开发是未来几年最热门和最受欢迎的职业之一,具有10年工作经验的高级嵌入式工程师年薪在30万元左右。即使是初级的嵌入式软件开发人员,平均月薪也达到了3000—5000元,中高级的嵌入式工程师月薪平均超过10000元。做软件实际上有高下之分,开发语言从机器语言、汇编到C、C++,再到红透半边天的Java、C#等,该学哪种呢?为什么有些开发者工资低,而有些开发者千金难求?为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两

年经验就敢要10k的薪水?

还是门槛,比如月薪15k的Linux嵌入式开发职位,门槛就有 Linux系统、Shell编程、Linux开发环境、C语言、ARM硬件平台、数据结构、Linux内核、驱动程序等,粗略数数就有8道关口,他需要非常熟悉整个的计算机体系,能做出实际的产品,而Java的开发者却仅仅是会使用名叫Java的语言工具,始终高高飘在众多层次之上,开发项目非常快,甚至可以不知道OSI模型,很可能自始至终都是软件蓝领。嵌入式开发本身也有高下之分,至少包含嵌入式应用程序工程师和底层的驱动内核工程师两种。前者同样是使用现成工具进行简单劳动,比如使用J2ME开发小游戏或者进行一些界面开发,而后者是根据芯片具体情况把操作系统(如Linux)移植到上面,同时编写必要的驱动程序,改写相应的内核代码。很显然后者是一个公司真正的技术核心。而技术核心的工资很可能是其他开发者的数倍。

嵌入式开发突出强制和项目,学习不仅仅是学习几项技术,而是构建你的知识体系。比如学习嵌入式开发,就要从基础Linux,C语言,数据结构开始,到ARM,汇编,Linux内核、驱动等,更重要的是更多的项目练习,设计至少5个项目,多达10000行强制核心代码的编写可以让你真正获得知识。为进入外企或者出国做准备。

未来的几年内,随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。美国著名未来学家尼葛洛庞帝99年1月访华时预言,4~5年后嵌入式智能(电脑)工具将是PC和因特网之后最伟大的发明。我国著名嵌入式系统专家沈绪榜院士98年11月在武汉全国第11次微机学术交流会上发表的《计算机的发展与技术》一文中,对未来10年以嵌入式芯片为基础的计算机工业进行了科学的阐述和展望。1999年世界电子产品产值已超过12000亿美元,2000年达到13000亿美元,预计2005年,销售额将达18000亿美元。目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。

第三篇:嵌入式开发工程师

任职要求:

1、大学本科及以上学历,2年以上工作经验,计算机电子通讯类专业毕业;

2、能够熟练使用POWER PCB或PROTEL或ORCAD等电路设计软件进行PCB设计;

3、熟悉电子元器件,能独立设计数字及模拟电路,拥有单片机开发工作经验,懂得RF433无线及红外遥控等相关知识;

4、熟练使用C语言,有嵌入式开发工作开发及智能家居防盗报警产品经验者优先。

岗位职责:

1、新产品项目设计开发工作;

2、为相关部门及项目提供技术支持;

3、产品售后返修分析,品质不断提升性能改进;

4、组织对新研发产品的制样、验证、试产、量产等工作的确认与审核。

第四篇:嵌入式Linux底层驱动软件工程师岗位职责

1.负责按照总体设计完成模块详细设计说明书。

2.完成模块代码编写、内部测试工作。

3.协助硬件设计人员及应用软件设计人员进行系统开发与调试。

4.根据技术支持需求进行软件代码维护。

5.编写相关技术文档,并对有关人员进行培训。

第五篇:嵌入式Linux开发流程

嵌入式Linux开发流程

嵌入式 linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都经过以下过程:

建立开发环境。操作系统一般 REDHAT-LINUX,版本 7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。

配置开发主机。配置 MINICOM,一般参数为115200,数据位 8位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。

建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上 flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过JTAG并口简易仿真器烧写 ARM 外围 flash 芯片的程序。也有 LINUX 下公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂商提供的仿真器,当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。

下载别人已经移植好的 LINUX 操作系统,如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU的 CPU可以使用模块方式调试驱动,对于 UCLINUX 这样的系统好像只能编译进内核进行调试。

建立根文件系统,从下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 /etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。

建立应用程序的 flash 磁盘分区,一般使用JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K-32M,有的系统使用非线性 flash(NAND型)8-512M,有的两个同时使用,需要根据应用规划 flash的分区方案。

开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。

烧写内核、根文件系统、应用程序。

发布产品。

下载嵌入式底层开发总结[精选多篇]word格式文档
下载嵌入式底层开发总结[精选多篇].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    嵌入式开发工程师-简历

    【个人信息】姓名: 身高: 性别: 学历: 籍贯: 专业:电子信息工程 联系电话: E-mail: 【求职意向】 嵌入式开发工程师或相关工作,对LINUX驱动开发极感兴趣 【工作经验】 2009.3----201......

    关于嵌入式开发的一点建议

    CSDN:很多人都讲嵌入式开发很难,能不能就你学习和工作经验与大家分享下嵌入式开发如何开始和深入?作为嵌入式研发工程师,你认为其应具备哪些知识结构和实战能力? 卜茂霞:说到嵌入......

    Android 嵌入式开发心得体会

    Android 嵌入式开发心得体会 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发......

    嵌入式开发学习心得(精选5篇)

    个人学习嵌入式心得体会 就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学习潜入式越来越成为我学习生活的一部分,现在......

    【嵌入式】android教程JNI开发疑点总结

    android教程JNI开发疑点总结 很多Android新手对于JNI开发过程中的疑问不是很清楚,根据android123@163.com邮箱中反馈的内容我们整理如下: 1. JNI中,什么情况才处理jstring、ji......

    嵌入式总结

    一、嵌入式系统原理与应用课程总结 这个学期我学习了《嵌入式原理与应用》这门课程,虽然这个学期马上就要结束了,对嵌入式的学习也要告一段落了,但是我觉得收获还是很大的。学......

    嵌入式开发学习心得(共5篇)

    嵌入式开发学习心得 嵌入式开发学习心得 就我个人而言,从最开始对嵌入式一窍不通到现在越学越感兴趣,当然相应在嵌入式方面的提高也是很明显的。学习嵌入式越来越成为我学习中......

    嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件......