新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 【E問E答】嵌入式項目中使用Linux有哪些技巧?

        【E問E答】嵌入式項目中使用Linux有哪些技巧?

        作者: 時間:2017-09-27 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/201709/364890.htm

          典型的啟動順序執行如下:

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

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

          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內部閃存足夠用。重要的是要記?。?a class="contentlabel" href="http://www.104case.com/news/listbylabel/label/嵌入式">嵌入式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.jpg

         

          圖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映像將可用,如下所示:

          outubootu-boot.bin

          outkernelarcharmbootxipuImage.bin

          outromfs.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,worldn”);

          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[回車]”,可對該應用進行測試。


        上一頁 1 2 下一頁

        關鍵詞: 嵌入式 Linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 扶余县| 灵山县| 西安市| 常德市| 横峰县| 织金县| 平昌县| 小金县| 湖北省| 修武县| 长乐市| 曲阳县| 麻栗坡县| 天柱县| 宿州市| 阿图什市| 犍为县| 遂平县| 亚东县| 张家港市| 井陉县| 新安县| 祁连县| 吉林市| 聊城市| 贺州市| 蒙自县| 西盟| 镇沅| 三河市| 鞍山市| 百色市| 海丰县| 遵义市| 武冈市| 永福县| 平和县| 靖宇县| 芒康县| 兖州市| 依兰县|