u-boot移植(十三)---代码修改---裁剪及环境变量 一

发布时间:2023-07-03  

一、内核裁剪

  内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉。


  1 /*

  2  * (C) Copyright 2002

  3  * Sysgo Real-Time Solutions, GmbH

  4  * Marius Groeger

  5  * Gary Jennejohn

  6  * David Mueller

  7  *

  8  * Configuation settings for the JZ2440 board.

  9  *

 10  * SPDX-License-Identifier:    GPL-2.0+

 11  */

 12 

 13 #ifndef __CONFIG_H

 14 #define __CONFIG_H

 15 

 16 /*

 17  * High Level Configuration Options

 18  * (easy to change)

 19  */

 20 #define CONFIG_S3C24X0        /* This is a SAMSUNG S3C24x0-type SoC */

 21 #define CONFIG_JZ2440        /* on a JZ2440 Board */

 22 #define CONFIG_S3C2440

 23 

 24 /* 内存为64M(34000000),34000000 - 33F00000 = 100000 即为1M*/

 25 #define CONFIG_SYS_TEXT_BASE         0x33f00000

 26 

 27 #define DEBUG

 28 

 29 #define CONFIG_SYS_ARM_CACHE_WRITETHROUGH

 30 

 31 /* input clock of PLL (the JZ2440 has 12MHz input clock) */

 32 #define CONFIG_SYS_CLK_FREQ    12000000

 33 

 34 #define CONFIG_CMDLINE_TAG    /* enable passing of ATAGs */

 35 #define CONFIG_SETUP_MEMORY_TAGS

 36 #define CONFIG_INITRD_TAG

 37 

 38 /*

 39  * Hardware drivers

 40  */

 41 #if 0

 42 #define CONFIG_CS8900        /* we have a CS8900 on-board */

 43 #define CONFIG_CS8900_BASE    0x19000300

 44 #define CONFIG_CS8900_BUS16    /* the Linux driver does accesses as shorts */

 45 #else

 46 #define CONFIG_DRIVER_DM9000

 47 #endif

 48 

 49 /*

 50  * select serial console configuration

 51  */

 52 #define CONFIG_S3C24X0_SERIAL

 53 #define CONFIG_SERIAL1        1    /* we use SERIAL 1 on JZ2440 */

 54 

 55 /************************************************************

 56  * USB support (currently only works with D-cache off)

 57  ************************************************************/

 58 #define CONFIG_USB_OHCI

 59 #define CONFIG_USB_OHCI_S3C24XX

 60 #define CONFIG_USB_KEYBOARD

 61 #define CONFIG_USB_STORAGE

 62 #define CONFIG_DOS_PARTITION

 63 

 64 /************************************************************

 65  * RTC

 66  ************************************************************/

 67 #define CONFIG_RTC_S3C24X0

 68 

 69 

 70 #define CONFIG_BAUDRATE        115200

 71 

 72 /*

 73  * BOOTP options

 74  */

 75 #define CONFIG_BOOTP_BOOTFILESIZE

 76 #define CONFIG_BOOTP_BOOTPATH

 77 #define CONFIG_BOOTP_GATEWAY

 78 #define CONFIG_BOOTP_HOSTNAME

 79 

 80 /*

 81  * Command line configuration.

 82  */

 83 #define CONFIG_CMD_BSP

 84 #define CONFIG_CMD_CACHE

 85 #define CONFIG_CMD_DATE

 86 #define CONFIG_CMD_DHCP

 87 #define CONFIG_CMD_NAND

 88 #define CONFIG_CMD_PING

 89 #define CONFIG_CMD_REGINFO

 90 #define CONFIG_CMD_USB

 91 

 92 #define CONFIG_SYS_HUSH_PARSER

 93 #define CONFIG_CMDLINE_EDITING

 94 

 95 /* autoboot */

 96 #define CONFIG_BOOTDELAY    5

 97 #define CONFIG_BOOT_RETRY_TIME    -1

 98 #define CONFIG_RESET_TO_RETRY

 99 #define CONFIG_ZERO_BOOTDELAY_CHECK

100 

101 #define CONFIG_NETMASK        255.255.255.0

102 #define CONFIG_IPADDR        10.0.0.110

103 #define CONFIG_SERVERIP        10.0.0.1

104 

105 #if defined(CONFIG_CMD_KGDB)

106 #define CONFIG_KGDB_BAUDRATE    115200    /* speed to run kgdb serial port */

107 #endif

108 

109 /*

110  * Miscellaneous configurable options

111  */

112 #define CONFIG_SYS_LONGHELP        /* undef to save memory */

113 #define CONFIG_SYS_CBSIZE    256

114 /* Print Buffer Size */

115 #define CONFIG_SYS_PBSIZE    (CONFIG_SYS_CBSIZE +

116                 sizeof(CONFIG_SYS_PROMPT)+16)

117 #define CONFIG_SYS_MAXARGS    16

118 #define CONFIG_SYS_BARGSIZE    CONFIG_SYS_CBSIZE

119 

120 #define CONFIG_DISPLAY_CPUINFO                /* Display cpu info */

121 

122 #define CONFIG_SYS_MEMTEST_START    0x30000000    /* memtest works on */

123 #define CONFIG_SYS_MEMTEST_END        0x33F00000    /* 63 MB in DRAM */

124 

125 #define CONFIG_SYS_LOAD_ADDR        0x30800000

126 

127 /* support additional compression methods */

128 #define CONFIG_BZIP2

129 #define CONFIG_LZO

130 #define CONFIG_LZMA

131 

132 /*-----------------------------------------------------------------------

133  * Physical Memory Map

134  */

135 #define CONFIG_NR_DRAM_BANKS    1          /* we have 1 bank of DRAM */

