史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 多媒體影音轉檔燒錄技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-02-05, 01:40 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 UBOOT在普光ARM-9200嵌入式開發板程序

UBOOT在普光ARM-9200嵌入式開發板程序
總述
u-boot是德國DENX小組的開發用於多種嵌入式CPU的bootloader程序,在LINUX下可以通過CVS來得到當前正在開發的u-boot軟體。當前版本號:u-boot 1.0.2,見include/version.h中的定義。
#cvs –dserver:anonymous@cvs.sourceforge.net:/cvsroot/u-boot login
#cvs –z3 –d server:anonymous@cvs.sourceforge.net:/cvsroot/u-boot checkout –P u-boot
本文講述S3C2410中u-boot的移植程序:S3C2410的硬體組態是:
lCPU:S3C2410
lNOR: 16M,INTEL EP28F128J3A
lSDRAM:64M, MICRON 48LC16M16A2-75 B
lDM9000AVICOM (10/100M) 網路卡
lUSB HOST一個
組態自已的主機板
l閱讀Makefile文件,在Makefile文件中增加兩行:
s3c2410_config: unconfig
@./mkconfig $(@:_config=) arm arm920t s3c2410
其中ARM是CPU的種類, arm920t是ARM CPU對應的程式碼目錄,s3c2410是自已主機板對應的目錄。
l在board目錄中建立s3c2410目錄,複製smdk2410目錄中的內容(cp smdk2410/* s3c2410)。
l在include/configs/目錄下複製smdk2410.h(cp smdk2410.h s3c2410.h)
l修改ARM編譯器的目錄名及前綴
本人ARM編譯器的目錄是在:/opt/host/armv4l/bin/armv4l-unknown-linux-
把CROSS-COMPILE = arm-linux- 改為實際目錄:如
CROSS-COMPILE = /opt/host/armv4l/bin/arm4l-unknown-linux-
l完成之後,可以測試一下你的組態:
#make s3c2410_config
#make
編譯應該在processor.h中出現錯誤
l修改processor.h中:
union debug_insn
{
u32 arm;
u16 thumb;
}
修改成:
union debug_insn
{
u32 arm_mode;
u16 thumb_mode;
}
l編譯成功,編譯好的程序同smdk2410一樣。
l註:如果第一次修改後編譯沒有在processor.h中出現錯誤,而在examples目錄出現錯誤,認真檢查以上修改(修改的內容不正確),並在examples目錄中執行touch指令(不執行touch還會出現錯誤,可能uboot Makefile沒有寫好,沒查原因),再編譯。
產生最基本的u-boot, 沒有功能,只能起動
l修改程序連接位址:
在board/s3c2410中有一個config.mk文件,用於設定程序連接的起始位址,因為會在u-boot中增加功能,所以留下6M的空間,修改33F80000為33A00000。
l為了以後能用uboot的GO指令執行修改過的用loadb或tftp下載的u-boot:在board/s3c2410的memsetup.S中標記符」0:」上加入五句:
lmov r3, pc
lldr r4, =0x3FFF0000
land r3, r3, r4 //以上三句得到實際起動的記憶體位址
laad r0, r0, r3 //用GO指令偵錯uboot時,啟動位址在RAM
ladd r2, r2, r3 //把啟始化記憶體訊息的位址,加上實際起動位址
u0標記符0, 原來存在的標記符)
l用SJF軟體通過jtag口下載編譯的u-boot, 啟動!讀取環境塊時CRC出現錯誤,然後進入SMDK#。
l把MIZI vivi中的PrintHexWord, PrintWord拷過來, 這樣可以在偵錯彙編時可以列印一些訊息,但其中有的PrintHexNibble中有缺陷,ldr r0, [r2, r0] 應改為ldrb r0, [r2, r0],這樣可以在四字元對齊的系統中使用。
INTEL nor flash操作功能
lINTEL 的28F128,在board目錄中找到CMI主機板有此FLASH,把cmi中flash.c拷到s3c2410目錄代換原來的flash.c。
lcmi中的flash.c在寫入時要交換字元,所以移除它的write_short()和wirte_buff()函數,把ep7312主機板目錄中flash.c的wirte_word()和wirite_buff()函數複製過來。把flash.c中的FLASH_BASE0_PRELIM改為CFG_FLASH_BASE。把FLASH_BLOCK_SIZE改為0x20000,(E28F128J3A flash中塊的大小是128K)。
l把s3c2410.h中的flash內容由原來的:
1.#define PHYS_FLASH_10x00000000 /* Flash Bank #1 */
2.#define CFG_FLASH_BASEPHYS_FLASH_1
3.#define CONFIG_AMD_LV4001
4.#if 0
5.#define CONFIG_AMD_LV8001
6.#endif

7.#define CFG_MAX_FLASH_BANKS1/* max number of memory banks */
8.#ifdef CONFIG_AMD_LV800
9.#define PHYS_FLASH_SIZE0x00100000 /* 1MB */
10.#define CFG_MAX_FLASH_SECT(19)/* max number of sectors on one chip */
11.#define CFG_ENV_ADDR(CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
12.#endif
13.#ifdef CONFIG_AMD_LV400
14.#define PHYS_FLASH_SIZE0x00080000 /* 512KB */
15.#define CFG_MAX_FLASH_SECT(11)/* max number of sectors on one chip */
16.#define CFG_ENV_ADDR(CFG_FLASH_BASE + 0x070000)
改為:
1.#define PHYS_FLASH_10x00000000 /* Flash Bank #1 */
2.#define PHYS_FLASH_SIZE0x01000000 /* 16 MB */
3.##define CFG_FLASH_PROTECTION
4.define CFG_FLASH_BASEPHYS_FLASH_1
5.#define CFG_MONITOR_BASE PHYS_FLASH_1
6.#define CFG_MAX_FLASH_BANKS1/* max number of memory banks*/
7.#define CFG_MAX_FLASH_SECT 128/* max number of sectors on one chip*/
8.#define CFG_FLASH_ERASE_TOUT(2*CFG_HZ) /* Timeout for Flash Erase */
9.#define CFG_FLASH_WRITE_TOUT(2*CFG_HZ) /* Timeout for Flash Write */
10.#defineCFG_ENV_IS_IN_FLASH1
11.#define CFG_ENV_ADDR(PHYS_FLASH_1 + 0x60000)
12.#define CFG_ENV_SIZE0x20000/* Total Size of Environment Sector*/
l把cmd_mem.c中的cmd_get_data_size函數的default_size全改為1, 預設以字元顯示,更直觀,並且不會出現位址對齊錯(data abort)。而在do_mem_mw()及mod_mem()中加入:
if(addr2info(addr) != NULL)
{
printf(「can』t wirte or modify in flash! Use cp instead.\n」);
return 0;
}
以使mw和mm指令不能修改flash中的資料,而只開放cp修改flash中的資料。
l改board/s3c2410/flash.c中的flash_erase(),把start = get_timer(0)移到for(), 以去掉flash_erase timeout 錯誤。
設定FLASH和SDRAM時序
根據28F128J3A-150,這是一150ns的flash, 所以把flash時序設為最慢。把s3c2410設成202.8MHZ, 並且工作在異步模式, 修改memsetup.S。

實現網路卡功能
本人的網路卡是DM9000,在uboot中沒有相應的驅動,所以自已寫了一個網路卡驅動。
1.把驅動拷到drivers/dm9000.c
2.在drivers/Makefile中加入dm9000.o
3.在lib_arm/board.c中修改CS8900=>DM9000
4.在include/configs/s3c2410中加入以下幾句
#define CONFIG_DRIVER_DM90001/* we have a CS8900 on-board */
#define DM9000_BASE0x08000000
#define DM9000_BUS161 /* the Linux driver does accesses as shorts */
#define CONFIG_ETHADDR08:00:3e:26:0a:5b
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR192.168.2.120
#define CONFIG_SERVERIP192.168.2.122

實現USB功能
1.在include/configs/s3c2410中的CONFIG_COMMANDS中加入:
lCFG_CMD_USB |\
lCFG_CMD_FAT |\
2.並在文件中加入以下設定:
l#define CONFIG_USB_OHCI
l#define CONFIG_USB_STORAGE
l#define CONFIG_USB_KEYBOARD
l#define CONFIG_DOS_PARTITION
l#defineCFG_DEVICE_DEREGISTER
l#define CONFIG_SUPPORT_VFAT
l#define LITTLEENDIAN
3.這時usb start 和 usb info等功能正常,而其它一些功能不正常。
4.功能fatls 不正常,修改fs/fat/fat.c
l沒有把VFAT的UNICODE字串轉換過來,加入UNICODE字串轉換函數。Uni2ansi(), 增加slot2str()的cp936版, 增加一個toshort()。
l加入#define cp936
l在fat_getenv()中有一個對齊錯誤,修改fat.h使fatbuff字對齊。
l在do_fat_read()中加入兩句,以消除列根目錄錯誤。
l在board/cmd_fat.c中加入兩句,以消除沒有usb storage設備時的錯誤:
if(!dev_desc)
printf(「Not init storage usb device:\n usb start\n usb info\n usb scan\n」);
5.修改fs/fat/fat.c
get_cluster()函數中加入 if(size / FS_BLOCK_SIZE > 0), 以防讀文件時不能成功讀出。
啟始LINUX
現在我們可以啟始LINUX了。
l要啟始bzip2的linux核,把CFG_MALLOC_SIZE改為大於4M
l把編譯好的LINUX記憶體,通過uboot/tools/mkimage轉換成uboot格式
1.mkimage -A arm -O linux -T kernel -C bzip2 -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux1.bz2 c
2.mkimage -A arm -O linux -T kernel -C gzip -a 30000000 -e 30008000 -n 'linux kernel' -d vmlinux.gz b
3.mkimage -A arm -O linux -T ramdisk -C gzip -a 0 -e 0 -n 'init ramdisk' -d ramdisk.image.gz ramdisk
l在include/configs/s3c2410.h中加入:
1.#define CONFIG_BOOTARGS "initrd=0x30800000,0x200000 root=/dev/ram init=/linuxrc console=ttyS0,115200"
2.#define CONFIG_BOOTFILE"vmlinux_for_uboot.gz"
3.#define CONFIG_BOOTCOMMAND"bootm 0x80000 0x1a0000"
0x80000為內核在flash中的位置。
0x1a0000為ramdisk.image.gz在flash中的內容。
4.#defineCFG_LOAD_ADDR0x30800000/* default load address*/
l在lib_arm/armlinux.c的do_bootm_linux中加入:
1.memcpy ((char *)CFG_LOAD_ADDR, (char *)data, len);
2.data = CFG_LOAD_ADDR;
把ramdisk複製到0x30800000位置的RAM中
3.定義以下組態,把訊息傳入LINUX核心的TAG區
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG



常用U-BOOT指令介紹

1.?得到所有指令列表
2.help: help usb, 列出USB功能的使用說明
3.ping:註:只能開發板PING別的機器
4.setenv: 設定互環境變數:
5.setenv serverip 192.168.0.1
6.setenv ipaddr 192.168.0.56
7.setenv bootcmd 『tftp 32000000 vmlinux; kgo 32000000』
8.saveenv: 儲存環境變數
9.在設定好環境變數以後, 儲存變數值
10.tftp: tftp 32000000 vmlinux, 把server(IP=環境變數中設定的serverip)中/tftpdroot/ 下的vmlinux通過TFTP讀入到實體記憶體32000000處。
11.kgo: 起動沒有壓縮的linux內核,kgo 32000000
12.bootm:起動UBOOT TOOLS製作的壓縮LINUX內核, bootm 3200000
13.protect: 對FLASH進行寫保護或取消寫保護, protect on 1:0-3(就是對第一塊FLASH的0-3扇區進行保護),protect off 1:0-3取消寫保護
14.erase: 移除FLASH的扇區, erase 1:0-2(就是對每一塊FLASH的0-2扇區進行移除)
15.cp: 在記憶體中複製內容, cp 32000000 0 40000(把記憶體中0x32000000開始的0x40000字元複製到0x0處)
16.mw: 對RAM中的內容寫操作, mw 32000000 ff 10000(把記憶體0x32000000開始的0x10000字元設為0xFF)
17.md: 修改RAM中的內容, md 32000000(記憶體的起始位址)
18.usb:
lusb start: 起動usb 功能
lusb info: 列出設備
lusb scan: 掃瞄usb storage(u 盤)設備
19.fatls:列出DOS FAT文件系統, 如:fatls usb 0列出第一塊USB碟中的文件
20.fatload: 讀入FAT中的一個文件,如:fatload usb 0:0 32000000 aa.txt
21.把USB中的aa.txt 讀到實體記憶體0x32000000處!
22.flinfo: 列出flash的訊息
23.loadb: 準備用KERMIT傳輸協定接收來自kermit或超級終端傳送的文件。
24.nfs: nfs 32000000 192.168.0.2:aa.txt , 把192.168.0.2(LINUX 的NFS文件系統)中的NFS文件系統中的aa.txt 讀入記憶體0x32000000處。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 08:13 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2022, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1