移植u-boot-2015.07-rc3之uboot裁剪及啟動引數修改(九)
可以看到,現在make編譯出來的u-boot.bin有512kb大小,造成u-boot這麼巨大的原因是新版本的u-boot預設情況下支援非常多的命令,以至於很多不必要的.o檔案都被連結進u-boot.bin檔案中了。今天就來把u-boot中我用不到的命令都裁剪掉並設定預設的引數,如ipaddr、serverip等。
大家移植到這裡肯定是明白很多移植u-boot的套路技巧了,比如想要新增某個命令xxx的支援,那麼就先在u-boot原始碼中看看有沒有一個叫cmd_xxx.c的檔案,有那就代表在原始碼上是支援的,那麼接下來就是通過修改cmd_xxx.c對應的Makefile檔案以支援生成cmd_xxx.o檔案。一般地,在Makefile中想要生成某個.o檔案都會有一個相對應的巨集來決定是否生成某個.o檔案,而這個巨集都是在smdk2440.h這個標頭檔案中定義的。
反過來,我們想要取消某個命令也是通過刪除smdk2440.h中的巨集來完成的,在裁剪的過程中,原則上是先註釋能確定的巨集,不太敢肯定的巨集先保留。在進一步裁剪時就可以跟著感覺來了,但是每裁剪一次都要對u-boot中需要的功能進行完整性測試,就這樣一點一點的裁,直到裁剪的大小你滿意為止。另外呢,在早期1.1.x的u-boot中,這些老版本的u-boot編譯出來也就200k左右的樣子,我們可以下載一個老版本的u-boot參考它的smdk2410.h進行裁剪。
u-boot裁剪後smdk2440.h在本節末尾會全部貼出。
在之前的移植中,我們一直沒有移植環境變數相關的內容,而現在的u-boot使用環境變數儲存命令saveenv後會直接重啟u-boot,說明現在的saveenv命令是不可用的,猜測saveenv命令對應的有個cmd_saveenv.c檔案,但是你搜索卻搜尋不到。那麼猜測saveenv命令有一個saveenv()函式來實現,所以搜尋saveenv:
|
根據上面搜尋的結果,可以猜測這個命令在env_nand.c和env_flash.c中都有支援,而事實上也是如此。環境引數既可以儲存在NorFlash(env_flash.c)中,也可以儲存在NandFlash(env_nand.c)中,而到底是儲存在什麼上面這就要看哪個檔案被編譯成了.o檔案,所以檢視相應的Makefile:
|
明顯的,可以在smdk2440.h中找到CONFIG_ENV_IS_IN_FLASH,而找不到CONFIG_ENV_IS_IN_NAND。而我們肯定是想要把環境變數儲存在NandFlash中的,所以在smdk2440.h中新增巨集CONFIG_ENV_IS_IN_NAND,關掉巨集CONFIG_ENV_IS_IN_FLASH。
|
make編譯,這時編譯出錯:
|
看來是需要定義其他的巨集,那麼我們進入common/env_nand.c中的saveenv()函式去分析一下程式碼,根據程式碼可以確定saveenv()函式的實現還需要使用到其他三個巨集:CONFIG_ENV_RANGE、CONFIG_ENV_OFFSET、CONFIG_ENV_SIZE,並對這三個巨集的定義如下:
|
對smdk2440.h修改完成後,make編譯、下載、nor啟動:
在控制檯輸入:
|
同樣的,上面我我設定CONFIG_ENV_OFFSET時是以nor啟動的mtdparts分割槽來設定的,如果是spl方式啟動的mtdparts應該把CONFIG_ENV_OFFSET的值設定為0x00120000,其他兩個巨集不變。
接下來完成今天最後的一道工作,修改u-boot預設引數。
在沒有使用saveenv命令前我們一直看到這句警告:
*** Warning - bad CRC, using defaultenvironment
在使用saveenv命令後這句警告就消失了。因為在uboot上電後,首先會去讀環境引數,然後判斷引數是否有效,如果有效的話就使用,無效就使用預設引數並列印警告資訊。
現在來搜尋一下這句警告資訊:
|
開啟common/env_common.c檔案,可以看到警告資訊出現在set_default_env函式中,追蹤default_environment可以看到所有預設的環境引數都定義在這個default_environment陣列中,並且很多陣列中的元素都是由巨集開關限制的,其中的有些預設引數是我們必須設定的:
CONFIG_BOOTARGS:傳給核心的啟動引數,需要定義。
CONFIG_BOOTCOMMAND:uboot啟動後根據這個命令來啟動核心,需要設定。
所以在smdk2440.h中新增這兩個巨集:
|
編譯下載,nor啟動。定義CONFIG_BOOTDELAY後u-boot會自動延時,超過延時後根據CONFIG_BOOTCOMMAND巨集啟動Linux kernel,但是現在NandFlash中並沒有kernel,所以現在我們下載一個kernel到NandFlash,測試u-boot是否能正常引導kernel。
|
現在的u-boot已經能正常引導kernel了。
最後,在smdk2440.h中做進一步修改:
|
make編譯,下載,nor啟動。完美引導kernel。
明天進行u-boot移植的最後一個主題,yaffs檔案系統燒寫支援。
完整smdk2440.h檔案:
/*
* (C) Copyright 2002
* Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Marius Groeger <[email protected]>
* Gary Jennejohn <[email protected]>
* David Mueller <[email protected]>
*
* Configuation settings for the SAMSUNG SMDK2410 board.
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __CONFIG_H
#define __CONFIG_H
/*
* High Level Configuration Options
* (easy to change)
*/
#define CONFIG_S3C24X0 /* This is a SAMSUNG S3C24x0-type SoC */
/*#define CONFIG_S3C2410*/ /* specifically a SAMSUNG S3C2410 SoC */
/*#define CONFIG_SMDK2410*/ /* on a SAMSUNG SMDK2410 Board */
#define CONFIG_S3C2440
#define CONFIG_SMDK2440
#define CONFIG_SYS_TEXT_BASE 0x33f00000 /* 34000000-33f00000 = 1M*/
#define CONFIG_UBOOT_LENGTH 0x80000 /*512k*/
#define CONFIG_UBOOT_NAND_ADDR 0x0 /*start of u-boot.bin in NAND*/
/*#define CONFIG_SYS_GENERIC_BOARD*/
#define CONFIG_SYS_ARM_CACHE_WRITETHROUGH
/* input clock of PLL (the SMDK2410 has 12MHz input clock) */
#define CONFIG_SYS_CLK_FREQ 12000000
#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
/*
* Hardware drivers
*/
#define CONFIG_DRIVER_DM9000
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
/*
* select serial console configuration
*/
#define CONFIG_S3C24X0_SERIAL
#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
/************************************************************
* USB support (currently only works with D-cache off)
************************************************************/
#if 0
#define CONFIG_USB_OHCI
#define CONFIG_USB_OHCI_S3C24XX
#define CONFIG_USB_KEYBOARD
#define CONFIG_USB_STORAGE
#define CONFIG_DOS_PARTITION
#endif
/************************************************************
* RTC
************************************************************/
#if 0
#define CONFIG_RTC_S3C24X0
#endif
#define CONFIG_BAUDRATE 115200
/*
* BOOTP options
*/
#if 0
#define CONFIG_BOOTP_BOOTFILESIZE
#define CONFIG_BOOTP_BOOTPATH
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_HOSTNAME
#endif
/*
* Command line configuration.
*/
#define CONFIG_CMD_BSP
#define CONFIG_CMD_CACHE
#if 0
#define CONFIG_CMD_DATE
#define CONFIG_CMD_DHCP
#endif
#define CONFIG_CMD_ELF
#define CONFIG_CMD_NAND
#define CONFIG_CMD_PING
#define CONFIG_CMD_REGINFO
#if 0
#define CONFIG_CMD_USB
#endif
#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_CMDLINE_EDITING
/* autoboot */
#define CONFIG_BOOTDELAY 2
#define CONFIG_BOOTARGS "console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2"
#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"
#define CONFIG_BOOT_RETRY_TIME -1
#define CONFIG_RESET_TO_RETRY
#define CONFIG_ZERO_BOOTDELAY_CHECK
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.110
#define CONFIG_SERVERIP 192.168.1.100
#if defined(CONFIG_CMD_KGDB)
#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
#endif
/*
* Miscellaneous configurable options
*/
#define CONFIG_SYS_LONGHELP /* undef to save memory */
#define CONFIG_SYS_PROMPT "XT_MINI2440 # "
#define CONFIG_SYS_CBSIZE 256
/* Print Buffer Size */
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
sizeof(CONFIG_SYS_PROMPT)+16)
#define CONFIG_SYS_MAXARGS 16
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
#define CONFIG_DISPLAY_CPUINFO /* Display cpu info */
#define CONFIG_SYS_MEMTEST_START 0x30000000 /* memtest works on */
#define CONFIG_SYS_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
#define CONFIG_SYS_LOAD_ADDR 0x30800000
/* support additional compression methods */
#if 1
#define CONFIG_BZIP2
#define CONFIG_LZO
#define CONFIG_LZMA
#endif
/*-----------------------------------------------------------------------
* Physical Memory Map
*/
#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
#define PHYS_FLASH_1 0x00000000 /* Flash Bank #0 */
#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1
/*-----------------------------------------------------------------------
* FLASH and environment organization
*/
#define CONFIG_SYS_FLASH_CFI
#define CONFIG_FLASH_CFI_DRIVER
#define CONFIG_FLASH_CFI_LEGACY
#define CONFIG_SYS_FLASH_LEGACY_512Kx16
#define CONFIG_FLASH_SHOW_PROGRESS 45
#define CONFIG_SYS_MAX_FLASH_BANKS 1
#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE }
#define CONFIG_SYS_MAX_FLASH_SECT (128)
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000)
#if 0
#define CONFIG_ENV_IS_IN_FLASH
#endif
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_SIZE 0x20000 /*128k*/
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE
#define CONFIG_ENV_OFFSET 0x00100000 /* after 1M */
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
/*
* Size of malloc() pool
* BZIP2 / LZO / LZMA need a lot of RAM
*/
#define CONFIG_SYS_MALLOC_LEN (4 * 1024 * 1024)
#define CONFIG_SYS_MONITOR_LEN (448 * 1024)
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
/*
* NAND configuration
*/
#ifdef CONFIG_CMD_NAND
#define CONFIG_CMD_NAND_YAFFS
#if 0
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#else
#define CONFIG_NAND_S3C2440
#define CONFIG_SYS_S3C2440_NAND_HWECC
#endif
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x4E000000
#endif
/*
* File system
*/
#if 0
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#endif
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define MTDIDS_DEFAULT "nand0=MINI2440_XT"
#define MTDPARTS_DEFAULT "mtdparts=MINI2440_XT:1m(u-boot)," \
"128k(params)," \
"4m(kernel)," \
"-(rootfs)"
#if 0
#define CONFIG_YAFFS2
#define CONFIG_RBTREE
#endif
/* additions for new relocation code, must be added to all boards */
#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
GENERATED_GBL_DATA_SIZE)
#define CONFIG_BOARD_EARLY_INIT_F
#endif /* __CONFIG_H */
相關推薦
移植u-boot-2015.07-rc3之uboot裁剪及啟動引數修改(九)
可以看到,現在make編譯出來的u-boot.bin有512kb大小,造成u-boot這麼巨大的原因是新版本的u-boot預設情況下支援非常多的命令,以至於很多不必要的.o檔案都被連結進u-boot.bin檔案中了。今天就來把u-boot中我用不到的命令都裁剪掉並設定預設的
移植u-boot-2015.07-rc3之修改程式碼支援DM9000網絡卡(七)
目前的u-boot啟動後有如下資訊: Net: CS8900-0 Error: CS8900-0address not set. 板子上的是DM9000不是CS8900,網絡卡模組肯定是錯誤的嘛。看到這裡,你應該有了熟悉的思路,grep "Net:" * -nR查詢網絡
u-boot-2015.07移植(SPL)①
本文參考https://blog.csdn.net/doccode/article/details/47212363,在此謝過! SPL方式移植U-BOOT-2015.07 在JZ2440板子上移植u-boot-2015.07,移植思路,利用smdk2410板子作為基線進行移植.下載u-boot-2015
u-boot-2015.07 autoconf.mk生成過程分析
1、u-boot2015.7版本編譯沒有在頂層目錄中生成.config檔案,而生成了include/autoconf.mk和include/autoconf.mk.dep兩個檔案,並在每個模組編譯的時候包含著兩個檔案,作用相當於高版本u-boot中的.config檔案。 2、autoconf
Appium python自動化測試系列之等待函數如何進行實戰(九)
可能 res path 定位 __file__ poll 9.1 慢慢 定義 ?9.1 等待函數的使用 9.1.1 為什麽要使用等待函數 我們在做自動化的時候很多時候都不是很順利,不是因為app的問題,我們的腳本也沒問題,但是很多時候都會報錯,比如一個頁面本來就有id為1的
Jmeter源碼之Http請求布局樣式修改(三)
Jmeter修改點包括:協議、端口號、域名等 界面: 涉及的類:類:JLabeledTextField.java修改的代碼:Jmeter源碼之Http請求布局樣式修改(三)
《Hadoop》之"踽踽獨行"(九)Hadoop叢集的四個配置檔案的屬性解析
在啟動hadoop叢集的守護執行緒時,一定會載入並執行相關的class位元組碼檔案。通過common模組和hdfs模組裡的原始碼可以看到,它們讀取了相關的配置檔案。 hadoop-common-2.7.3-sources.jar下的org.apache.hadoop.conf.Configura
「docker實戰篇」python的docker爬蟲技術-fiddler之安卓模擬器如何抓包(九)
src ogr 網絡 https wifi dockers auto 圖片 密碼 原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!原文鏈接地址:「docker實戰篇」python的docker爬蟲技術-fiddler之安卓模擬器如何抓包(九) 上次說了web端
移植U-BOOT之裁剪和修改預設引數(易用性)啟動核心,以及對uboot進行分割槽
今天我們來裁剪U-BOOT,使其更加易用,修改預設引數,以及製作最終修改好得補丁檔案方便以後的快速移植。 那麼如果想看之前的關於網絡卡以及flash等的移植,請點選連結檢視:點選連結檢視 在裁剪修改之前呢,我們先來了解一下U-BOOT的環境引數(環境變數):
u-boot-2015.04 在tq2440上的移植(使用spl引導u-boot)
ENTRY(relocate_vectors) /* * Copy the relocated exception vectors to the * correct address * CP15 c1 V bit gives us the lo
2017-9-13-Linux移植:u-boot的移植
ble spa order makefile make 周立功 itl add tar命令 1、u-boot下載地址:http://ftp.denx.de/pub/u-boot/ 2、Linux環境下使用tar命令解壓壓縮包:tar -xzvf file.tar.gz
移植u-boot.2016.09 ——(六、制作補丁、打補丁)
mini2440 style mic 移植 打補丁 spa ont microsoft ini 制作補丁: 制作補丁: diff -urN u-boot-2016.09 u-boot-2016.09_mini2440 > u-boot-2016.09_patch 打補
移植u-boot-2014.10
移植u-boot-2014.10 /*************************************************** *u-boot版本 :u-boot-2014.10 *gcc版本 :/home/flinn/tools/4.4.3/bin/arm
BeagleBone Black 移植U-Boot (2 MLO、U-Boot)
原文:jexbat.com/categories/BeagleBone/ 什麼是 U-Boot 熟悉嵌入式開發的應該都聽過它,U-boot 就是啟動系統前的一段載入程式,雖然是載入程式,但是功能非常強大。 這一篇主要講解如何從無到有執行 U-Boot,關於 U-Boot 引導 Linux
u-boot原理分析第二課-------UBOOT第二階段
我們之前講到的UBOOT的第一階段初始化,都是一些硬體的操作,之後的操作便在比較複雜的函式中去實現了,也是我們上節課講到的: 這裡把_start_armboot的地址賦值給pc,而_start_armboot的地址為: 也就是跳到start_armboot
移植U-BOOT-2016.11到JZ2440詳細教程(5)
讓U-boot支援Nor Flash 這節的移植應該是最簡單的,修改程式碼量最少。但是我們還是要對原始碼進行一個簡單的分析。 首先緊接上一節最後的那張圖,我們已經讓U-boot可以從Nand Flash啟動,然後打印出來的除錯資訊中Flash: 對應的就是N
秉火stm32f429移植u-boot
秉火stm32f429移植u-boot 參考: 《STM32F429i-Discovery 移植併成功跑起來u-boot 2016.05》作者:tcjy1000,連結: https://blog.csdn.net/tcjy1000/article/details/51475438 硬
移植u-boot-2011.03到S3C2440(utu2440)的方法與步驟###8. u-boot引導啟動nand flash中核心和根檔案系統cramfs和使用者檔案系統yaffs2支援
rivers/rtc/hctosys.c: unable to open rtc device (rtc0)uncorrectable error : <3>uncorrectable error : <3>end_request: I/O error, dev mtdblock2,
uboot移植之uboot和kernel的引數傳遞
從uboot啟動核心的形式theKernel (0, machid, bd->bi_boot_params) 可以看出uboot給核心傳遞了3個引數,第1個是0,第2個是機器碼,第3個是引數列表在SDRAM的起始位置 剛好滿足一下呼叫核心的條件• R0=0。 • R1
移植 u-boot-1.1.6 到 FL2440(1)---實現基本功能
/* Set up the stack */ stack_setup:ldrr0, _TEXT_BASE/* upper 128 KiB: relocated uboot */subr0, r0, #CFG_MALLOC_LEN/* malloc area *