136 #define PHYS_SDRAM_1        0x30000000 /* SDRAM Bank #1 */

137 #define PHYS_SDRAM_1_SIZE    0x04000000 /* 64 MB */

138 

139 #define PHYS_FLASH_1        0x00000000 /* Flash Bank #0 */

140 

141 #define CONFIG_SYS_FLASH_BASE    PHYS_FLASH_1

142 

143 /*-----------------------------------------------------------------------

144  * FLASH and environment organization

145  */

146 

147 #define CONFIG_SYS_FLASH_CFI

148 #define CONFIG_FLASH_CFI_DRIVER

149 #define CONFIG_FLASH_CFI_LEGACY

150 #define CONFIG_SYS_FLASH_LEGACY_1Mx16

151 #define CONFIG_FLASH_SHOW_PROGRESS    45

152 

153 #define CONFIG_SYS_MAX_FLASH_BANKS    1

154 #define CONFIG_SYS_FLASH_BANKS_LIST     { CONFIG_SYS_FLASH_BASE }

155 #define CONFIG_SYS_MAX_FLASH_SECT    (128)

156 

157 #define CONFIG_ENV_ADDR            (CONFIG_SYS_FLASH_BASE + 0x070000)

158 #define CONFIG_ENV_IS_IN_FLASH

159 #define CONFIG_ENV_SIZE            0x10000

160 /* allow to overwrite serial and ethaddr */

161 #define CONFIG_ENV_OVERWRITE

162 

163 /*

164  * Size of malloc() pool

165  * BZIP2 / LZO / LZMA need a lot of RAM

166  */

167 #define CONFIG_SYS_MALLOC_LEN    (4 * 1024 * 1024)

168 

169 #define CONFIG_SYS_MONITOR_LEN    (448 * 1024)

170 #define CONFIG_SYS_MONITOR_BASE    CONFIG_SYS_FLASH_BASE

171 

172 /*

173  * NAND configuration

174  */

175 #ifdef CONFIG_CMD_NAND

176 #define CONFIG_NAND_S3C2410

177 #define CONFIG_SYS_S3C2410_NAND_HWECC

178 #define CONFIG_SYS_MAX_NAND_DEVICE    1

179 #define CONFIG_SYS_NAND_BASE        0x4E000000

180 #endif

181 

182 /*

183  * File system

184  */

185 #define CONFIG_CMD_FAT

186 #define CONFIG_CMD_EXT2

187 #define CONFIG_CMD_UBI

188 #define CONFIG_CMD_UBIFS

189 #define CONFIG_CMD_MTDPARTS

190 #define CONFIG_MTD_DEVICE

191 #define CONFIG_MTD_PARTITIONS

192 #define CONFIG_YAFFS2

193 #define CONFIG_RBTREE

194 

195 /* additions for new relocation code, must be added to all boards */

196 #define CONFIG_SYS_SDRAM_BASE    PHYS_SDRAM_1

197 #define CONFIG_SYS_INIT_SP_ADDR    (CONFIG_SYS_SDRAM_BASE + 0x1000 -

198                 GENERATED_GBL_DATA_SIZE)

199 

200 #define CONFIG_BOARD_EARLY_INIT_F

201 

202 #endif /* __CONFIG_H */

  编译执行:

  

  do_date 对应着宏 DO_CMD_DATE,去掉此宏

  

  再次编译执行,编译完成。

  

  烧写进开发板。启动。

二、环境变量

2.1 修改分区为nand

  环境变量的设置都会存在flash中,若是未设置分区,就执行save等保存命令,可能会破坏u-boot的启动程序。

  环境变量的设置 对应着宏 

  

  不过这段我们不需要,我们需要设置自己的环境变量。

  查找save命令的设置对应的文件,saveenv

  

  

  

  我们只有nand和flash所以只对应这两行。查看common 下的 Makefile:

  

  

  配置成保存环境变量的地方为 nand ,则需要定义宏 CONFIG_ENV_IS_IN_NAND

  进入源文件继续查看,还需要定义宏 CMD_SAVEENV,CMD_SAVEENV宏的定义则依赖下面的程序:

  

  CONFIG_CMD_NAND 我们已经在jz2440.h中定义,所以不需要了。

  saveenv函数中同时涉及到另外两个宏:CONFIG_ENV_RANGE和CONFIG_ENV_OFFSET,一个是ENV的擦除大小,一个是偏移地址。

  

  其中CONFIG_ENV_RANGE 的设置如上,我们可以直接参照 flash的设置,配置这几个宏。

  

  编译,烧写:

  

  结果不对,打开DEBUG开关进行DEBUG

  代码流程中执行到initr_nand,之后就开始执行initr_env,在此函数和其子函数中加入调试代码 查看是否进入其中执行:

  

  

  在函数的头尾加上debug函数,可以在进入的函数中都加上,然后去查函数在哪里调用出错了。编译,烧录:

  

  上面是结尾的打印信息。根据上面的信息理一下代码

 1 board_init_r

 2     initr_env 

 3         debug("start of initr_env n");

 4         should_load_env()

 5             debug("start of should_load_env() n");

 6             debug("end of should_load_env() n");

 7         env_relocate

 8             debug("start of env_relocate(void) n");

 9             debug("in of env_relocate_spec() n");

10             env_relocate_spec();

11                 env_relocate_spec(void)        //此函数是未定义CONFIG_ENV_OFFSET_REDUND宏的函数

12                     debug("start of env_relocate(void) n");

13                     debug("env_relocate_spec in  set_default_envn");

14                     set_default_env("!readenv() failed");

15                     debug("end of env_relocate(void) n");

16             debug("end of env_relocate(void) n");

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>