亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式裸機(jī)程序的啟動(dòng)及運(yùn)行

        2021-02-25 13:30:14潘亞文李宏華蔣紫韻吳春法
        物聯(lián)網(wǎng)技術(shù) 2021年2期
        關(guān)鍵詞:開發(fā)板代碼嵌入式

        潘亞文,李宏華,蔣紫韻,吳春法

        (閩南科技學(xué)院 光電信息學(xué)院,福建 泉州 362332)

        0 引 言

        嵌入式系統(tǒng)開發(fā)包括裸機(jī)程序開發(fā)、系統(tǒng)移植和應(yīng)用程序開發(fā)。啟動(dòng)是指系統(tǒng)上電后CPU從運(yùn)行的第一條指令開始到運(yùn)行裸機(jī)程序或應(yīng)用程序?yàn)橹沟倪^程。其中裸機(jī)程序開發(fā)和系統(tǒng)移植會(huì)涉及到啟動(dòng)過程,目前的啟動(dòng)文獻(xiàn)絕大多數(shù)都是介紹基于系統(tǒng)移植U-boot的啟動(dòng)運(yùn)行[1-3],實(shí)際上還有很多裸機(jī)程序的啟動(dòng)運(yùn)行,這兩者的啟動(dòng)有很大區(qū)別。實(shí)際應(yīng)用中許多嵌入式系統(tǒng)開發(fā)都是裸機(jī)程序開發(fā),因此理清這一啟動(dòng)過程,有助于整個(gè)嵌入式系統(tǒng)的開發(fā)。

        裸機(jī)程序開發(fā)[4]從本質(zhì)來說就是三個(gè)問題:一是怎樣生成裸機(jī).bin可執(zhí)行程序;二是怎樣將裸機(jī).bin可執(zhí)行程序燒到SoC中并啟動(dòng)運(yùn)行;三是裸機(jī)程序的啟動(dòng)過程。第一個(gè)問題涉及到嵌入式開發(fā)環(huán)境,目前有集成開發(fā)環(huán)境和交叉編譯開發(fā)環(huán)境兩種[5-7]。第二個(gè)問題總體來說包括三類燒寫方法:第一類是直接通過集成軟件將.bin文件燒寫到存儲(chǔ)介質(zhì)并運(yùn)行[8];第二類是通過第三方軟件將.bin文件直接燒寫到存儲(chǔ)介質(zhì)中運(yùn)行[9];第三類是通過U-boot燒寫.bin文件并運(yùn)行。對于第三個(gè)問題裸機(jī)程序的啟動(dòng)過程與第二個(gè)問題息息相關(guān),燒寫方法不同,啟動(dòng)過程也有所不同,下文將詳細(xì)論述。

        1 兩種開發(fā)環(huán)境

        在單片機(jī)應(yīng)用中,裸機(jī)程序的開發(fā)只需要在Keil集成開發(fā)環(huán)境中就可以完成,簡單容易上手。而嵌入式系統(tǒng)開發(fā)相對復(fù)雜,針對目前嵌入式系統(tǒng)裸機(jī)程序的開發(fā)可以分為兩種開發(fā)環(huán)境:一種是集成開發(fā)環(huán)境,另一種是自己搭建的免費(fèi)交叉編譯開發(fā)環(huán)境。

        1.1 嵌入式集成開發(fā)環(huán)境

        由于目前嵌入式系統(tǒng)芯片80%以上都是ARM內(nèi)核,所以在此主要介紹針對ARM內(nèi)核芯片的集成開發(fā)環(huán)境。一個(gè)嵌入式可執(zhí)行程序的開發(fā)分為源程序編輯,匯編、編譯、鏈接生成.bin二進(jìn)制文件,調(diào)試、運(yùn)行等開發(fā)步驟。所謂集成就是把上述幾個(gè)步驟同時(shí)集成到一個(gè)開發(fā)環(huán)境之中。目前世界上針對不同的芯片集成開發(fā)環(huán)境有很多種,ARM公司針對ARM系列芯片面向全球開發(fā)者提供ADS和Keil MDK兩大主流集成開發(fā)環(huán)境。ADS2020最新版支持Cotex-M、Cotex-A、Cotex-R系列最新芯片,Keil MDK完美支持Cortex-M、Cortex-R4、ARM7和ARM9等系列芯片。集成開發(fā)環(huán)境使用簡單方便,功能齊全,開發(fā)效率高,但因它是收費(fèi)軟件,阻攔了大部分中小公司對其的使用。許多高校及個(gè)人仍然使用一些低版本的集成開發(fā)環(huán)境,以利于學(xué)習(xí)。

        1.2 ARM+Linux交叉編譯開發(fā)環(huán)境

        因?yàn)榧砷_發(fā)環(huán)境需要收費(fèi),所以ARM+Linux免費(fèi)交叉編譯開發(fā)環(huán)境成為越來越多的中小企業(yè)和眾多愛好者的選擇。目前ARM+Linux免費(fèi)交叉編譯開發(fā)環(huán)境是一種主流,對于進(jìn)入嵌入式系統(tǒng)世界的開發(fā)人員這也是需要掌握的必備技能。X86架構(gòu)是通用計(jì)算機(jī)芯片的架構(gòu),ARM是嵌入式系統(tǒng)的芯片架構(gòu),在通用計(jì)算機(jī)系統(tǒng)里編譯出可以在ARM架構(gòu)下運(yùn)行的程序就是交叉編譯,其結(jié)構(gòu)如圖1所示。ARM+Linux交叉開發(fā)環(huán)境需要開發(fā)者自己在Linux操作系統(tǒng)下搭建編譯環(huán)境,選擇合適的ARM編譯工具鏈,因此,開發(fā)者需要掌握Linux下的各種開發(fā)流程。這種開發(fā)方式源程序編輯一般在主機(jī)Windows下編輯,可執(zhí)行的.bin文件在Linux下生成,而運(yùn)行又在目標(biāo)機(jī)嵌入式系統(tǒng)里執(zhí)行,因此,這種方式比較復(fù)雜。

        圖1 交叉編譯開發(fā)環(huán)境

        以A8處理器為例,其交叉編譯環(huán)境的搭建過程如下:

        (1)在PC端安裝虛擬機(jī)VMware軟件。

        (2)在VMware里安裝發(fā)行版Linux操作系統(tǒng)。

        (3)從官方網(wǎng)站http://www.crosstool-ng.org下載已制作好的適合Cotex-A8的交叉編譯工具鏈,如arm-cotex_a8-linux-gnueabi.tar.bz2。

        (4)解壓下載好的工具鏈。

        $ cd /opt

        $ tar xjf arm-cotex_a8-linux-gnueabi.tar.bz2

        (5)在環(huán)境變量PATH里添加工具鏈的bin目錄。

        $ export PATH=$PATH:/opt/tools/arm-cotex_a8-linuxgnueabi.tar.bz2

        (6)在/etc/environment文件里添加bin目錄使當(dāng)前用戶不失效工具鏈命令。

        2 啟動(dòng)方式

        2.1 ARM9的啟動(dòng)方式

        這里啟動(dòng)是指嵌入式系統(tǒng)啟動(dòng)運(yùn)行生成的.bin文件,由于S3C2240芯片是以一款A(yù)RM9為內(nèi)核入門級的經(jīng)典芯片,資料豐富,所以以S3C2440芯片為例說明從NAND FLASH和NOR FLASH啟動(dòng)裸機(jī)程序的過程。

        2.1.1 NAND FLASH啟動(dòng)

        以S3C2440芯片為例說明從NAND FLASH啟動(dòng)。NAND FLASH存儲(chǔ)介質(zhì)的特點(diǎn)是容量大、體積小、速度慢、價(jià)格低廉,但不能作為運(yùn)行內(nèi)存,常作為存儲(chǔ)介質(zhì)[10]。但是對于S3C2440芯片,如果從NAND FLASH啟動(dòng),芯片會(huì)自動(dòng)把NAND FLASH前4 KB的內(nèi)容復(fù)制到S3C2440內(nèi)部的SRAM(steppingstone)中,SRAM也只有4 KB,同時(shí)把內(nèi)部的SRAM映射到內(nèi)存nGCS0片選空間0x00000000,系統(tǒng)從SRAM的0x00000000開始運(yùn)行。因此如果裸機(jī)程序的.bin文件小于4 KB,可以將程序燒寫到NAND FLASH中直接啟動(dòng),這是一種啟動(dòng)裸機(jī)程序的方式,但是源程序一開始需要做必要的芯片級初始化工作。

        另一種NAND FLASH的啟動(dòng)方式是將U-boot放在NAND FLASH中,前4 KB的內(nèi)容非常寶貴,做最基本的初始化包括初始化SDRAM的工作。然后通過U-boot將裸機(jī)程序的.bin文件下載到SDRAM中,然后跳到SDRAM中運(yùn)行.bin裸機(jī)程序。這也是一種常見而簡單的運(yùn)行.bin裸機(jī)程序的方法。

        2.1.2 NOR FLASH啟動(dòng)

        同樣以S3C2440芯片為例說明NOR FLASH啟動(dòng)。NOR FLASH的特點(diǎn)是容量很小、體積大、速度快、價(jià)格貴,主要是CPU能直接對其總線式讀操作,因此常作為啟動(dòng)介質(zhì)[11]。如果S3C2440選擇NOR FLASH啟動(dòng),NOR FLASH被映射到0x00000000,CPU直接從NOR FLASH開始運(yùn)行。因此裸機(jī)程序的.bin文件可以直接燒寫到NOR FLASH中運(yùn)行。需要注意的是源程序一開始需要通過匯編程序做必要的芯片級初始化工作。

        2.2 Cotex-A8的啟動(dòng)方式

        Cotex-A8處理器是一款高端處理器,主頻最高可達(dá)1 GHz,目前應(yīng)用在上網(wǎng)本、機(jī)頂盒、數(shù)字電視、家庭網(wǎng)絡(luò)、打印機(jī)、智能家居等領(lǐng)域。其啟動(dòng)方式也很多,下面介紹以Cotex-A8為內(nèi)核三星公司的S5PV210芯片啟動(dòng)運(yùn)行程序的過程。

        S5PV210系統(tǒng)上電后先從具有類似NOR FLASH功能的內(nèi)部IROM中讀取預(yù)先設(shè)置的代碼BL0并執(zhí)行。這一段IROM代碼是三星出廠前設(shè)置的,由于不知道將來怎樣外接SDRAM,因此這一段IROM是不能初始化外接SDRAM的,這一段IROM代碼只能做一些基本的芯片級初始化工作。同時(shí)這一段代碼會(huì)通過OM0~OM5引腳電平判斷選擇啟動(dòng)模式,S5PV210支持的幾種啟動(dòng)模式見表1所列,然后從相應(yīng)的外部存儲(chǔ)介質(zhì)去讀取啟動(dòng)代碼到內(nèi)部IRAM中執(zhí)行。基于上述過程,第一種方法可以把裸機(jī)程序.bin文件放入表1的存儲(chǔ)介質(zhì)中就可以啟動(dòng)運(yùn)行;第二也可以直接把裸機(jī)程序下載到內(nèi)部IRAM中運(yùn)行,經(jīng)驗(yàn)證通過USB方式把.bin文件下載到內(nèi)部SRAM的0xd0000010處可以運(yùn)行裸機(jī)程序;第三可以通過U-boot下載運(yùn)行裸機(jī)程序的.bin文件,這需要先啟動(dòng)U-boot,然后下載裸機(jī)程序的.bin文件并運(yùn)行。

        表1 S5PV210的啟動(dòng)模式

        3 裸機(jī)程序啟動(dòng)運(yùn)行實(shí)例

        下面開始介紹三個(gè)開發(fā)板,三種不同的啟動(dòng)流程,以理解嵌入式裸機(jī)程序的啟動(dòng)及運(yùn)行。

        3.1 集成開發(fā)環(huán)境下的NOR FLASH啟動(dòng)運(yùn)行

        這里的集成開發(fā)環(huán)境是武漢創(chuàng)維特公司開發(fā)的ADT集成開發(fā)環(huán)境,開發(fā)板SOC是S3C2440,實(shí)驗(yàn)中是將裸機(jī)程序下載到NOR FLASH中運(yùn)行。由于在集成開發(fā)環(huán)境中編輯源程序及燒寫程序到NOR FLASH中并執(zhí)行的過程簡單,這里不在祥述。需要注意的是這樣的裸機(jī)源程序由一段匯編代碼和C代碼組成,匯編代碼做基本的初始化工作并最終跳到C代碼中執(zhí)行,C代碼是完成裸機(jī)程序功能的代碼段。匯編代碼段的功能:關(guān)看門狗;關(guān)總中斷;關(guān)SUB子中斷;配置時(shí)鐘寄存器以減少PLL鎖相時(shí)間;配置MPLL設(shè)置時(shí)鐘頻率;設(shè)置內(nèi)存控制寄存器;初始化棧;設(shè)置IRQ中斷處理程序;初始化存儲(chǔ)器中的數(shù)據(jù);跳轉(zhuǎn)到C代碼main函數(shù)中運(yùn)行。

        3.2 交叉編譯下的U-boot啟動(dòng)方式

        這里的交叉編譯環(huán)境選擇ARM+Linux,默認(rèn)在Windows下通過虛擬機(jī)已搭建好,U-boot也已經(jīng)燒錄到NAND FLASH中。開發(fā)板搭載內(nèi)核為Cortex-A53系列高性能八核三星處理器S5P6818,其最高主頻高達(dá)1.4 GHz。由于是通過U-boot將裸機(jī)程序燒寫到SDRAM中運(yùn)行,U-boot一開始做了許多初始化工作,所以源程序編輯不需要匯編代碼,只需要C代碼就可以。其啟動(dòng)及運(yùn)行過程如下:

        (1)編輯需要運(yùn)行的裸機(jī)C代碼;

        (2)將C代碼移動(dòng)到VMWare下的Linux操作系統(tǒng)下;

        (3)利用交叉編譯工具鏈編譯C代碼得到.bin文件;

        (4)將.bin文件移動(dòng)到Windows系統(tǒng)下;

        (5)配置超級終端,使開發(fā)板與主機(jī)連接;

        (6)啟動(dòng)開發(fā)板,進(jìn)入U(xiǎn)-boot模式;

        (7)配置開發(fā)板IP和主機(jī)IP使相互之間可以ping通;

        (8)將裸機(jī).bin文件上傳到TFTPD32軟件里;

        (9)U-boot下燒 寫.bin文件到SDRAM,例如 tftp 0x40000000 pwm.bin;

        (10)跳到SDRAM下執(zhí)行裸機(jī)代碼.bin,例如 go 0x40000000。

        經(jīng)過上述步驟,裸機(jī)程序就可以通過U-boot在SDRAM中啟動(dòng)運(yùn)行。

        3.3 交叉編譯下的SD卡啟動(dòng)方式

        這里的交叉編譯環(huán)境是ARM+Linux,默認(rèn)在Windows下通過虛擬機(jī)已搭建好。開發(fā)板搭載內(nèi)核為Cortex-A8 系列高性能三星處理器S5PV210。由于IROM中的啟動(dòng)代碼BL0做了芯片級初始化工作,所以這里的源程序不需要匯編代碼來初始化。S5PV210裸機(jī)程序啟動(dòng)流程如圖2所示,其運(yùn)行過程如下:

        (1)編輯需要運(yùn)行的裸機(jī)C代碼;

        (2)將C代碼移動(dòng)到VMWare下的Linux操作系統(tǒng)下;

        (3)利用交叉編譯工具鏈編譯C代碼得到.bin文件;

        (4)將.bin文件移動(dòng)到SD卡里;

        (5)選擇相應(yīng)的OM管腳電平開機(jī)即可啟動(dòng)目標(biāo)板運(yùn)行裸機(jī)程序。

        圖2 S5PV210裸機(jī)程序啟動(dòng)流程

        將.bin文件移到SD卡后,開機(jī)目標(biāo)板,首先運(yùn)行S5PV210內(nèi)部IROM中的程序BL0,并根據(jù)OM管腳選擇,將SD卡的.bin文件讀到S5PV210內(nèi)部的IRAM中運(yùn)行,裸機(jī)程序得以運(yùn)行。

        4 結(jié) 語

        綜上所述,啟動(dòng)運(yùn)行裸機(jī)程序的方法有很多,但不論哪種方法都需要理清開機(jī)運(yùn)行從第一行代碼,直到整個(gè)裸機(jī)程序結(jié)束的過程才能很好地進(jìn)行嵌入式開發(fā)。需要注意的是有的啟動(dòng)方法源程序是由基本初始化的匯編代碼和C代碼組成,有的啟動(dòng)方法只需要C代碼。只需要C代碼的啟動(dòng)方法中,C代碼運(yùn)行之前一定是在其他地方提前做好了初始化工作,比如通過U-boot下載運(yùn)行裸機(jī)程序,U-boot事先做了初始化,其中S5PV210通過SD卡啟動(dòng),S5PV210在內(nèi)置的IROM里BL0做了基本的初始化。

        猜你喜歡
        開發(fā)板代碼嵌入式
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        搭建基于Qt的嵌入式開發(fā)平臺(tái)
        Microchip最新推出兩款PIC32 Curiosity開發(fā)板
        淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
        電子制作(2017年22期)2017-02-02 07:10:14
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
        Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
        国产一起色一起爱| 国产免费三级av在线| 欧美人与禽2o2o性论交| 久久中文精品无码中文字幕| 亚洲九九夜夜| 91精品亚洲熟妇少妇| 无遮掩无码h成人av动漫| 日韩精品无码视频一区二区蜜桃| 欧美久久久久中文字幕| 手机在线看片在线日韩av| 国产精品国产三级国产av中文| 国产97在线 | 亚洲| 欧美日韩国产一区二区三区地区| 日韩久久免费精品视频| 日韩人妻中文字幕高清在线| 人妻av鲁丝一区二区三区| 国产免费专区| 熟女人妻一区二区中文字幕| 亚洲av综合色区无码另类小说| 日本免费一区二区在线视频播放 | 帮老师解开蕾丝奶罩吸乳网站| 国产精品美女久久久久久2018| 亚洲成片在线看一区二区| 蜜桃91精品一区二区三区| 国产又黄又爽又色的免费| 国产精品乱一区二区三区| 久久精品女人天堂av麻| 亚洲av无码专区国产不卡顿| 成人免费网站视频www| 精品国产福利一区二区三区| 国产激情视频在线观看大全| 日韩丰满少妇无码内射| 免费看奶头视频的网站| 少妇高潮免费在线观看| 日本久久久久亚洲中字幕| 久久久久无码国产精品不卡 | 极品视频一区二区三区在线观看| 凌辱人妻中文字幕一区| 色伦专区97中文字幕| 无码中文字幕久久久久久| 扒开美女内裤舔出白水|