久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

嵌入式底層開發總結[精選多篇]

時間: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 我在這想看到幾件......

主站蜘蛛池模板: 无尽动漫性视频╳╳╳3d| 亚洲精品永久在线观看| 最新中文字幕av无码不卡| 国产精品福利一区二区久久| 又湿又紧又大又爽又a视频| 久久久久国产精品免费免费搜索| www国产亚洲精品久久网站| 国产青榴视频在线观看| 丰满多毛的大隂户毛茸茸| 国产欧美日韩视频一区二区三区| 亚洲国产精品久久艾草| 亚洲人成伊人成综合网无码| 国产av导航大全精品| 日本艳妓bbw高潮一19| 欧美喷潮久久久xxxxx| 亚洲爆乳精品无码一区二区| 影音先锋亚洲成aⅴ人在| 日韩亚洲国产综合αv高清| 欧美在线精彩视频免费播放| 国产成人精品视频一区二区不卡| 精品国产一区二区三区久久狼| 久久久久无码精品国产app| 欧美 国产 综合 欧美 视频| 特级毛片爽www免费版| 亚洲无线一二三四区手机| 大肉大捧一进一出好爽视频| 久久午夜无码鲁丝片| 狠狠色婷婷久久综合频道日韩| 国产成熟女人性满足视频| 日韩精品无码综合福利网| 国产精品久久久久久久妇| 久久九九51精品国产免费看| 欧美伊人色综合久久天天| 日产精品久久久久久久性色| 国产亚洲精品久久久久久久软件| 亚洲av无码一区二区乱子伦as| 成人福利视频| 国产成人av一区二区三区无码| 97久久超碰福利国产精品…| 成人中文乱幕日产无线码| 国产精品沙发午睡系列990531|