




已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
u-boot修改移植開發(fā)知識梳理 /* u-boot裁剪* */board->只留與扳機相關(guān)的文件夾cpu ->只留與扳機相關(guān)的文件夾include->與架構(gòu)無關(guān)的目錄刪除include/configs ->只留架構(gòu)相關(guān)的一個文件include/asm->刪除與架構(gòu)無關(guān)的目錄./->主目錄lib開頭與架構(gòu)無關(guān)的目錄刪除,注意報libfdt留下/* makefile 關(guān)鍵說明* */make ming2440_config流程:make mini2440_config-> mini2440_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t mini2440 risecomm s3c24x0-> mkconfigmini2440_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t mini2440 risecomm s3c24x0/ $(A:patternA=patternB)。意思就是將 A中 patternA格式的字符用patternB來代替?;貧w$(:_config),/ 代表輸入的參數(shù),即:mini2440_config,patternA是_config,patternB是空的。說白了就是將mini2440_config的_config去掉。$(MKCONFIG) $(:_config=) arm arm920t mini2440 tekkamanninja s3c24x0 / 查找MKCONFIG,MKCONFIG就是uboot目錄下的那個mkconfig這個文件,這條語句就是:運行mkconfig文件,并傳遞 6個參數(shù)進去mkconfig文件:作用:建立include目錄下的link目錄(asm),include目錄下創(chuàng)建confg.mk文件,創(chuàng)建config.h文件。APPEND=no# Default: Create new config file BOARD_NAME="" # Name to print in make output TARGETS="" while $# -gt 0 ; do case "$1" in -) shift ; break ; -a) shift ; APPEND=yes ; -n) shift ; BOARD_NAME="$1%_config" ; shift ; -t) shift ; TARGETS="echo $1 | sed s:_: :g $TARGETS" ; shift ; *) break ; esac done / $#是腳本傳遞的參數(shù)的個數(shù)。-gt是>的意思。 $1:第一個參數(shù)。shift:奸殺第一個參數(shù),/ 將第二參數(shù)變成第一個這段代碼意思 檢查參數(shù)中,有無-a -n -t這樣的參數(shù),沒有的話直接break。 / 很明顯,makefile傳遞的6個參數(shù),沒有-a,-t,-n。直接break。 "$BOARD_NAME" | BOARD_NAME="$1"/ :"$BOARD_NAME"表示一個條件,BOARD_NAME != NULL, |表示如果 條件為假 則運行后面的程序。 同時&&表示如果條件為真,則運行后面的程序/ BOARD_NAME等于傳進來的第一個參數(shù),即BOARD_NAME=mini2440 $# -lt 4 && exit 1/ 小于4個參數(shù)則退出 $# -gt 6 && exit 1/ 大于6個參數(shù)則退出if "$ARCH" -a "$ARCH" != "$2" ; then/ 判斷ARCH變量值是否為BULL ,-a是and的意思,并且 ARCH!= $2echo "Failed: $ARCH=$ARCH, should be $2 for $BOARD_NAME" 1>&2 exit 1 fi echo "Configuring for $BOARD_NAME board." / 建立 asm連接/ Create link to architecture specific headers/ if "$SRCTREE" != "$OBJTREE" ; then/都為null,相等,所以運行else后面mkdir -p $OBJTREE/includemkdir -p $OBJTREE/include2cd $OBJTREE/include2rm -f asmln -s $SRCTREE/include/asm-$2 asmLNPREFIX="././include2/asm/"cd ./includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asmelsecd ./includerm -f asmln -s asm-$2 asmfirm -f asm-$2/archif -z "$6" -o "$6" = "NULL" ; then/ -z的意思是判斷字符串是否為"" -o是或的意思, 判斷語句意思是$6="" 或者$6=NULL ln -s $LNPREFIXarch-$3 asm-$2/archelseln -s $LNPREFIXarch-$6 asm-$2/arch/ asm-arm下建立連接文件arch,link到arch-s3c24x0fiif "$2" = "arm" ; thenrm -f asm-$2/procln -s $LNPREFIXproc-armv asm-$2/procfi# 把芯片信息輸出到config.mk文件中# Create include file for Make#echo "ARCH = $2" > config.mkecho "CPU = $3" >> config.mkecho "BOARD = $4" >> config.mk "$5" && "$5" != "NULL" && echo "VENDOR = $5" >> config.mk "$6" && "$6" != "NULL" && echo "SOC = $6" >> config.mk# Assign board directory to BOARDIR variableif -z "$5" -o "$5" = "NULL" ; thenBOARDDIR=$4elseBOARDDIR=$5/$4fi/* u-boot支持go命令的方法* 在cmd_boot.c文件中(沒有就自己創(chuàng)建)增加以下內(nèi)容*/* 1、添加call_linux函數(shù)*/void call_linux(long a0, long a1, long a2)_asm_( " mov r1, #0n" " mov r1, #7 << 5n" /* 8 segments */ "1: orr r3, r1, #63 << 26n" /* 64 entries */ "2: mcr p15, 0, r3, c7, c14, 2n" /* clean & invalidate D index */ " subs r3, r3, #1 << 26n" " bcs 2bn" /* entries 64 to 0 */ " subs r1, r1, #1 << 5n" " bcs 1bn" /* segments 7 to 0 */ " mcr p15, 0, r1, c7, c5, 0n" /* invalidate I cache */ " mcr p15, 0, r1, c7, c10, 4n" /* drain WB */); _asm_("mov r0, #0n""mcr p15, 0, r0, c7, c10, 4n" /* drain WB */"mcr p15, 0, r0, c8, c7, 0n" /* invalidate I & D TLBs */);/ 以上的內(nèi)容可以不要/ r0、r1、r2三個寄存器的參數(shù)是傳遞到內(nèi)核head.S文件中,r0:0,r1:體系結(jié)構(gòu)號,r2地址_asm_("mov r0, %0n"/ 獲取0號,也就是第一個(a0)的數(shù)據(jù)"mov r1, #0x0c1n"/ 查芯片相關(guān)資料,mini2440的為 1999"mov r2, %2n"/ 啟動地址 mini2440=0x30008000"mov ip, #0n""mcr p15, 0, ip, c13, c0, 0n" /* zero PID */"mcr p15, 0, ip, c7, c7, 0n" /* invalidate I,D caches */"mcr p15, 0, ip, c7, c10, 4n" /* drain write buffer */ "mcr p15, 0, ip, c8, c7, 0n" /* invalidate I,D TLBs */"mrc p15, 0, ip, c1, c0, 0n" /* get control register */"bic ip, ip, #0x0001n" /* disable MMU */"mcr p15, 0, ip, c1, c0, 0n" /* write control register */"mov pc, r2n""nopn""nopn": /* no outpus */: "r" (a0), "r" (a1), "r" (a2);/*2、添加setup_linux_param函數(shù)*/static void setup_linux_param(ulong param_base) struct param_struct *params = (struct param_struct *)param_base; char *linux_cmd; / 獲取bootargs參數(shù)linux_cmd = getenv("bootargs");memset(params, 0, sizeof(struct param_struct); params->u1.s.page_size = 0x00001000;/ DDR的頁大小params->u1.s.nr_pages = (0x04000000 >> 12);/ 頁數(shù)/* set linux command line */memcpy(params->commandline, linux_cmd, strlen(linux_cmd) + 1);/* u-boot中MAC地址設(shè)置及往內(nèi)核中傳遞* */1.解決uboot命令行中不能設(shè)置ethaddr的問題,經(jīng)常會提示:Cant overwrite "ethaddr":common/cmd_nvedit.c中函數(shù)_do_setenv中找到189 #ifndef CONFIG_ENV_OVERWRITE190191 /*192 * Ethernet Address and serial# can be set only once,193 * ver is readonly.194 */195 #ifdef CONFIG_HAS_UID196 /* Allow serial# forced overwrite with 0xdeaf4add flag */197 if ( (strcmp (name, "serial#") = 0) && (flag != 0xdeaf4add) |198 #else199 if ( (strcmp (name, "serial#") = 0) |200 #endif201 (strcmp (name, "ethaddr") = 0)202203 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)204 && (strcmp (char *)env_get_addr(oldval),MK_STR(CONFIG_ETHADDR) != 0)205 #endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */206 ) ) 207 printf ("Cant overwrite "%s"n", name);208 return 1;209 210 #endif把201行替換成 (0 即可;2.為了讓uboot命令行中設(shè)置的參數(shù)ethaddr傳遞到內(nèi)核,必須修改uboot和linux內(nèi)核兩個地方:(1)uboot修改 : lib_arm/armlinux.c在 247 #ifdef CONFIG_CMDLINE_TAG248 setup_commandline_tag (bd, commandline);下面添加如下語句:char *buf1 = malloc(1024);sprintf(buf1, "%s mac=%s", getenv ("bootargs"), getenv ("ethaddr");setup_commandline_tag (bd, buf1);(2)linux內(nèi)核修改:drivers/net/davinci_emac.cstatic int emac_eth_setup(void)1899 前面添加:static char davinci_mac_addr_uboot20 = ""1887 static int _init param_mac_setup(char *str)1888 1889 strncpy (davinci_mac_addr_uboot, str, sizeof(davinci_mac_addr_uboot);1890 1891 _setup("mac=", param_mac_setup);并在函數(shù)emac_eth_setup內(nèi)部語句printk("TI DaVinci EMAC: MAC address is %sn", emac_eth_string);前面添加:strncpy(ema
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 掌握2025年 VFP考試的核心知識點及試題及答案
- 轉(zhuǎn)讓工程合同協(xié)議書樣本
- 奧迪賣車合同協(xié)議書樣本
- 宴會酒店合同協(xié)議書模板
- 2025年VFP考試前沿試題及答案分享
- 自動化測試與手動測試的結(jié)合試題及答案
- 高效完成MS Office試題及答案
- 解除合同終止協(xié)議書
- 2025年計算機二級ACCESS復習注意事項試題及答案
- 嵌入式軟件調(diào)試常見試題及答案
- 病理科危險化學品管理制度
- 二人相聲小品搞笑臺詞二人最搞笑的相聲臺詞
- 家具維保服務(wù)投標方案
- 環(huán)保管家服務(wù)投標方案(技術(shù)標)
- 電氣工程概論-肖登明
- 民間個人借款還清證明范本
- Sibelius使用教程教材說明
- 柔力球-華中師范大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
- ASME-B31.3-2008-工藝管道壁厚計算
- (完整版)培訓學校衛(wèi)生管理制度
- 民事檢察監(jiān)督申請書(參考范文)
評論
0/150
提交評論