uboot与kernel之间机器码和环境变量的传递 在嵌入式系统中,uboot和kernel之间的机器码和环境变量的传递是一个非常重要的过程。下面,我们将详细介绍uboot与kernel之间机器码和环境变量的传递。 一、机器码的传递 在uboot中,机器码定义在include/asm-arm/mach-types.h中。例如,在samsung的my2440板子上,机器码定义为MACH_TYPE_SMDK2440。然后,在board/samsung/my2440/my2440.c文件中,设置了uboot机器码为MACH_TYPE_SMDK2440。 在kernel中,机器码定义在arch/arm/mach-s3c2440/mach-smdk2440.c文件中。例如,S3C2440这个机器的定义为MACHINE_START(S3C2440, "SMDK2440")。展开MACHINE_START和MACHINE_END宏,得到机器码的定义为MACH_TYPE_S3C2440。 在kernel中,机器码定义也可以在arch/arm/tools/mach-types中找到。例如,s3c2440 ARCH_S3C2440的机器码定义为MACH_TYPE_S3C2440。 二、环境变量的传递 在uboot中,环境变量的传递是通过nand flash来存储的。uboot将启动参数存储在nand flash的开始192K处,随后64K存储启动参数。定义在include/configs/my2440.h中:#define CONFIG_ENV_OFFSET 0x30000 /* environment save address: 192K */#define CONFIG_ENV_SIZE 0x10000 /* Total Size of Environment Sector 64K */。 在uboot shell中,输入saveenv命令将设置的启动参数保存在nand flash第192K开始的64K字节中。 在uboot中,获取nand flash中的bootargs,设置参数列表listtag1uboot与kernel之间机器码和环境变量的传递uboot设置了bootcmd命令后,在3秒后调用do_bootm()启动linux-->boot_os[IH_OS_LINUX],即:do_bootm_linux()(文件:lib_arm/bootm.c),此函数调用setup_commandline_tag (bd,commandline)获取nand flash中的bootargs,设置到参数列表中。 在board/samsung/my2440/my2440.c文件中的board_init()函数,设置了:gd->bd->bi_boot_params = 0x30000100;即:启动参数放在SDRAM第256 byte处。 uboot是在什么时候把启动参数写入的?在uboot启动过程中,会将启动参数写入nand flash中。 uboot与kernel之间机器码和环境变量的传递是一个非常重要的过程。在这个过程中,uboot和kernel之间需要交换机器码和环境变量,以便于系统的正确启动。
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助