色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

意法半導體的STM32F429微控制器上的一個μClinux項目實現

m3eY_edn_china ? 來源:未知 ? 作者:李倩 ? 2018-05-02 08:25 ? 次閱讀

微控制器制造商的開發板,以及他們與開發板一起提供的軟件項目例程,在工程師著手一個新設計時可以提供很大幫助。但在設計項目完成其早期階段后,進一步設計時,制造商提供的軟件也可能會導致一些問題。

使用實時操作系統作為應用程序代碼平臺的設計還面臨著許多挑戰,比如如何將功能分配給不同的并行任務、如何設計高可靠的進程間通信、以及如何在硬件上測試整個軟件包等問題。

越來越多的OEM廠商發現,避免上述兩個問題的最好方式,是使用基于開源、經過驗證、可擴展、可運行在不同硬件平臺的操作系統Linux開始新的設計。就已經被移植到各種計算機硬件平臺的操作系統的數量來說,Linux首屈一指。Linux的衍生版本已運行在非常廣泛的嵌入式系統中,包括:網絡路由器、移動電話、建筑自動化控制、電視機和視頻游戲控制臺。

雖然Linux被成功使用,但并不意味著它很容易使用。Linux包含的代碼超過一百萬行,其運作帶有鮮明的Linux方法論味道,初學者可能難以迅速掌握。

因此,本文的主旨是為使用Linux的嵌入式操作系統版本——μClinux,開始一個新的設計項目,該指南共分為五個步驟。為了說明該指南,本文介紹了在意法半導體STM32F429微控制器(ARMCortex-M4內核,最高180MHz)上的一個μClinux項目實現,使用了Emcraft 的STM32F429DiscoveryLinux板支持包(BSP)。

步驟1:Linux工具和項目布局

每個嵌入式軟件設計都從選擇合適的工具開始。

工具鏈是一組連接(或鏈接)在一起的軟件開發工具,它包含諸如GNU編譯器集合(GCC)、binutils(一組包括連接器匯編器和其它用于目標文件和檔案工具的開發工具)和glibc(提供系統調用和基本函數的C函數庫)等組件;在某些情況下,還可能包括編譯器和調試器等其它工具。

用于嵌入式開發的工具鏈是一個交叉工具鏈,更常見的叫法是交叉編譯器。

GNUBinutils是嵌入式Linux工具鏈的第一個組件。GNUBinutils包含兩款重要工具:

●“as”,匯編器,將匯編代碼(GCC所生成)轉換成二進制代碼

●“ld”,連接器,將離散目標代碼段連接到庫或形成可執行文件

編譯器是工具鏈的第二個重要組成部分。在嵌入式Linux,它被稱為GCC,支持許多種微控制器和處理器架構。

接下來是C函數庫。它實現Linux的傳統POSIX應用編程接口(API),該API可被用來開發用戶空間應用。它通過系統調用與內核對接,并提供高階服務。

工程師有幾種C函數庫選擇:

●glibc是開源GNU項目提供的可用C函數庫。該庫是全功能、可移植的,它符合Linux標準。

●嵌入式GLIBC(EGLIBC)是一款針對嵌入式系統優化的衍生版。其代碼是精簡的,支持交叉編譯和交叉測試,其源代碼和二進制代碼與GLIBC的兼容。

●uClibc是另一款C函數庫,可在閃存空間有限、和/或內存占用必須最小的情況下使用。

調試器通常也是工具鏈的一部分,因為在目標機上調試應用程序運行時,需要一個交叉調試器。在嵌入式Linux領域,GDB是常用調試器。

上述工具是如此地不可或缺,但當它們各自為戰時,會花太長時間來編譯Linux源代碼并將其整合成最終映像(image)。幸運的是,Buildroot(自動生成交叉編譯工具的工具)會自動完成構建一個完整嵌入式系統的過程,并通過產生下述任一或所有任務,簡化了交叉編譯:

●交叉編譯工具鏈

●根文件系統

●內核映像

