2009年7月4日 星期六

Andes core 平台支援JAVA語言

目前Andes core平台支援JAVA語言需使用JBlend,將Qt for Embedded Linux上架構JBlend,就可以跑JAVA的程式了,不過JBlend需與曜碩科技洽談.


曜碩科技(iaSolution Inc.)JBlend架構.
http://www.iasolution.net/cht/corp/index.html


提供JAVA JBlend for Andes core平台支援架構.
http://www.andestech.com/p5-081204-1.htm


2009年7月3日 星期五

Embedded Linux系統(C)_在SD card上執行Embedded Linux

1. 開發環境:
(1). CPU: Andes RISC CPU core_N12.
(2). 平台: ADP-XC5FF676 V1.1.
(3). Linux OS: Ubuntu9.04.
(4). Toolchains: AndeSight v1.3.3 for Linux.
(5). Embedded Linux2.6.18
2. 目的: 當實驗板增加或是刪減功能時會重新Build Linux kernel,新Build Linux kernel暫時不想燒錄在實驗板上的Flash時,需在SD card執行Embedded Linux.
3. 實驗步驟:
(1). 取得Build好的〝os.img〞檔,此為Embedded Linux2.6.27;準備2張SD card一張format格式為FAT32(存放os.img檔),一張format格式為EXT3(Linux下支援長檔名).
下載已重新Build Linux kernel:
http://cid-b01cb9ac20175eaa.skydrive.live.com/self.aspx/Embedded%20Linux%202.6.27/os.img
注意: 如想自行重新Build Linux kernel請參照Embedded Linux系統(A)
http://andescore.blogspot.com/2009/03/embedded-linuxa-building-linux.html
(2). 將〝os.img〞檔存放於SD card(FAT32格式),並裝上ADP-XC5FF676 V1.1實驗板上,並接上URAT與電腦連接後,開啟電源,按SW2->SW4.
(3). 使用"超級終端機",輸入"97",再輸入〝c:〞.(4). 輸入〝os.img〞,再輸入〝0x2000000〞. (5). 輸入〝55〞.(6). 輸入〝go 0x2000000〞執行SD card上的Embedded Linux.(7). 將需執行程式hello.adx存放於SD card(EXT3格式),並與ADP-XC5FF676 V1.1實驗板上SD card做跟換.
注意:實驗程式依照Embedded Linux系統(3-1)內的hello.adx.
下載完整程式:
http://cid-b01cb9ac20175eaa.skydrive.live.com/self.aspx/AndeSight%7C_V133%7C_helloworld1/helloworld1.zip
(8). 其他實驗步驟依照Embedded Linux系統(3-1) 步驟3.(7)~3.(10) 操作,執行程式.
http://andescore.blogspot.com/2009/05/embedded-linux3-1toolchains-bould.html


2009年7月2日 星期四

Embedded Linux系統(B)_使用Toolchains build Andes Diagnostic Program project

1.製作Andes Diagnostic Program的rominit.bin檔程式.
2.環境:
(1). Linux OS: Ubuntu8.10.
(2).實驗板:ADP-XC5FF676 V1.1(Andes N12 core).
3.取得晶心科技BSP(Board Support Packge)光碟內的"v1_3-BSP-release.tar"壓縮檔,” v1_3-BSP-release.tar.gz\v1_3-BSP-release\ADP-XC5\Source\Boot\afw_ag101.rar”開啟,之後再將” afw_ag101.rar\afw_ag101_cic\andes_ip\ag101_chip\leopard_bootrom”檔案夾下的burninil與fLibl兩個檔案夾複製出來並存在一個新開檔案下.
4.Build Project:
(1)使用”Terminal”現在fLibl\nds32目錄下鍵入”make rebuild”,發現有Error.
(2).這個Error是因為Makefile使用不同編輯軟體所造成的,只要將下圖所示87行的else與\中間加入空格後,存檔.
(3). 重新執行”make rebuild”後,Error消除.
(4).之後再進入burninil\nds32目錄下鍵入”make rebuild”,發現有Error.
(5).這個Error也是因為Makefile使用不同編輯軟體所造成的,只要將下圖所示110行的else與\中間加入空格後,存檔.
(6). 重新執行”make rebuild”後,Error消除.
(7). 之後在burninil\nds32目錄下產生了rominit.bin的燒錄檔.

5.將rominit.bin燒錄至ADP-XC5FF676的Flash內.

(1). 將rominit.bin的燒錄檔存至SD卡內,裝上ADP-XC5FF676實驗板上,並將URAT接至PC,開啟電源,按"SW2 -> SW4".

(2). 使用"Tera Term",Baud rate設定38400,輸入"97 -> C: -> rominit.bin -> 0x200000 "再輸入"55 -> burn 0x200000 0x80400000 0x100000",之後開始燒錄.

*SD卡燒錄至Flash完整流程圖:
http://sites.google.com/site/andescore32/Home/hardware/adp-xc5ff676

(3).燒錄完成後重新開啟電源,按"SW2 -> SW5",發現按鍵不一樣了(由SW4改成SW5),這是因為原來實驗板的BSP為v1.3.1,現在Build code的BSP為v1.3,也可以用來證明燒錄成功.
(4).燒錄成功"Tera Term",顯示資訊,代表系統開機正常.



使用linker(ld)

