新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > U-BOOT移植心得

        U-BOOT移植心得

        作者: 時間:2012-08-04 來源:網絡 收藏


        //===================================================================
        天嵌與自己的差別分析和領悟
        先列出天嵌公司里研發人員寫的 和 我們自己(小)的最大不同:
        對比了一下,發現最大的不同在于common/main.c文件中,即在兩階段基本一樣
        不同點:(行數按天嵌版本的)
        abortboot()函數(在main_loop()中被調用)
        Ln239: printf ( “ Press Space key to Download Mode ! ” ) ;
        Ln303 :在檢測是否 a key press 時,加入了顯示LOGO程序:embedsky_tq_logo();
        main_loop()函數
        Ln 381: LCD初始化程序
        Ln481 :分支選擇 下載 OR 加載模式:if ( BootFrmNORFLASH() )
        run_command (“menu”,0 );
        else
        {
        Printf (“ Booting Linux n ”);
        run_command (“boot_zImage”,0 );
        }
        解析一下:
        前面幾點都是關于LCD和LOGO顯示的不多說(因為自己移植是沒弄到LCD的移植)
        說一下main_loop()函數中Ln481 :分支選擇 下載 OR 加載模式
        首先,run_command 這個是執行命令函數,一看名字就知道,也是在/common/main.c中定義的
        說說最重要的“menu”和“boot_zImage”吧
        1 If從NORFLASH進行啟動,則為下載模式,則執行menu()這個函數,在/common/cmd_menu.c中定義
        打開cmd_menu.c文件會發現,里面都是一些串口選項列表,我們打開2440電源發現的下載列表都是從 main_menu_usage()函數中打印出來的,而選擇的項又通過menu_shell()通過控制臺執行各種我們的選項,每個選項的如何執行過程都列得很清楚,感覺就像跑裸機時,自己按照fzb的串口控制臺弄出來一樣

        2 Else 從NANDFLASH進行啟動, 則為加載模式,進行LINUX系統的配置和啟動。
        在lib_arm /boot_zImage.c 文件:里的boot_zImage( )函數
        函數執行的內容大概如下:
        1、 copy kernel image
        2、setup linux parameters
        3、get machine type
        4、GO -> call-linux

        對比后的一些感悟:
        雖說自己也跟著移植過,也能建立自己的板級支持包,能實現基本的串口控制臺,NAND OR NOR FLASH,DM9000網絡,JFFS2文件系統等基本功能,但比起天嵌這個,能下載 和 加載模式,還是有很多不足
        所以說,自己移植只是感覺其中的方法,領悟之后還是在天嵌的基礎上再加進一步移植吧,感覺沒必要從頭到尾都自己搞一遍,方法懂了,框架熟悉了就好


        //===================================================================
        移植過程的一個簡單舉例:
        因為移植很多都是基于smdk2410來改的,首先要對2410和2440的區別有一定了解,再者就是自己在裸機上是編寫過改外設的驅動的,這樣移植起來就比較舒服,不會說什么都跟著做,感覺很虛,學不到東西。
        就舉讓支持NANDFLASH的讀寫
        1 先是在總的宏定義頭文件中加上你外設所需的宏定義
        總的宏定義路徑為 /include /configs / XX.h/ (最后這個.h文件一般是以板的名稱命名)
        添加宏定義,如:#define CONFIG_NAND_BASE 0
        。。。 等等
        那怎么知道添加什么宏定義呢?一般來說看對外設初始化函數,和U-BOOT二階段啟動函數要用到哪些就定義哪些。。。
        2 改相應的初始化函數:如board_nand_init函數和s3c2440_hwcontrol函數
        因為U-BOOT里初始化函數基本基于2410的,而2440的NAND配置參數和它不同,需要改部分地方
        3 添加初始化函數到第二階段board_init_r處,一般來說基本外設都已添加了,看你是否定義宏來讓其編譯這函數

        移植一些規律總結:
        其實多移植幾次就會發現,UBOOT的移植修改還是遵循著一定的規律。即是先在配置頭文件中打開相關宏定義支持,在到板級初始化(一般是第二階段初始化過程)代碼中添加需要支持功能的初始化函數。
        如果初始化函數對應的板版本不兼容或不存在,就要自己編寫了。

        //===================================================================
        最后,說說U-BOOT的編譯吧
        說到編譯,建議去看《從庖丁解牛說uboot如何編譯》,說得很好。
        而說到編譯的執行過程,建議看看
        http://hi.baidu.com/serial_story/blog/item/871fc30311670783d53f7c74.html
        《詳細分析make uboot 最后的編譯鏈接的具體執行過程》

        最后談談編譯不通過的問題,如果是內部自己程序出錯,可以通過提示信息查出
        如果是出現ERROR一百多個,或者什么arm-linux-ld的問題,那應該是編譯器版本不兼容問題,建議換換新的版本或更舊的版本再試試。


        好,到這里算是可以繼續下一步系統的移植和驅動的編寫了,而最近503的肥仔說想了個有關投影儀與攝像頭的項目想做,剛好我對圖像處理這方面比較感興趣,而且覺得他創意很好
        可能去做了哦,GO
        頭很暈,歇幾天啦~~

        上一頁 1 2 下一頁

        關鍵詞: U-BOOT 移植 啟動過程

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 曲阳县| 绩溪县| 南康市| 确山县| 沂源县| 彩票| 大化| 砀山县| 望谟县| 汾阳市| 吴川市| 通江县| 灵武市| 泾源县| 安塞县| 墨竹工卡县| 西峡县| 恩施市| 龙海市| 喀喇沁旗| 合山市| 永春县| 五台县| 岗巴县| 衡山县| 吴桥县| 武鸣县| 许昌县| 石河子市| 福安市| 巴青县| 牡丹江市| 留坝县| 黄浦区| 开封市| 鲁甸县| 彩票| 辽源市| 九台市| 青州市| 田阳县|