一、移植環(huán)境
主 機:VMWare--Fedora 9
開發(fā)板:Mini2440--64MB Nand,Kernel:2.6.30.4
編譯器:arm-linux-gcc-4.3.2.tgz
u-boot:u-boot-2009.08.tar.bz2
二、移植步驟
在這一篇中,我們首先讓開發(fā)板對CS8900或者DM9000X網(wǎng)卡的支持,然后再分析實現(xiàn)u-boot怎樣來引導Linux內(nèi)核啟動。因為測試u-boot引導內(nèi)核我們要用到網(wǎng)絡(luò)下載功能。
7)u-boot對CS8900或者DM9000X網(wǎng)卡的支持。
u-boot-2009.08版本已經(jīng)對CS8900和DM9000X網(wǎng)卡有比較完善的代碼支持(代碼在drivers/net/目錄下),而且在S3C24XX系列中默認對CS8900網(wǎng)卡進行配置使用。只是在個別地方要根據(jù)開發(fā)板的具體網(wǎng)卡片選進行設(shè)置,就可以對S3C24XX系列中CS8900網(wǎng)卡的支持使用。代碼如下:
現(xiàn)在修改對我們開發(fā)板上DM9000X網(wǎng)卡的支持。
首先,我們看看drivers/net/目錄下有關(guān)DM9000的代碼,發(fā)現(xiàn)dm9000x.h中對CONFIG_DRIVER_DM9000宏的依賴,dm9000x.c中對CONFIG_DM9000_BASE宏、DM9000_IO宏、DM9000_DATA等宏的依賴,所以我們修改代碼如下:
#gedit include/configs/my2440.h |
/* * Hardware drivers */ 屏蔽掉u-boot默認對CS8900網(wǎng)卡的支持
//添加u-boot對DM9000X網(wǎng)卡的支持 #define CONFIG_DRIVER_DM9000 1 //#define CONFIG_DM9000_USE_16BIT 1 注意:
//給u-boot加上ping命令,用來測試網(wǎng)絡(luò)通不通 #define CONFIG_CMD_PING
//恢復被注釋掉的網(wǎng)卡MAC地址和修改你合適的開發(fā)板IP地址 #define CONFIG_ETHADDR 08:00:3e:26:0a:5b //開發(fā)板MAC地址 #define CONFIG_SERVERIP 192.168.1.103 //Linux主機IP地址 |
添加板載DM9000網(wǎng)卡初始化代碼,如下:
#gedit board/samsung/my2440/my2440.c |
#include
#ifdef CONFIG_DRIVER_DM9000 |
修改MD9000網(wǎng)卡驅(qū)動代碼,如下:
#gedit drivers/net/dm9000x.c |
#if 0 //屏蔽掉dm9000_init函數(shù)中的這一部分,不然使用網(wǎng)卡的時候會報“could not establish link”的錯誤 |
然后重新編譯u-boot,下載到Nand中從Nand啟動,查看啟動信息和環(huán)境變量并使用ping命令測試網(wǎng)卡,操作如下:
可以看到,啟動信息里面顯示了Net:dm9000,printenv查看的環(huán)境變量也和include/configs/my2440.h中設(shè)置的一致。但是現(xiàn)在有個問題就是ping不能通過。
經(jīng)過一段時間在網(wǎng)上搜索,原來有很多人都碰到了這種情況。出現(xiàn)問題的地方可能是DM9000網(wǎng)卡驅(qū)動中關(guān)閉網(wǎng)卡的地方,如是就試著修改代碼如下:
結(jié)果,只是第一次ping不通,以后都是可以ping通的(據(jù)網(wǎng)友們說這是正常的),如下圖:
好了,現(xiàn)在只剩下一個問題了,就是使用tftp進行下載。關(guān)于tftp服務(wù)器在Linux中的安裝和配置,這里我就不講了,在網(wǎng)上搜一下很多的。然而,在tftp下載時又遇到了問題,總是出現(xiàn)傳送不完整又重新傳送的現(xiàn)象,不斷的循環(huán),如下圖:
困惑好久的tftp問題現(xiàn)在終于搞定啦,心情真是爽啊!!首先分析上面圖中的現(xiàn)象,在下載過程中斷斷續(xù)續(xù)就說明是可以下載的,只是由于某種原因使網(wǎng)絡(luò)出現(xiàn)超時從而重新下載,那我想出現(xiàn)這種情況的可能性有兩種:1、u-boot中對網(wǎng)絡(luò)的延時設(shè)置;2、就是我的物理網(wǎng)絡(luò)結(jié)構(gòu)。首先針對第一種,我修改了net/net.c中對網(wǎng)絡(luò)延時的設(shè)置,結(jié)果還是不行。接著就試試第二種情況,因為之前我的網(wǎng)絡(luò)是通過路由器來管理的,主機和開發(fā)板也是通過路由器來連接的,所以現(xiàn)在我就改用一條交叉網(wǎng)線直接把主機和開發(fā)板連接起來,一試,果然可以啦,哈哈哈哈....。至此,網(wǎng)絡(luò)部分的移植總算完成了。
8)實現(xiàn)u-boot引導Linux內(nèi)核啟動。
在前面幾節(jié)中,我們講了u-boot對Nor Flash和Nand Flash的啟動支持,那現(xiàn)在我們就再來探討一下u-boot怎樣來引導Linux內(nèi)核的啟動。
①、機器碼的確定
通常,在u-boot和kernel中都會有一個機器碼(即:MACH_TYPE),只有這兩個機器碼一致時才能引導內(nèi)核,否則就會出現(xiàn)如下mach的錯誤信息:
首先,確定u-boot中的MACH_TYPE。在u-boot的include/asm-arm/mach-types.h文件中針對不同的CPU定義了非常多的MACH_TYPE,可以找到下面這個定義:
②、準備能被u-boot直接引導的內(nèi)核uImage
通常,kernel的啟動需要u-boot提供一些參數(shù)信息,比如ramdisk在RAM中的地址。經(jīng)過編譯后的u-boot在根目錄下的tools目錄中,會有個叫做mkimage的工具,他可以給zImage添加一個header,也就是說使得通常我們編譯的內(nèi)核zImage添加一個數(shù)據(jù)頭信息部分,我們把添加頭后的image通常叫uImage,uImage是可以被u-boot直接引導的內(nèi)核鏡像。
mkimage工具的使用介紹如下:
使用: 中括號括起來的是可選的 mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image 選項: |
先將u-boot下的tools中的mkimage復制到主機的/usr/local/bin目錄下,這樣就可以在主機的任何目錄下使用該工具了。現(xiàn)在我們進入kernel生成目錄(一般是arch/arm/boot目錄),然后執(zhí)行如下命令,就會在該目錄下生成一個uImage.img的鏡像文件,把他復制到tftp目錄下,這就是我們所說的uImage。
mkimage -n 'linux-2.6.30.4' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage uImage.img |
③、Nand Flash的分區(qū)。我們查看內(nèi)核在arch/arm/plat-s3c24xx/common-smdk.c中的分區(qū)情況如下:
起始地址 結(jié)束地址 uboot : 0x00000000 0x00030000 |
④、設(shè)置修改u-boot的啟動參數(shù),在u-boot命令行下輸入:
//設(shè)置啟動參數(shù),意思是將nand中0x50000-0x00200000(和kernel分區(qū)一致)的內(nèi)容讀到內(nèi)存0x31000000中,然后用bootm命令來執(zhí)行 set bootcmd 'nand read 0x31000000 0x50000 0x00200000;bootm 0x31000000' saveenv //保存設(shè)置 |
⑤、把uImage.img用tftp下載到內(nèi)存中,然后再固化到Nand Flash中,操作和執(zhí)行圖如下:
tftp 0x30000000 uImage.img //將uImage.img下載到內(nèi)存0x30000000處 |
最后,我們重新啟動開發(fā)板,可以看到,內(nèi)核被u-boot成功引導起來了,如圖:
#define MACH_TYPE_SMDK2440 1008 //針對2440的MACH_TYPE碼的值定義為1008 |
那么我們就修改u-boot的MACH_TYPE代碼引用部分,確定u-boot的MACH_TYPE。如下:
#gedit board/samsung/my2440/my2440.c //修改board_init函數(shù) |
/* arch number of SMDK2410-Board */ |
其次,確定kernel中的MACH_TYPE。在kernel的arch/arm/tools/mach-types文件中也針對不同的CPU定義了非常多的MACH_TYPE,也可以找到下面這個定義:
smdk2440 MACH_SMDK2440 SMDK2440 1008 |
那么我們就修改kernel的MACH_TYPE代碼引用部分,確定kernel的MACH_TYPE。如下:
#gedit arch/arm/mach-s3c2440/mach-smdk2440.c //修改文件最后面 |
//MACHINE_START(S3C2440, 'SMDK2440') |
#gedit arch/arm/kernel/head.S //在ENTRY(stext)下添加如下代碼(紅色部分) |
ENTRY(stext) mov r0, #0 ....... |
分別重新編譯u-boot和kernel。u-boot下載后,記得要saveenv;kernel用tftp下載到內(nèi)存后使用go命令來測試引導內(nèi)核,結(jié)果可以引導了,如下:
#gedit drivers/net/dm9000x.c //屏蔽掉dm9000_halt函數(shù)中的內(nèi)容 |
/* |
#gedit include/configs/my2440.h |
/* |
上一篇:uboot在s3c2440上的移植(1)
下一篇:uboot在s3c2440上的移植(6)
推薦閱讀最新更新時間:2025-03-25 22:37





設(shè)計資源 培訓 開發(fā)板 精華推薦
- 迅為imx6ull開發(fā)板使用c語言調(diào)用shell命令控制led燈
- 迅為IMX8MM開發(fā)板Android編譯環(huán)境搭建
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的使用
- 迅為ITOP4412開發(fā)板Qt界面添加圖片
- 迅為IMX6開發(fā)板OTA遠程升級-SWUpdata概述和使用
- 迅為IMX6ULL開發(fā)板NFS服務(wù)器的搭建
- 迅為IMX6開發(fā)板Buildroot文件系統(tǒng)4G撥號上網(wǎng)工具測試
- 實驗分享丨迅為IMX6ULL開發(fā)板點亮第一個led燈
- 迅為-IMX6Q開發(fā)板Buildroot文件系統(tǒng)nfs測試
- LT3091HR 低噪聲 4 象限電源的典型應(yīng)用
- L7808A 高輸入電壓電路的典型應(yīng)用(配置 2)
- AM2G-1218SH30Z 18V 2瓦直流/直流轉(zhuǎn)換器的典型應(yīng)用
- DK-DEV-5CGTD9NES,客戶和內(nèi)部用戶用于實現(xiàn)基于 Cyclone V FPGA 的系統(tǒng)的入門板
- #第五屆立創(chuàng)電子設(shè)計大賽#電參數(shù)智能監(jiān)測
- LX1686 直接驅(qū)動 CCFL 逆變器設(shè)計參考
- 用于線路瞬態(tài)響應(yīng)的 LR8 高輸入電壓線性穩(wěn)壓器的典型應(yīng)用
- LT1934EDCB-1 3.3V 降壓轉(zhuǎn)換器的典型應(yīng)用電路
- AM1G-1205SH30Z 5V 1W DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- SIP79L05AC 三端小電流負電壓穩(wěn)壓器典型應(yīng)用
- 慶科信息發(fā)布云智能鎖系統(tǒng)解決方案,5年內(nèi)實現(xiàn)1億門鎖上云
- 未來物聯(lián)網(wǎng)在醫(yī)療保健的發(fā)展
- RFID技術(shù)與醫(yī)療行業(yè)未來發(fā)展的五大方向
- 國科大將建西安學院
- 與中科院合作進軍高科技 恒大計劃未來十年投資1000億
- 我國智能巡檢機器人發(fā)展現(xiàn)狀及主要企業(yè)
- 高云半導體出貨量呈火箭式上升
- 騰訊從百度挖的AI Lab負責人張潼離職,要去阿里?
- 云跡科技獲全球領(lǐng)先的OTA平臺攜程戰(zhàn)略投資 加速酒店智能化布局
- 逆勢增長業(yè)績翻番 2018年圖靈機器人大事記