uclinux下stm32開發(fā)環(huán)境搭建
什么是uclinux
uclinux表示micro-control linux.即“微控制器領(lǐng)域中的Linux系統(tǒng)”,是Lineo公司的主打產(chǎn)品,同時也是開放源碼的嵌入式Linux的典范之作。uCLinux主要是針對目標(biāo)處理器沒有存儲管理單元MMU(Memory Management Unit)的嵌入式系統(tǒng)而設(shè)計的。它已經(jīng)被成功地移植到了很多平臺上。由于沒有MMU,其多任務(wù)的實現(xiàn)需要一定技巧。
uClinux是嵌入式Linux領(lǐng)域非常重要的分支,已成功應(yīng)用于路由器、機頂盒、PDA等領(lǐng)域,與標(biāo)準(zhǔn)Linux在內(nèi)存管理方面有著本質(zhì)的區(qū)別。
uCLinux是一種優(yōu)秀的嵌入式Linux版本,是micro-Controller-Linux的縮寫。它秉承了標(biāo)準(zhǔn)Linux的優(yōu)良特性, 經(jīng)過各方面的小型化改造,形成了一個高度優(yōu)化的、代碼緊湊的嵌入式Linux。雖然它的體積很小,卻仍然保留了Linux的大多數(shù)的優(yōu)點:穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò)功能、對各種文件系統(tǒng)完備的支持和標(biāo)準(zhǔn)豐富的API。它專為嵌入式系統(tǒng)做了許多小型化的工作,目前已支持多款CPU。 其編譯后目標(biāo)文件可控制在幾百KB數(shù)量級,并已經(jīng)被成功地移植到很多平臺上。
uClinux下STM32開發(fā)環(huán)境搭建
一實驗環(huán)境介紹:
目標(biāo)板:STM3210E-EVAL
上位機操作系統(tǒng):RedHatFedora 10
虛擬機:VMware 6.5
二、在開始搭建環(huán)境之前你需要三個壓縮包:
1、IA32 GNU/Linux Installer :GNU工具安裝包,你可以把它簡單的理解為Windows下面的MDK或者IAR等編譯環(huán)境。
2:這是Linux 2.26內(nèi)核的源文件??梢岳斫鉃槭窃赪indows下面我們要編寫的文件的工程的源文件的一部分。
3、uClinux-dist-20080808-20090112.patch.gz:為了支持STM32的開發(fā)和加入一些源文件??衫斫鉃樵赪indows下面我們要編寫的文件的工程的源文件的另一部分。
第2個軟件包加上第3個軟件包就是我們在MDK和IAR下的工程源文件了。理所當(dāng)然地就包含了TImer.c lib.h等STM32的庫文件了。
OK,接下為你地有一個在PC上跳的Linux操作系統(tǒng),我這里安裝的是Fedora 10 。安裝過程這里就不作詳細的介紹了,這一類教程網(wǎng)上都有。這里有一點需要注意一下的,就是硬盤的空間盡可能的大點,因為軟件包2將占用2.6G左右的空間,而軟件包1、3也會占幾百M的空間。因此你在安裝完Linux后到少要保證你的用戶區(qū)的空間要不少于3G。
若你之前玩過S3C44B0X上面的uClinux且看了網(wǎng)上現(xiàn)在點擊率最高的那套視頻教程的話我想你大概會使用SSH建立一條從Window到虛擬Linux的通道。在這里我花點小時間說說一個我個人使用的方法:使用VMware自帶的軟件共享功能。
1、 Windows下,打開VMware。
2、 VM –》SetTIngs…。
3、 在彈出介面中選擇OpTIons標(biāo)簽。
4、 選擇Shared Folders.
5、 右邊選擇Always Enable
6、 右下角Add.。把你準(zhǔn)備共享的Windows文件夾(一般為你存放那幾個軟件包的文件夾或盤)的路徑(host path)添加進去。Name的話就是你在linux看到的文件夾的名稱。
說到這里再提一下Hardware那里可以把串口,USB等添加進去。方便日后調(diào)試之用。
啟動linux后你將會在/mnt/hgfs文件夾下看到你剛剛共享的文件夾。
三、把三個軟件包拷貝到linux里面。找一個容易找到的地方安頓好它們。
(1)接下來安裝GNU工具:
1、 運行終端
2、 使用cd命令進入那三個軟件包所在的文件夾
3、 執(zhí)行#./arm-2009q1-163-arm-uclinuxeabi.bin 運行第一個軟件包
4、 運行一段時間后會彈出一個安裝向?qū)Т翱?,跟著你需要做的就只是像在windows下面安裝軟件那樣安裝它就好?;旧鲜且宦穘ext ,到了選擇安裝文件夾時你需要注意一下它的位置,以便日后查找,用于設(shè)置環(huán)境變量。
(2)解壓第2個軟件包可以點擊右鍵解壓也可以在終端中輸入命令進行解壓:(在軟件包當(dāng)前目錄路徑下運行)# tar –xjvf uClinux-dist-20080808.tar.bz2
由于這個包的文件比較多,所以需要一定的時間。解壓后會生成一個uClinux-dist的文件夾。
(3)打補丁,patch第3個軟件包。
在終端下運行:
#zcat uClinux-dist-20080808-20090112.patch.gz | patch -p1(上面的命令的前提條件是第2個包的安裝路徑和path軟件包也是同時在當(dāng)前目錄下。)
若不在同一目錄下,你必須先進入uClinux-dist文件夾。運行#zcat /路徑/uClinux-dist-20080808-20090112.patch.gz | patch -p1上面路徑:用你的第3個軟件包的存放路徑代替。
四、為STM3210E-EVAL配置uClinux
進入uClinux-dist文件夾。
運行#make menuconfig
進入目標(biāo)板配置界面:
進入”Vendor/Product SelecTIon”
uClinuxOnSTM32選擇Vendor,
然后選擇”STMicroelectionics”如圖:[!--empirenews.page--]
完成上述選擇后會自動返回到上一界面。在上一界面選擇:” STMicroelectionics Products”里面有兩個選項:
“STM3210E-EVAL-jffs” 和“STM3210E-EVAL-MCU_Flash”
若選擇“STM3210E-EVAL-jffs”則程序?qū)耐獠看鎯ζ髦袉?。而選擇“STM3210E-EVAL-MCU_Flash”剛從內(nèi)部FLASH中啟動運行。從內(nèi)部運行的是一個uClinux的微內(nèi)核。是一個刪減的版本。
在這里我們選擇“STM3210E-EVAL-jffs”
然后回到最頂?shù)牟藛雾棥?/p>
進入Kernel / Library / Defaults Selection選項
第一項為”Kernal Version “ 選擇內(nèi)核版本。這里選擇2.26版。
第二項為”libc Version” C庫的版本,這里選擇None.
第三項為“Default all settings”將默認(rèn)廠商/產(chǎn)品的配置應(yīng)用到內(nèi)核。(為了將剛剛選擇的ST的E板的信息和配置加進去,些項必選)。
第四項為“Customize Kernel Settings”用于自定義內(nèi)核設(shè)置。(嵌入式的內(nèi)核都是自己定制的,此項必選)。
第五項為“Customize Application/Library Settings”用于自定義添加到文件系統(tǒng)的應(yīng)用。(可選擇性地為板子添加若刪除LED,LCE,串口等的應(yīng)用,此項必選)。
第六項為“Update Default Vendor Settings”其功能為將當(dāng)前修改的情況設(shè)置為默認(rèn)版本。(由官方開發(fā)的模板應(yīng)該是最好的,所以這項一般不選,當(dāng)你做出比官方更好,更穩(wěn)定的配置時,可將您自己的模板設(shè)置為默認(rèn)模板,在這里,這一項就不選項了。)
退出當(dāng)前配置,系統(tǒng)會提示你是否要保存。選擇”YES”退出后,接下來將自動進入uCLinux的配置界面:完整的內(nèi)核配置的詳盡介紹(每一項的意義,內(nèi)容很多)這里只介紹與E板相關(guān)的配置。
如圖所示:
進入”System Type”
該目錄內(nèi)容如下:
“MMU-based … “ 因為STM32不具有MMU,此項跳過。
“ARM System type” ARM系統(tǒng)類型。進去后選擇,基于STM32的ST板。
“STMicroelectionics,boards ”選項就只有一個選項了。選擇之。
“Support ARMv7-M processors” 選擇。
最重要的一項為設(shè)定內(nèi)存的地址。
“Set flash/sram size and base addr”
這些都需要根據(jù)你的板子的情況而家它上面有內(nèi)外部內(nèi)在的基地址和大小,中斷微量表的位置等的設(shè)置。
這一菜單配置完成后回到頂層菜單。
進入“Boot Options”菜單,
設(shè)置”Kernel Execute-In-Place from ROM”
這里設(shè)置的是程序執(zhí)行的地址。
若程序是在外部存儲器執(zhí)行的話這里的地址就為0X6400 0000
若為內(nèi)部FALSH執(zhí)行剛為0X8000 0000
設(shè)置后返回,進入“Device Drivers” -》 “Character Device” -》 “Serial Drivers”。意思是到”設(shè)備驅(qū)動”-》”字符驅(qū)動”-》”串口驅(qū)動”菜單下選擇對E板的串口支持,用于與板子的交互操作。
在此目錄下選擇:
[ * ] STM3210E-EVAL USART Port
[ *] Support for console on STM3210E-EVAL USART Port
選擇后返回頂層菜單。選擇”File System”“File systems” -》 “Miscellaneous File system”選擇[ * ] Journalling Flash File System v2 (JFFS2)support 實現(xiàn)對JFFS2文件系統(tǒng)的支持。
完成后退出內(nèi)核配置,自動進入應(yīng)用設(shè)置。
如上圖所示,選擇”Miscellaneous Applications ”
選擇: “STM3210E-EVAL Demo(s)”
菜單里面有幾個已經(jīng)做好的應(yīng)用。都選上。
最后退出菜單,保存設(shè)置。
在編譯剛剛所做的一切之前有一個很重要的步驟。就是把你的GNU工具的路徑添加到環(huán)境變量中。不然的話直接make 的話就會找不到編譯器。
執(zhí)行export PATH$PATH:”你安裝的GNU工具的路徑”
添加完成后,就可以運行make就可以了。
一切順利的話你將會在uClinux-dist/image目錄下看到生成的三個映像文件。(如果是使用外部FLASH的話)
若使用的是內(nèi)部的FLASH啟動的微內(nèi)核的配置的話就只會生成一個文件。而且生成的過程需要按以下的方式:
1、先運行make ucfront命令
2、再運行make user_only命令
3、跟著運行make romfs命令
4、最后運行make image命令,一切順利的話,你將會在uClinux-dist/image目錄下看到生成的映像文件。
最后將生成的影像文件拷貝回Windows,使用STM32的燒寫軟件Flash loader demonstrator將軟件燒寫進去就行了。