筆者阿緯我最近拜讀了李無言所寫的"一步步寫嵌入式操作系統-ARM的編程方法與實踐"一書
在試著依照第一章所述建構開發環境的過程當中,發現原作者所提供的網站已經不復存在
同時,在查詢解決方案之時發現許多中國大陸的網友也和阿緯我遇到了許多相同的問題(據說很多人因為這些問題卡關很久)
這些問題不搞定,就只能在這本書中看理論的部份
少了動手實作,成就感就少了很多啊
於是只好自己下去嘗試許多解決方式,最後還真的運氣很好試出了一個
身為一員知識開放的信奉者,豈能不分享出來 T_T
以下將開發環境建構分成 skyeye 1.2.6 的編譯與 arm s3c2410的交叉編譯器的部份進行解說
skyeye 1.2.6 編譯
1.下載:
首先請到本網址中下載 skyeye 1.2.6 版本的原始碼: https://code.google.com/p/leeosbasic/downloads/detail?name=skyeye-1.2.6_rc1.tar.bz2&can=2&q=
2.下載完成後,將工作目錄輕換至原始碼壓縮檔所在位置進行解壓縮,指令如下:
cd ~/Download (ps. ~/Download 是我下載後程式碼所在位置,各位狀況如果不同請視情況更改)
tar xvf skyeye-1.2.6_rc1.tar.bz2
3.解壓縮完成後,現在還不要急著編譯,因為程式碼有語法問題必須要修改:
修改與編譯步驟如網址內容所述: http://java-mans.iteye.com/blog/1647005
4.現在skyeye已經編譯安裝完成啦!爽.....
arm s3c2410的交叉編譯器
我的作業系統環境是 UBUNTU 14.04 32bit,在這環境中有 gcc-arm-linux-gnueabi 的交叉編譯器套件
如果其他的 distribution 或是稍舊的 UBUNTU 的話可以參考 linaro 提供的 arm 交叉編譯器相關資料進行安裝
1.安裝指令:
sudo apt-get install gcc-arm-linux-gnueabi
2.現在交叉編譯器已經安裝完成囉!!
最後,由於這個版本的交叉編譯器預設會將程式碼編譯成 armv6 的組語和機械碼
因此,在編譯的指令上我們必須要稍作修改(跟書本上鎖說的不一樣),以第二章的第一個範例程式為例
C語言的編譯指令為:
arm-linux-gnueabi-gcc -O2 -g -march=armv4 -c helloworld.c
(-amrch=armv4 的意思是說,我們要將程式編譯成armv4架構的elf格式文件)
組語(中國大陸稱為匯編)組譯指令為:
arm-linux-gnueabi-gcc -O2 -g -march=armv4 -c helloworld.s
鍊結指令:
arm-linux-gnueabi-ld -e helloworld -Ttext 0x0 helloworld.o -o helloworld
機械碼抽出指令:
arm-linux-gnueabi-objcopy -O binary helloworld helloworld.bin
後續章節(第二章末頁之後)的Malefile在這裡提供一個簡單的範例
CC=arm-linux-gnueabi-gcc
LD=arm-linux-gnueabi-ld
OBJCOPY=arm-linux-gnueabi-objcopy
CFLAGS=-O2 -g
ASFLAGS= -O2 -g
LDFLAGS= -Tleeos.lds -Ttext 30000000
OBJS=init.o start.o boot.o abnormal.o mmu.o print.o
.c.o:
$(CC) $(CFLAGS) -c -static -march=armv4 $< -lgcc
.s.o:
$(CC) $(ASFLAGS) -c -march=armv4 $<
leeos:$(OBJS)
$(LD) -static -nostartfiles -nostdlib $(LDFLAGS) $? -o $@
$(OBJCOPY) -O binary $@ leeos.bin
clean:
rm *.o leeos leeos.bin -f
留言列表