●引導映像

對嵌入式系統設計師來說,還可以方便地使用一種工具(utility)聚合工具,如BusyBox,這種工具將通常最需要的工具整合在一起。根據 BusyBox的信息頁面介紹,“它將許多常用UNIX工具的微型版本整合成一個小的可執行文件。它提供了對大多數你通常會在GNUfileutils和 shellutils等工具中看到的工具的替代。BusyBox里的工具通常比其全功能GNU對應版本的選擇少;但所包含選項所提供的預期功能和行為則與對應的GNU所提供的幾無差別。對任何小或嵌入式系統來說,BusyBox提供的環境都是相當完整的。”

最后一個重要工具是一款BSP,是為搭載了項目目標MCU或處理器的主板專門做的。

BSP包括預先配置的工具,以及將操作系統加載到主板的引導加載程序。它還為內核和器件驅動器提供源代碼(見圖1)。

圖1:用于STM32F429Discovery板的EmcraftBSP的主要部件

步驟2:引導序列、時鐘系統、存儲器和串行接口

典型的嵌入式Linux啟動順序執行如下:

1)引導加載程序固件(示例項目里的U-Boot)運行于目標MCU內置閃存(無需外部存儲器),并在上電/復位后,執行所有必需的初始化工作,包括設置串口和用于外部存儲器(RAM)訪問的存儲器控制器

2)U-Boot可將Linux映像從外部Flash轉移到外部RAM,并將控制交接到RAM中的內核入口點。可壓縮Linux映像以節省閃存空間,代價是在啟動時要付出解壓縮時間。

3)Linux進行引導并安裝基于RAM的文件系統(initramfs)作為根文件系統。在項目構建時,Initramfs被填充以所需的文件和目錄,然后被簡單地鏈接到內核。

4)在Linux內核下,執行/sbin/init。/sbin/init程序按照/etc/inittab中配置文件的描述對系統進行初始化。

5)一旦初始化進程完成運行級執行和/sbin/init里的命令,它會啟動一個登錄進程。

6)殼初始化文件/etc/profile的執行,標志著啟動過程的完成。

通過使能就地執行(ExecuteInPlace——XIP)可以顯著縮短啟動時間、提升整體性能,XIP是從閃存執行代碼的方法。通常,Linux代碼是從閃存加載到外部存儲器,然后從外部存儲器執行。通過從閃存執行,因不再需復制這步,從而只需較少的存儲器,且只讀存儲器不再占程序空間。

本文的示例項目基于STM32F429MCU。事實上,用戶可能會發現,開始時,STM32F4系列MCU的外設初始化不容易掌握。幸運的是,意法半導體開發了一些工具來幫助解決這一問題。STM32CubeMX初始化代碼生成器(部件編號UM1718)屬于最新的。該工具包括外設初始化的每一個細節,在配置外設時,會顯示警告和錯誤、并警告硬件沖突。

對小型嵌入式Linux項目來說,STM32F429MCU內部閃存足夠用。重要的是要記住:嵌入式Linux項目中使用多個二進制映像(引導加載程序、Linux內核和根文件系統):這些都需要閃存扇區邊界對齊。這就避免了在裝載一個圖像時,另一圖像被部分刪除或損壞的風險。

步驟3:在主機上安裝Linux

要構建一個嵌入式Linux項目,一臺Linux主機是必需的。對于WindowsPC,最好是安裝OracleVirtualBox,以創建“一臺”512MbyteRAM和16Gbyte硬盤的新虛擬機。

有許多Linux版本可用;據筆者的經驗,Debian就是與VirtualBox環境相匹配的一款。這款Linux主機必須能夠訪問互聯網,以便下載針對這款ARMCortex-M目標MCU的GNU交叉編譯工具。設計師將創建一個類似于圖1所示的樹形結構,并將交叉構建工具提存到/tools文件夾。

在這點上,有必要建立一個ACTIVATE.sh腳本。只需使用下列代碼就可實現。(。。。。。。》是提取到的GNU工具文件夾路徑):