使用Linker Scripts時要有所謂VMA(virtual memory address)與LMA(load memory address)的觀念.
VMA指的就是系統上的RAM或Local memory.
LMA指的就是系統是的ROM或是Flash.
當編譯器把程式編譯成燒錄檔(.BIN)後,會將程式燒錄至ROM或是Flash,但是系統執行時,會將程式載到RAM或是Local memory.

範例1:
SECTIONS
{
. = 0x10000;
.text : { *(.text) }
. = 0x8000000;
.data : { *(.data) }
.bss : { *(.bss) }
}

程式放在0x10000的位址.
資料放在0x8000000的位址.

SECTIONS :描述輸出文件的記憶體佈局.
. :位址計數器,SECTIONS開始第一個位址計數器值為0.
* : 所有的輸入,例如*(.data),指的是.data所有的輸入.
.text :程式段,內容通常不會改變,可以直接在ROM裡執行,如果有執行速度的需求,也可放在RAM執行.
.data : 全域變數(global)有設定初始值放置的區段,因為變數值會被改變,程式執行時會放置RAM裡執行,例如 int i = 10;.
.bss(block started by symbol): 全域變數(global)沒有設定初始值放置的區段,因為變數沒有初始值,系統執行時,會定址到RAM,例如 int i;.
/* */ :註解.

2009年7月1日 星期三

(參考書籍)程式設計師的自我修養:連結、載入、程式庫


當程式經過編譯器編譯後,程式燒錄至在ROM或是Flash,系統執行時在RAM或是local memory的配置放式都是由linker所描述的,想要了解linker的做法,這本書籍寫的非常的詳細.

Embedded Linux系統(A) Building Linux Kernel(Ramdisk)

1.實驗環境:
(1).Embedded Linux 2.6 OS.
(2).PC OS:Ubuntu 8.10.(3).實驗平台:ADP-XC5FF676 v1.1(Andes core N12).
(4). BSP-v2_0_0-release版.
2.目的:
(1). 使用e2fsimage 製作 Linux root的file system image(ramdisk.img).
(2). 製作ramdisk目的主要是要將Linux kernel image燒錄在ADP-XC5 FF676 Intel 的flash上,當系統開機時,會在系統上的SRAM產生虛擬硬碟,執行Embedded Linux.
3. 步驟:
一.Building file system image:(1). 將BSP光碟內路徑〝BSP-v2_0_0-release/ADP-XC5/Source/RootFS〞的disk.tgz與e2fsimage複製到Ubuntu任意檔案夾下.
(2). 開啟〝Terminal〞輸入〝tar xfvz disk.tgz〞解壓縮.(3). 使用〝e2fsimage〞tool製作file system image,在〝Terminal〞輸入〝./e2fsimage -f ramdisk.img -d ./disk -s 8M〞.*注意:
a. 〝8M〞 這個參數可以依照實驗板上SRAM大小來設定file system大小,但注意需預留其他程式執行時,所需要的SRAM大小.
b. e2fsimage相關參數:
The options for e2fsimage are:
v :verbose.
f :create file system image file.
d :indicate root directory to be copied to the image.
s :indicate size of the file system (size should be less then or equal to the kernel default RAM disk size configuration).

二. Build Linux kernel system image(1). 將BSP光碟內路徑
〝BSP-v2_0_0-release/ADP-XC5/Source/Linux〞的linux-2.6.tgz複製到Ubuntu任意檔案夾下.
(2). 開啟〝Terminal〞輸入〝tar xfvz linux-2.6.tgz〞解壓縮.(3). 輸入〝cd linux-2.6〞,進入解壓縮檔案的目錄下.
(4). 設定ADP-XC5FF676實驗板menuconfig所需之預設參數,輸入〝./build_linux2.6.sh xc5〞,如無需修改參數可以跳過步驟(5).

*注意:
a. 第一次執行〝make menuconfig〞發現Error,檢視結果缺少〝curses.h〞時,
請安裝lib,輸入〝sudo apt-get install libncurses5-dev〞開始安裝. b. 使用BSP-v1_3_0-release,請輸入〝./build_linux2.6.sh leopard〞.

(5). 當ADP-XC5FF676 需增加設備時,Linux Kernel Drive 需做些修改時,輸入〝make menuconfig〞,進入Linux Kernel Configuration,可以自行設定一些參數. (6). 在linux-2.6解壓縮的目錄下,須進入boot檔案夾內,輸入〝cd arch/nds32/boot〞.
(7). 與步驟一.之(3).所產生的〝ramdisk.img〞檔與Linux2.6 Kernel 〝zImage〞包在一起,輸入〝make bootpImage INITRD=/ (ramdisk.img檔案路徑)/ ramdisk.img〞.
(8). 最後產生的〝bootpImage〞燒錄檔.

三. 將bootpImage燒錄至ADP-XC5FF676的Flash上.(1). 將bootpImage的燒錄檔存至SD卡內,裝上ADP-XC5FF676實驗板上,並將URAT接至PC,開啟電源,按"SW2 -> SW4".
(2). 使用"Tera Term",Baud rate設定38400,輸入"97 -> C: -> bootpImage -> 0x2000000 "再輸入"55 -> burn 0x2000000 0x80800000 0x900000",之後開始燒錄.

*SD卡燒錄至Flash完整流程圖: http://sites.google.com/site/andescore32/Home/hardware/adp-xc5ff676