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

时间:2022-06-14 08:10:54
易用性修改与裁剪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