exportINSTALL_ROOT=。。。。。。。》

exportPATH=$INSTALL_ROOT/bin:$PATH

exportCROSS_COMPILE=arm-uclinuxeabiexport

CROSS_COMPILE_APPS=arm-uclinuxeabiexport

MCU=STMDISCO

exportARCH=arm

在干凈的Linux系統中安裝GNU工具,但其使用并非自給自足,實際上還需要其它系統的配合。其運行實際上依賴于若干其它系統組件(如主機C/C++ 編譯器、標準C函數庫頭文件,以及一些系統工具)。獲得這些必要組件的一種方法是安裝用于C的Eclipse集成開發環境(IDE)。除解決這個迫在眉睫的問題外,EclipseIDE還可在開發過程中的許多其它方面提供幫助,當然,詳述EclipseIDE的特性不是本文目的。

現在,是時候啟用Linux終端工具了:點擊“應用程序(Applications)”,然后“附件(Accessories)”和“終端(Terminal)”(見圖2)。

圖2:Linux包含的“終端(Terminal)”工具和“文件(Files)”、一種類似Windows資源管理器的圖形化工具。

終端是用于配置Linux主機和構建嵌入式Linux應用程序的主要工具。鍵入以下命令來安裝Eclipse和其它所需工具:

su[輸入根用戶密碼]

apt-getinstalleclipse-cdt

apt-getinstallgenromfs

apt-getinstalllibncurses5-dev

apt-getinstallgit

apt-getinstallmc

準備該Linux項目的最后一步是下載STM32F429DiscoveryBuildroot,并解壓到/uclinux文件夾。

步驟4:用Buildroot構建μClinux

現在有必要關閉先前使用根用戶配置文件的終端,并啟動一個新終端。在命令行中輸入“mc”,并使用導航器導航到“Documents”,然后輸入 “uClinux”命令。按Ctrl+O并激活LinuxARMCortex-M開發部分,并運行“.ACTIVATE.sh”命令。再次按下 Ctrl+O并進入“stm32f429-linux-builder-master”文件夾。

用戶現在有兩個選擇。如果使用VirtualBox中的示例項目,請遵循“makeclean”和“makeall”命令序列。如果準備一個全新環境,使用“make”命令。約30分鐘后,新的μClinux映像將可用,如下所示:

out\uboot\u-boot.bin

out\kernel\arch\arm\boot\xipuImage.bin

out\romfs.bin

將這些新映像寫入閃存。如果使用Windows和ST-LINK工具,下面的代碼將工作:

ST-LINK_CLI.exe-ME

ST-LINK_CLI.exe-P“u-boot.bin”0x08000000

ST-LINK_CLI.exe-P“xipuImage.bin”0x08020000

ST-LINK_CLI.exe-P“romfs.bin”0x08120000

將串行調試器(serialconsole)連接到目標電路板(外部RX=》PC10、外部TX=》PC11、115200bits/s、8個數據位、無奇偶校驗、1個停止位模式),然后按下復位按鈕,該μClinux項目將啟動運行。開機輸出將顯示在串行調試器上,顯示屏將出現Linux的企鵝標識。

步驟5:創建“你好,世界”應用

現在,按照代碼示例和下面的說明,將一個用戶應用添加到μClinux項目中。

創建:“stm32f429-linux-builder-master/user/src/hello.c”文件:

#include

intmain(){

printf(“Hello,world\n”);

return0;

}

必要時使用Tab鍵,創建:“stm32f429-linux-builder-master/user/Makefile”文件:

CC=$(CROSS_COMPILE)gcc

LDFLAGS?=$(CFLAGS)

target_out?=out

all:checkdirs

[Tab]$(CC)$(LDFLAGS)src/hello/hello.c-o$(target_out)/bin/

hello$(LDLIBS)

