u-boot-2016.05移植:(6)、修改默认参数

时间:2021-08-26 17:22:42

1、修改ip相关默认参数:
在u-boot-2016.05\include\configs\smdk2440.h中修改CONFIG_NETMASK、CONFIG_IPADDR、CONFIG_SERVERIP三个宏定义的值为:

#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 202.204.53.5
#define CONFIG_SERVERIP 202.204.53.229

2、修改nand flash分区:
u-boot在nand flash上划分的分区并不会影响内核对nand flash分区的划分,但一般他俩对nand flash的分区应该一致,且各个分区的大小应该以实际使用的对象大小而做出调整。按照内核启动信息里的nand flash的分区信息如:

Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit":
0x00000000-0x00040000 : "bootloader"
0x00040000-0x00060000 : "params"
0x00060000-0x00260000 : "kernel"
0x00260000-0x10000000 : "root"

来修改u-boot代码(注意:nand flash是以块为单位操作的,所以各个分区的偏移地址、大小、结束地址必须遵循以128k为单位的规则,即都是0x20000的倍数。):
①、在u-boot-2016.05\include\configs\smdk2440.h中的

/*-----------------------------------------------------------------------
* FLASH and environment organization
*/

下面添加

#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define MTDIDS_DEFAULT "nand0=jz2440-0"
#define MTDPARTS_DEFAULT "mtdparts=jz2440-0:256k(u-boot)," \
"128k(params)," \
"2m(kernel)," \
"-(rootfs)" \

特别注意:在该分区参数下,使用的u-boot大小不能超过256K,内核大小不能超过2M,否则可能发生错误。比如使用的u-boot如果超过256K,在烧写到nand flash的时候从u-boot分区起始地址开始写,写满u-boot分区后,超过256K的部分将被写到u-boot分区外params分区的起始处,若我们之前有保存的环境参数,环境参数就会被覆盖破坏,若没有保存的环境参数,当我们在u-boot命令行界面使用save命令保存环境参数的时候,保存是从params分区起始地址开始,这样就就会破坏u-boot在params分区的那部分代码。内核也是一样的,写满kernel分区后,超过2M的部分将被写到kernel分区外的rootfs分区的起始处,若rootfs分区有文件系统,那么就会覆盖文件系统的开始一部分代码,导致系统启动的时候文件系统挂载不上,若rootfs分区没有文件系统,那么当烧写文件系统的时候,从rootfs分区起始地址开始写,就会覆盖内核超出的那部分代码,破坏内核,导致启动系统的时候内核校验失败。附nand flash分区图:
u-boot-2016.05移植:(6)、修改默认参数
②、在u-boot-2016.05\common\board_r.c:run_main_loop函数中的

/* main_loop() can return to retry autoboot, if so just run it again */
for (;;)
main_loop();

之前添加

run_command("mtdparts default", 0);

③、params分区相关参数修改:
在u-boot-2016.05\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_IS_IN_NAND
#define CONFIG_ENV_OFFSET 0x00040000
#define CONFIG_ENV_SIZE 0x20000
#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE

其中:
CONFIG_ENV_IS_IN_NAND 表示环境参数在nand flash上。
CONFIG_ENV_OFFSET 表示环境参数的偏移地址。
CONFIG_ENV_SIZE 表示环境参数的大小。
3、修改文件系统相关默认参数:
在u-boot-2016.05\include\configs\smdk2440.h中添加

#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3"

其中:
console=ttySAC0 表示内核打印信息从串口0输出出来。
root=/dev/mtdblock3 表示文件系统在nand flash上的位置,一般nand flash划分为4个MTD partitions,u-boot在0,params在1,kernel在2,filesystem在3。
4、修改启动内核相关默认参数:
在u-boot-2016.05\include\configs\smdk2440.h中添加

#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"

u-boot通过nand read 30000000 kernel;bootm 30000000这两条命令来启动内核。