linux2.6.22.6移植並添加DM9000支持

今天參照<天嵌科技出品-Linux移植文檔 >和韋東山的<嵌入式linux應用開發完全手冊>一書成功移植成了linux2.6.22.6並添加了DM9000的支持(其實linux在我板子上早就跑起來了,可那時用的內核不是我配置的,是用的別人配置好的,我直接編譯下載就運行 了,今天自己親自上陣,呵呵...)。天嵌文檔下載地址http://bbs.embedsky.net/viewthread.php?tid=630&extra=page%3D1

移植過程網上多的是,天嵌的文檔介紹的也很棒,我就不再寫了。下面主要記錄我在移植linux和DM9000過程中遇到的問題及解決方法。

1、在移植linux時遇到了如下問題:

Starting kernel ...                                                                                                        
                                                                                                                           
Uncompressing Linux.........................................................................................................
                                                                                                                           
Error: unrecognized/unsupported machine ID (r1 = 0x0000030e).                                                              
                                                                                                                           
Available machine support:                                                                                                 
                                                                                                                           
ID (hex)        NAME                                                                                                       
000000c1        SMDK2410                                                                                                   
00000454        QT2410                                                                                                     
000003fe        SMDK2413                                                                                                   
000003f1        SMDK2412                                                                                                   
00000377        S3C2413                                                                                                    
00000474        VSTMS                                                                                                      
0000016a        SMDK2440                                                                                                   
0000043c        SMDK2443                                                                                                   
                                                                                                                           
Please check your kernel config and/or bootloader.  

 

解決:這是machine ID設置與uboot傳來的ID不匹配造成的,可以通過 修改match_types中相應的宏定義來解決此問題。

           machine ID位置:

                                          linux:arch/arm/tools/match_types中

                                           uboot:include/asm-arm/match_types中

   至於需要更那一行的ID,可查看 “arch/arm/mach-s3c2440/mach-smdk2440.c ” 文 件,在函數MACHINE_START(S3C2440, "YC2440")這行中的 S3C2440,這個就是關鍵字了,S3C2440是當你的內核啓動時選用的ID。

 

2、移植DM9000遇到的問題1(我已參照相關資料介紹添加了DM9000的驅動):

     前期移植是參照<嵌入式linux應用開發完全手冊>441頁來改的,

 

錯誤1:

     編譯內核,下載內核啓動後出現“IP-Config: Device `eth0' not found.”信息。

 

     分析與解決:此錯誤說明dm9000未工作。可我確認已經添加驅動了呀,在這暈了半天,後來查資料得知可能是DM9000基地址設置有問題,原來我在移植時書上介紹的說是片選CS4的基地址就是DM9000的基地址。經查資料我的陽初2440開發板DM9000基地址爲0x19000300與CS4基地址0x20000000不同哦.問題根源找到了,修改結構體s3c_dm9k_resource中的DM9000的基址址即可....    這個結構體可能在arch/arm/plat-s3c24xx/common-smdk.c中(我的是這個位置,可用grep命令進行搜索)。

 

錯誤2:


       上面問題解決後又出現了“NETDEV WATCHDOG: eth0: transmit timed out”錯誤(網卡已工作了),

       分析與解決:剛開始懷疑是NETDEV WATCHDOG的問題,於是把它關了,關後網卡就不工作了,更慘.....

於是就上網查找書查也沒解決,後來想到我以前用別人配置的內核能運行 成功的,於是就拿來參照着看,原來是中斷號設置有誤,暈呀...

把中斷改成IRQ_EINT9,OK啦哈!  通過 nfs掛我製作好的根文件系統 ,成功啦,好高興,畢竟這次是我自己配置的哦。

 

下面是以上兩個問題修改的數據結構s3c_dm9k_resource:

/* DM9000 */
static struct resource s3c_dm9k_resource[] = {
    [0] = {
        .start = S3C2410_CS4,       /* ADDR2=0,發送地址時使用這個地址 */
        .end   = S3C2410_CS4 + 3,
        .flags = IORESOURCE_MEM,
    },
    [1] = {
        .start = S3C2410_CS4 + 4,   /* ADDR2=1,傳輸數據時使用這個地址 */
        .end   = S3C2410_CS4 + 4 + 3,
        .flags = IORESOURCE_MEM,
    },
    [2] = {
        .start = IRQ_EINT9,         /* 中斷號 */
        .end   = IRQ_EINT9,
        .flags = IORESOURCE_IRQ,
    }

};

我已把S3C2410_CS4改爲0x19000300了。

 

附加:

S3C2410_CS4在內核中的位置可通過 grep命令來查找.

方法:在終端通過cd命令進到內核目錄,然後執行如下命令即可找到包含該字樣的所有文件。

$grep  "S3C2410_CS4" * -R   //*表示查找當前目錄下的所有文件、目錄,-R表示遞歸查找子目錄。


別笑哦,我今天才學會用這個命令查找 ,用着特爽...

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章