[Tab]-rm-rf$(target_out)/bin/*.gdb

checkdirs:

[Tab]mkdir-p$(target_out)/bin

clean:

[Tab]-rm-rf$(target_out)

通過activate.sh腳本,在不激活交叉編譯環境下,在主機測試“Hello,world”這個應用。

在/user文件夾下,輸入:

makeall

。/out/bin/hello

為將hello.c嵌入到LinuxBuildroot里的腳本,修改mk/rootf.mak文件,必要時,使用Tab鍵。(粗體字表示新行開始處):

。。。

user_hello:

[Tab]make-C$(user_dir)CROSS_COMPILE=$(CROSS_

COMPILE)CFLAGS=$(ROOTFS_CFLAGS)target_

out=$(target_out_user)

$(rootfs_target):$(rootfs_dir)$(target_out_busybox)/.config

user_hello

[Tab]cp-af$(rootfs_dir)/*$(target_out_romfs)

[Tab]cp-f$(target_out_kernel)/fs/ext2/ext2.ko$(target_out_romfs)/lib/modules

[Tab]cp-f$(target_out_kernel)/fs/mbcache.ko$(target_out_romfs)/lib/modules

[Tab]cp-f$(target_out_user)/bin/*$(target_out_romfs)/usr/bin

需對mk/defs.mak文件做最后修改。加入以下幾行:

。。。

user_dir:=$(root_dir)/user

target_out_user:=$(target_out)/user

user_dir:=$(root_dir)/user

target_out_user:=$(target_out)/user

一旦在目標MCU上建成、下載并運行映像,就可在/usr/bin目錄中找到該應用程序以及其它已有的應用程序。在連接到Discovery板的終端上鍵入“hello[回車]”,可對該應用進行測試。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7564

    瀏覽量

    151506
  • 嵌入式
    +關注

    關注

    5085

    文章

    19138

    瀏覽量

    305696
  • Linux
    +關注

    關注

    87

    文章

    11312

    瀏覽量

    209701

原文標題:嵌入式項目中使用Linux的技巧

文章出處:【微信號:edn-china,微信公眾號:EDN電子技術設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    半導體首款8引腳STM32微控制器正式發布

    半導體8引腳STM32微控制器(MCU)現已上市,緊湊、經濟的封裝讓簡單的嵌入式開發項目也能
    發表于 09-23 10:24 ?3295次閱讀

    半導體市場領先的 STM32 微控制器加快無線產品開發

    半導體的高集成度 STM32WB 單片集成 2.4GHz射頻收發
    發表于 09-26 09:10 ?2984次閱讀
    <b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導體</b>市場領先的 <b class='flag-5'>STM32</b> <b class='flag-5'>微控制器</b>加快無線產品開發

    半導體推出直觀的固件開發工具,加快物聯網傳感設計進程

    板的NUCLEO-F401RE和NUCLEO-L476RG開發板,以及半導體的SensorTile IoT模塊。SensorTile集成了STM
    發表于 07-13 13:10

    半導體收購圖形用戶界面軟件專業開發公司Draupner Graphics

    系統等各種設備和系統。STM32系列微控制器的制造商半導體是世界領先的32位Arm?Cortex?-M-core
    發表于 07-13 15:52

    半導體推出STM32L5超低功耗微控制器 加強物聯網安全防御能力

    挑戰性的-40°C至125°C的工作環境。詳情訪問www.st.com/stm32l5相關新聞半導體(ST)新系列STM32L4+
    發表于 10-17 10:37

    STM32微控制器

    半導體(ST)是世界最大的半導體公司之,是MCU微控
    發表于 07-23 10:11

    STM32F030F4P6微控制器有何性能

    半導體MCU型號STM32F030F4P6采用ARMCortex-M0內核,運算速度高達48兆赫茲。
    發表于 01-27 08:09

    半導體新增TinyML開發者云

    半導體已將其 STM32Cube.AI 機器學習開發環境放入云中,并配有可云訪問的
    發表于 02-14 11:55

    昂科在線燒錄支持ST半導體的32位微控制器STM32F091CCT6的ic燒錄

    芯片燒錄行業領導者-昂科技術近日發布最新的燒錄軟件更新及新增支持的芯片型號列表,其中ST半導體的32位微控制器STM32F091CCT6
    發表于 02-28 16:51

    關于半導體的STM8L和STM32L系列微控制器的可用封裝匯總

    關于半導體的STM8L和STM32L系列微控制器的可用封裝匯總
    發表于 10-16 09:13 ?58次下載
    關于<b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導體</b>的STM8L和<b class='flag-5'>STM32</b>L系列<b class='flag-5'>微控制器</b>的可用封裝匯總

    半導體STM32 8位和32位微控制器系列的產品選擇指南資料免費下載

    本文檔的主要內容詳細介紹的是半導體STM32 8位和32位微控制器系列的產品選擇指南資料免費下載。
    發表于 05-15 17:23 ?6次下載
    <b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導體</b><b class='flag-5'>STM32</b> 8位和32位<b class='flag-5'>微控制器</b>系列的產品選擇指南資料免費下載

    半導體STM32系列微處理微控制器選型手冊免費下載

    本文檔的主要內容詳細介紹的是半導體STM32系列微處理微控制器選型手冊免費下載。
    發表于 07-12 08:00 ?4次下載

    半導體擴大STM32生態系統,加快基于STM32U5 極低功耗微控制器的應用開發

    半導體推出新的STM32Cube 軟件包和開發工具以及評估板,加快使用最新的 STM32U5微控制器
    發表于 10-11 16:12 ?1111次閱讀
    <b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導體</b>擴大<b class='flag-5'>STM32</b>生態系統,加快基于<b class='flag-5'>STM32</b>U5 極低功耗<b class='flag-5'>微控制器</b>的應用開發

    STM32F429開發板用戶手冊】第24章 STM32F429的USART應用之八串口FIFO實現

    本章節為大家講解STM32F429的8串口的FIFO驅動實現,后面的ESP8266,GPS,RS485,GPRS等試驗都是建立在這個驅動的基礎
    發表于 12-27 18:44 ?10次下載
    【<b class='flag-5'>STM32F429</b>開發板用戶手冊】第24章 <b class='flag-5'>STM32F429</b>的USART應用之八<b class='flag-5'>個</b>串口FIFO<b class='flag-5'>實現</b>

    半導體微控制器EMC設計指南

    電子發燒友網站提供《半導體微控制器EMC設計指南.pdf》資料免費下載
    發表于 10-07 15:08 ?6次下載
    <b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導體</b><b class='flag-5'>微控制器</b>EMC設計指南
    主站蜘蛛池模板: av女优快播| 久久亚洲国产中文字幕| 欧美精品专区免费观看| 99视频在线观看视频| 女人高潮特级毛片| 纯肉无码AV在线看免费看| 天天摸夜添狠狠添高| 国产综合在线视频| 这里只有精品在线视频| 欧美激情视频一区| 国产AV无码成人黄网站免费| 学生妹被爆插到高潮无遮挡| 久久久欧美国产精品人妻噜噜| 99视频在线国产| 甜涩性爱下载| 久久青青热| 成人亚洲视频在线观看| 亚洲精品无码专区在线播放| 蜜芽一二三区| 国产精品69人妻无码久久| 樱花草在线观看影院| 日本不卡一二三| 精品一区二区三区免费观看| av56788成 人影院| 亚洲国产AV无码综合在线| 美女与男人对肌免费网站| 国产精品久久久久久久人热| 真实农村女人野外自拍照片| 色大姐综合网| 麻豆精品传媒一二三区| 国产精华av午夜在线观看| 中文字幕无码亚洲视频| 香港成人社区| 欧美国产精品主播一区| 国产午夜电影在线观看不卡| 99视频在线精品免费观看18| 亚洲国产日韩欧美视频二区| 全彩黄漫火影忍者纲手无遮挡| 果冻传媒2021在线观看| xx在线观看| 中文字幕一区二区三区在线不卡|