久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

uboot移植初步成功啦

作者:佚名   來源:本站原創   點擊數:  更新時間:2010年12月27日   【字體:

 哈哈,真高興啊,就在晚飯前,終于在SDRAM中調試uboot1.4取得初步成功,晚飯后,就在寫前,把uboot燒寫到flash中,重啟后,在超級終端中看到了正常顯示,只是蜂鳴器一直想,哈哈,移植算是初步成功了,興奮啊~~~ 明天再弄弄就可取得完勝了吧

 現在回過頭來看uboot移植才發現,移植是這么滴簡單,HOHO~~`

 先說說移植吧,代碼上的移植:只是基于代碼的改動,而不包括知道代碼改動的背后~~

 移植的uboot版本為1.4版,用的編譯工具鏈為arm-elf-。不能用arm-linux編譯,原因是用的c庫不同。簡單的說就是arm-linux是為有MMU硬件單元的處理器配置的,如ARM9器件,而arm-elf-則是用于無MMU的cpu的,如ARM7。(也試了一下,用arm-linux-編譯得到的uboot.bin加載到SDRAM中運行后無顯示)。arm-elf-gcc版本為2.93版本的(有點低,還需要修改cpu\s3c44b0\config.mk,后面提到)。在uboot1.4版本中符合s3c44b0內核的板子為dave\B2板,移植就是基于該板子的,當然實際板子有很多硬件情況與它不同,需要修改。

 現在就分別講講所要修改的文件和具體修改吧:"uboot\"表示uboot的根目錄

 uboot\Makefile:在uboot中,默認的編譯器為arm-linux-,所以首先要修改的就是把編譯器改為arm-elf-:

     ifeq ($(ARCH),arm)    CROSS_COMPILE = arm-linux-    endif

 只需要把arm-linux-改為arm-elf-就行

 同時,要增加自己的板子在Makefile中的配置:

    B2_config : unconfig
         @./mkconfig $(@:_config=) arm s3c44b0 B2 dave

 該句增加了B2板子在Makefile中的配置,其中向編譯器傳遞了四個參數:cpu體系 cpu類型 板子 公司

 可仿造該板子增加自己板子的設置,其中板子和公司可自取,為了文件,都取為44b0,增加配置如下:

    44b0_config:unconfig

        @./mkconfig $(@:_config=) arm s3c44b0 44b0 44b0

 uboot\board:該文件夾放置了所有uboot支持的板子。故要在此文件夾中增加自己的板子。移植嘛,就是在原有的基礎上修改成符合自己的就行了。于是可以把dave\復制成44b0\放在該文件夾下。同時,把44b0\所有插著B2標志的文件夾或文件都復制成44b0(這里我們就不刪除dave\B2吧)。然后我們修改操作就是針對44b0的,那才是我們需要的。

    uboot\board\44b0\44b0\44b0.c:該文件就兩個函數:board_init(),dram_init()。其中dram_init()無需修改,不過卻給了我們個信號:關于SDRAM的映射起始地址和SDRAM的大小。而board_init()似乎也是不需要怎么改的。主要是配置一下IO。口但B2板子沒有初始化Port c。因為我的板子上有三個LED在Port c,所以還是初始化一下吧。也許后面要用到的話還得到這里來改

 uboot\include\configs\:我們的配置文件也還是要借用B2的,(哎,誰叫咱是兄弟呢)和前面一樣,把所有標著B2的文件夾和文件都復制成44b0(不要刪除了B2)。現在就修改一下44b0.h吧

    uboot\include\configs\44b0.h:這個文件就是配置板子的各個參數。配置項還是比較多的,主要是根據板子的實際硬件情況來修改相應的數值或定義。主要修改的如下:

        #define CONFIG_B2-------->#define CONFIG_44b0

        #define CONFIG_S3C44B0_CLOCK_SPEED 75

            定義板子的系統時鐘,我的板子配置成40M比較麻煩,后見分曉~~~

        #undef CONFIG_USE_IRQ

            不定義USE_IRQ堆棧。如果要在SDRAM中用到IRQ堆棧的話,這里就應該定義了

        #define CONFIG_BOOTDELAY 5------>#define CONFIG_BOOTDELAY 6

            定義UBOOT引導系統的選擇延時:如果定義自動加載系統的話,超過了這個定義            的計數之后,UBOOT將自己加載系統。我把計數數改為6了,在SDRAM中調試的時候,看著顯示的倒計時數為5開始時,就知道移植成功了

        #define CFG_MEMTEST_START 0x0C400000 /* memtest works on */
        #define CFG_MEMTEST_END  0x0C800000 /* 4 ... 8 MB in DRAM */

            這個都是根據B2板子來設定的,而我的板子則不是它們,而是下面的:

        #define CFG_MEMTEST_START 0x0C040000 起始值還是應該計算計算滴
        #define CFG_MEMTEST_END  0x0C100000 /這個最大什為TEXT_BASE

        #define CFG_LOAD_ADDR  0x0c700000 /* default load address */

            默認的加載系統的地址,還是改了吧,這個地址太大了,不合適啊,

        #define CFG_LOAD_ADDR  0x0c008000

        #define PHYS_SDRAM_1  0xc0000000 /* SDRAM Bank #1 */
        #define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */

        #define PHYS_FLASH_1  0x00000000 /* Flash Bank #1 */
        #define PHYS_FLASH_SIZE  0x00400000 /* 4 MB */

            關于SDRAM和flash的起始地址和大小的宏定義。當然,也是不符合實際情況的

        #define PHYS_SDRAM_1      0x0c000000   映射起始地址 0x0c000000
        #define PHYS_SDRAM_1_SIZE   0x00800000   大小:8M

        #define PHYS_FLASH_1  0x00000000        映射起始地址  0x00000000
        #define PHYS_FLASH_SIZE  0x00200000       大小:2M

        #define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */

            flash最大可選sectors 也是要改的

        #define CFG_MAX_FLASH_SECT 32

        還有就是這個B2板子沒有網卡,還應該加一個網卡的配置:

        #define CONFIG_DRIVER_TRL8019

        #define RTL8019_BASE    0x08000000

        當然,還有很多其他的配置。目前為止還不知道哪些是需要的,哪些是不需要的,哪些是要        改的,哪些是不要改的,都還要在應用中才能發現哦

uboot\cpu\s3c44b0\lowlevel_init.S:關于s3c44b0存儲器的配置。主要參考s3c44b0手冊和SDRAM和FLASH手冊,具體的已在前面的日志中說明了,在此不再羅嗦。

uboot\cpu\s3c44b0\serial.c:關于串口的——這個很重要哦,設置不好的話就看不到顯示了。主要是關于串口初始化的,serial_init()調用serial_setbrg()來設置相關寄存器。這里要修改的就是依據相應的串口波特率來設置divisor。這里就能看到CONFIG_S3C44B0_CLOCK_SPEED的身影了。如果在44b0.h文件里沒有定義這個宏或是這個宏的值定義不是75或66的話,那在編譯的時候就會報錯:#error CONFIG_S3C44B0_CLOCK_SPEED undefined。

uboot\cpu\s3c44b0\start.S:終于要說到這個文件了。其實當初覺的神秘,現在看來真是有點太把它當回事了。細看一下,和一個普通的startup.S沒多大區別。主要難點還是幾段代碼和原理吧。關于start.S參考前面寫的日志吧。這里主要講修改的話就太簡單了。要修改的寄存器初始化參數就是LOCKTIME和PLLCON。設為符合板子的值就可以了,LOCKTIME=2000,PLLCON=0x48032,設置主頻Mclk=40Mhz就行了

    這里是程序代碼的修改。還有一個就是前面提到的在編譯的時候碰到的問題:由于arm-elf-gcc版本太低了,導致在引用編譯符號的時候參數錯誤:uboot\cpu\s3c44b0\config.mk中有如下行:

    PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

提示也錯的參數為:abi=apcs;只要做如下改動即可消除編譯器的不適:

    PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))

至此,關于uboot1.4移植所要做的修改就完了。但問題還遠遠沒有完吧:uboot應該放在哪個目錄?make的時候經常碰到莫名的問題~~

    還是那句話,路漫漫其修遠~~~~

    明天好好完善一下吧,至少把那個煩人的蜂鳴給關了

關閉窗口

相關文章

主站蜘蛛池模板: 成人在线免费网站 | 精品日韩在线 | 99精品视频一区二区三区 | 日韩在线播放视频 | 成人h免费观看视频 | aaaaaaa片毛片免费观看 | 日韩欧美精品在线 | 色一阁 | 国产精品国产三级国产a | 国产伦精品一区二区三区高清 | 中文字幕亚洲一区二区va在线 | 久久9视频 | 在线观看av中文字幕 | 成人一区二区视频 | 欧美三级视频在线观看 | 国产精品99久 | 狠狠干天天干 | 精品国产乱码久久久久久闺蜜 | 亚洲精品99999 | 成人影院一区二区三区 | 国产精品久久片 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 免费成人在线网站 | av不卡一区| 亚洲成人久久久 | 黄色在线免费观看 | 蜜桃毛片 | 精品国产免费一区二区三区五区 | 男女污污网站 | 精品日本中文字幕 | 成人h电影在线观看 | 国产精品美女久久久久久不卡 | 91精品国产综合久久久久久丝袜 | 狠狠爱综合网 | 国产精品免费一区二区三区 | 午夜成人在线视频 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 香蕉大人久久国产成人av | 欧美日韩亚洲三区 | 毛片免费观看 | 欧美在线观看黄色 |