2013-11-14 最近在看《一步一步寫嵌入式操作系統》,感覺此書甚好,許多地方講得很清楚、可操作性強,計劃邊讀邊實踐邊寫筆記,希望能夠逐步熟悉嵌入式操作系統底層的東西,最終剪裁出一套實用的實時嵌入式操作系統,備選的裁剪對象有ucos、RTlinux和uClinux。
SkyEye介紹
“SkyEye是一個指令級模擬器,可以模擬多種嵌入式開發板,可支持多種CPU指令集,在SkyEye上運行的操作系統意識不到它是在一個虛擬的環境中運行,而且開發人員可以通過SkyEye調試操作系統和系統軟件。由于SkyEye的目標不是驗證硬件邏輯,而是協助開發、調試和學習系統軟件,所以在實現上SkyEye與真實的硬件環境相比還是有一定差別的。SkyEye在時鐘節拍的時序上不保證與硬件完全相同,對軟件透明的一些硬件仿真進行了一定的簡化。這樣帶來的好處是SkyEye的執行效率更高。”詳細介紹見[這里](http://www.ibm.com/developerworks/cn/linux/l-skyeye/part1/)
SkyEye安裝
在Linux下可直接安裝,在Windows下要先安裝Cygwin。都可以Google到很多資料。 兩種方法: 1.sudo apt-get install skyeye,版本是1.2.5 2.自己編譯安裝。 我的系統是Ubuntu12.10,64位,折騰了好久,從0.9到最新的版本都試過,都沒編譯安裝成功過。 原因有以下幾點: 1.GCC等對版本有要求 2.64位的Ubuntu需要兼容32位的包 3.針對不同的Ubuntu版本,一些宏定義和函數需要相應修改。 無奈的我最后只能暫時用從軟件源里安裝的1.2.5版本。暫時沒發現大的問題,不足的地方在于對書中用到的ARM920T支持不好,貌似是地址映射不對,串口打印出來的信息無法在終端上顯示。所以我現在用的ARM7TDMI架構的S3C44B0X,對于書里提到的例子,代碼里內存地址什么的需要根據芯片手冊相應修改。 關于安裝,可以Google到大量資料和常見問題的解決方法,不再贅述。
HelloWorld參考[Skyeye下的Hello world測試](http://www.mculover.com/post/103.html) 1.新建一個helloworld.c文件:[root@localhost root]#vi helloworld.c
2.輸入代碼: #define UTXH0 ((volatile unsigned int *)(0x01d00020))
//S3C44B0X的串口0發送寄存器地址是UTXH0 void helloworld(void){ const char *p="HelloWorld!/r/n"; while(*p){ *UTXH0=*p++; } while(1); } 3.交叉編譯。使用書上推薦的arm-elf-gcc交叉編譯器。 4.將源碼編譯生成.o目標文件:[root@localhost root]#arm-elf-gcc -O -c helloworld.c,新生成helloworld.o文件會出現在當前目錄下。 5.將目標文件鏈接生成可執行文件,這里生成帶有很多信息的elf格式:[root@localhost root]#arm-elf-ld -e helloworld -Ttext 0x00000000 helloworld.o -o helloworld,新生成的helloworld文件會出現在當前目錄下 6.將elf文件編譯為.bin文件:[root@localhost root]#arm-elf-objcopy -O binary helloworld helloworld.bin,新生成的helloworld.bin文件會出現在當前目錄下 7.在當前目錄下新建一個skyeye.conf文件:[root@localhost root]#vi skyeye.conf 輸入:
cpu:arm7tdmi mach:s3c44b0 #2M Flash ROM mem_bank:map=M,type=RW,addr=0x00000000,size=0x00200000,file=./helloworld.bin#IO Addr mem_bank:map=I,type=RW,addr=0x01c00000,size=0x00400000 8.運行。在終端中輸入skyeye
新聞熱點
疑難解答