1. 程式人生 > >移植uboot(易用性修改與uboot裁剪)

移植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_SIZE0x10000
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
改為:
#define CONFIG_ENV_OFFSET0x00040000
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_SIZE0x20000
#define CONFIG_ENV_RANGECONFIG_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