移植uboot(易用性修改與uboot裁剪)

易用性修改與裁剪uboot:
uboot啓動:
1、讀環境變量
2、判斷是否有效,有效則使用,無效則使用代碼中寫死的默認環境變量

重啓uboot後,會打印:*** Warning - bad CRC, using default environment,
讀啓動參數,格式不對,這說明沒有找到環境變量,使用默認的環境變量

uboot做一次分區(mtdparts_init()函數,smdk2440.h裏面提供具體分區參數),
內核做一次分區,互不影響,但uboot的分區應該根據內核的來進行分區方便使用。

默認環境變量的設置:Env_common.c:default_environment[]數組
在Include/configs/smdk2440.h裏面具體設置#define CONFIG_BOOTARGS ""  #define CONFIG_BOOTCOMMAND ""

根據內核的NAND FLASH分區信息:
0x00000000-0x00040000 : "bootloader"  // 存放uboot
0x00040000-0x00060000 : "params"  // 存放傳遞給內核的默認參數
0x00060000-0x00260000 : "kernel"  // 存放內核
0x00260000-0x10000000 : "root"   // 存放根文件系統

設置uboot的分區
添加下面三個宏設置設備和分區:
#define CONFIG_MTD_DEVICE
#define MTDIDS_DEFAULT "nand0=jz2440-0"
#define MTDPARTS_DEFAULT "mtdparts=jz2440-0:256k(uboot),"\
"128k(params),"\
"2m(kernel),"\
"-(root)"

根據 common Env_nand.c  saveenv函數在include/configs  smdk2440.h設置宏:

把:
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000)
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_SIZE 0x10000
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
改爲:
#define CONFIG_ENV_OFFSET 0x00040000
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_SIZE 0x20000
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE

設置了params分區後,uboot命令行下set 那些bootargs 就可以save了。
uboot對nand設置的分區,不會傳給內核,不會影響內核對nand的從新分區,
但爲方便使用,uboot的分區設置應與內核保持一致

添加mtdpart命令:
說明需要定義一個 CONFIG_CMD_MTDPARTS 宏才能使用mtdparts命令:
在include/configs  smdk2440.h設置宏:
#define CONFIG_CMD_MTDPARTS

在 arch/arm/lib board.c board_init_r 函數里加上:
run_command("mtdparts default",0); // 加上這句,用mtd命令操作分區時,就不需要先運行 mtdparts default
不要放錯了位置,導致沒有執行到這句話。


重新配置一下再編譯,啓動是設置bootcmd:

set bootcmd 'nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0'
或者:
set bootcmd 'nand read.jffs2 0x30007FC0 0x00060000 0x00200000;bootm 0x30007FC0'


裁減內核:
註釋掉相關宏,去掉沒用到的模塊:
去掉下面的宏:
/************************************************************
 * USB support (currently only works with D-cache off)
 ************************************************************/
#define CONFIG_USB_OHCI
#define CONFIG_USB_KEYBOARD
#define CONFIG_USB_STORAGE
#define CONFIG_DOS_PARTITION

/************************************************************
 * RTC
 ************************************************************/
#define CONFIG_RTC_S3C24X0

/*
 * BOOTP options
 */
#define CONFIG_BOOTP_BOOTFILESIZE
#define CONFIG_BOOTP_BOOTPATH
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_HOSTNAME

#define CONFIG_CMD_DATE

#define CONFIG_CMD_DHCP
#define CONFIG_CMD_USB


/*
 * File system
 */
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_YAFFS2

#define CONFIG_RBTREE


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章