uboot中IDE移植
1.配置
首先要支持IDE需要在CONFIG_COMMANDS中添加CFG_CMD_IDE命令,然后要添加IDE的相關配置信息。不看代碼就不知道需要哪些信息,可以先編譯一下試試,如果出錯就會提示哪些宏沒有定義,直接定義就行了,而且在u-boot的README文件中沒有相關信息,這一點也感覺有點兒不解,為什么沒有IDE的相關配置說明?
我是搜索/include/configs文件夾中的配置文件,支持IDE的配置文件有幾個,但多是PPC的,ARM的只有shannon.h而且CPU用的是sa1100,其它ARM的開發板好像都不支持IDE,或者說沒有把u-boot的IDE移植過去。又看了幾個支持IDE的配置文件,大概需要以下幾個配置:
#define CFG_ATA_BASE_ADDR 0x04000000 /* Offset for data I/O */??
#define CFG_ATA_IDE0_OFFSET 0x0000
#define CFG_ATA_REG_OFFSET 0 /* Offset for alternate registers */??
#define CFG_ATA_DATA_OFFSET 0 /* Offset for normal register accesses */???
#define CFG_ATA_ALT_OFFSET 0
#define CFG_IDE_MAXBUS 1 /* max. 1 IDE bus */??
#define CFG_IDE_MAXDEVICE 1 /* max. 1 drive per IDE bus */
配置完了,一編譯又出現新的錯誤,說有些函數沒有定義,如inb, outb, inw, outw, insw, outsw等,查看了一下cmd_ide.c文件,發現里面相關的配置信息里有一個關于IO操作的配置,不同的板子引用了不同的IO操作的頭文件,這些頭文件都在/include/asm-xxx目錄里,當然s3c44b0的就應該在/include/asm-arm里。打開io.h,發現里面已經有這幾個函數的宏定義了,但被一個宏__io給控制著,可能這個宏沒有定義,也不知道這個宏應該在哪兒定義,看形狀像是編譯器的一個選項,但又沒地兒去查,于是就在下面重新定義了那些IO的操作宏
2006-09-1??
今天開始調試,都是超時,沒有反應,后來看IDE的寄存器地址發現板上的地址線居然連得都是亂的,導致硬盤的寄存器地址在配置時很麻煩,就在ata.h中重新定義了宏。
感覺地址應該沒問題,但編譯后仍然無法識別硬盤,考慮到是不是數據線寬度不同,于時就查看low_level_init.s,發現nGCS2是16位,應該沒有問題;又想到是不是時序有問題,就改了nGCS2 的配置,把所有的時間參數都調到最大,然后判斷WAIT,結果不超時了,但是仍然不能識別設備。由于還沒弄清楚WAIT有多大影響,試試不就行了,于是去掉了WAIT判斷,結果可以識別設備,但識別為Removable Harddisk,提示信息如下:
Device 0: Model: Firm: 02 0 Ser#:
Type: Removable Hard Disk
Capacity: 101791.1 MB = 99.4 GB (208468288 x 512)??
而我的硬盤是80G的,那么這些數據應該讀得不正確!
2006-9-1??
查了一下信號,又發現DMACK-應該是從主機向設備方向的信號,原來在IO初始化程序中DMACK-被初始化為輸入,而輸入可能導致設備處信號為低電平,而該信號又剛好是低電平有效,有可能導致數據的讀寫被忽略!后將PG3配置為輸出,高電平。???
結果讀出來的是不一樣了,但也不對啊容量還是不對,提示信息???
OK
Device 0: Model: Firm: 082 Ser#:
Type: Removable Hard Disk
Capacity: 101791.1 MB = 99.4 GB (208468288 x 512)
ide_read dev 0 start 0, blocks 1 buffer at C6CF8C0
Powersaving FF
這是第一次,以后的就成了??
OK
Device 0: Model: Firm: 082 Ser#:
Type: Removable Hard Disk
Capacity: 101791.1 MB = 99.4 GB (208468288 x 512)
ide_read dev 0 start 0, blocks 1 buffer at C6CF8C0
Powersaving FF??
Firm成了082
總結
以上是生活随笔為你收集整理的uboot中IDE移植的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UBOOT添加命令的执行流程
- 下一篇: U-BOOT介绍以及disk模块源码分析