u-boot transplantation (13)---Code modification---Cutting and environment variables 1

Publisher:BlissfulAuraLatest update time:2023-07-03 Source: elecfansKeywords:u-boot Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

1. Kernel pruning

  The first step to trim the kernel is to modify our configuration file, which is the include/configs/jz2440.h file. Many macros defined in it need to be removed if we may not use them.


  1 /*

  2 * (C) Copyright 2002

  3 * Sysgo Real-Time Solutions, GmbH

  4 * Marius Groeger

  5 * Gary Jennejohn

  6 * David Mueller

  7*

  8 * Configuration 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

 twenty three 

 24 /* The memory is 64M (34000000), 34000000 - 33F00000 = 100000, which is 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 -

198GENERATED_GBL_DATA_SIZE)

199 

200 #define CONFIG_BOARD_EARLY_INIT_F

201 

202 #endif /* __CONFIG_H */

  Compile and execute:

  

  do_date corresponds to the macro DO_CMD_DATE, remove this macro

  

  Compile and execute again, and the compilation is completed.

  

  Burn into the development board. start up.

2. Environment variables

2.1 Modify the partition to nand

  The settings of environment variables will be stored in flash. If the partition is not set, executing save commands such as save may destroy the u-boot startup program.

  The settings of environment variables correspond to macros 

  

  But we don’t need this section, we need to set our own environment variables.

  Find the file corresponding to the settings of the save command, saveenv

  

  

  

  We only have nand and flash, so they only correspond to these two lines. View the Makefile under common:

  

  

  If configured to save environment variables as nand, you need to define the macro CONFIG_ENV_IS_IN_NAND

  Enter the source file to continue viewing. You also need to define the macro CMD_SAVEENV. The definition of the CMD_SAVEENV macro depends on the following program:

  

  CONFIG_CMD_NAND We have already defined it in jz2440.h, so it is not needed.

  The saveenv function also involves two other macros: CONFIG_ENV_RANGE and CONFIG_ENV_OFFSET. One is the erase size of ENV, and the other is the offset address.

  

  The settings of CONFIG_ENV_RANGE are as above. We can directly refer to the settings of flash to configure these macros.

  

  Compile and program:

  

  The result is wrong, turn on the DEBUG switch to DEBUG

  In the code flow, initr_nand is executed, and then initr_env starts to be executed. Add debugging code to this function and its sub-functions to see if it is executed:

  

  

  Add the debug function at the beginning and end of the function. You can add it to all the functions you enter, and then check where the function call went wrong. Compile and burn:

  

  Above is the printed message at the end. Organize the code based on the above information

 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) //This function is a function that does not define the CONFIG_ENV_OFFSET_REDUND macro

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");

17 debug("end of initr_env n");


  The part marked in red has been executed. It can be seen that the function cannot be found when entering env_relocate_spec. This function has not been entered, but it has indeed been executed to that step. Take a look at u-boot.dis to see if this has been executed. function

   

  Check whether env_relocate calls this address function:

  

  It was called again but an error occurred during execution. Entering this function did not return. It means that this function is not entered at all when the program is running.

  Check the stack settings and the autoconf.h file and find that the CONFIG_SYS_MALLOC_F macro is turned on. We did not add this macro to the original settings. It should be automatically set by the system.

  Check the jz2440_defconfig file and find that this macro is indeed turned on. Comment it out. This macro will be used in the stack settings. In the code of crt0.S, there is a section that jumps to the board_init_f_mem function. There is a section of code as follows:


1 #if defined(CONFIG_SYS_MALLOC_F)

2 top -= CONFIG_SYS_MALLOC_F_LEN;

3 gd->malloc_base = top;

4 #endif


  Here is a small section of the memory pool allocated to move down the stack. The stack has been moved down by 1024KB.

  

  At the same time, in our default config file, we found that the CONFIG_CMD_NAND macro was turned off. This macro must be turned on.

  In the configuration, SPL is also turned on and must be turned off

  

  Finally, modify the code in crt0.S as follows:

  1ENTRY(_main)

[1] [2]
Keywords:u-boot Reference address:u-boot transplantation (13)---Code modification---Cutting and environment variables 1

Previous article:u-boot transplantation (13)---Code modification---Cutting and environment variables 2
Next article:u-boot transplant (12)---code modification---support DM9000 network card

Recommended ReadingLatest update time:2024-11-15 17:05

OK6410A development board (three) 2 u-boot-2018.09 ethernet analysis
u-boot-2018.09 (source code based on https://download.csdn.net/download/Golden_Chen/11998917) Current status 1. Check the available IP addresses in the current LAN $ nmap -sP 10.10.11.* 2. Set u-boot ip related variables setenv gatewayip 10.10.11.254 setenv ipaddr 10.10.11.120 setenv serverip 10.10.11.57 setenv netmas
[Microcontroller]
u-boot-1.1.6 transplanted to dm9000
The execution process of network card dm9000 (u-boot version: u-boot-1.1.6): There is eth_initialize(gd- bd) in board.c; The implementation of eth_initialize is in eth.c, but there is no initialization eth_init of dm9000 in the eth_initialize function.   Commonly used network devices are nfs, tftp, and ping commands.
[Microcontroller]
u-boot-2009.08 transplantation on mini2440 (ten) --- add I2C EEPROM function
Migration environment 1. Host environment: CentOS 5.5 under VMare, 1G memory. 2. Integrated development environment: Eclipse IDE 3. Compilation environment: arm-linux-gcc v4.4.3, arm-none-eabi-gcc v4.5.1. 4. Development board: mini2440, 2M nor flash, 128M nand flash. 5.u-boot version: u-boot-2009.08 6. References: ht
[Microcontroller]
u-boot-2014.10 transplantation (6) Add mtdparts command and partition
Add the mtdparts command, change the command to view the current partition, and use the partition name to represent the address and length in the startup parameters. grep "cmd_mtdpart" * -nR   Search shows that mtdpart is defined in cmd_mtdparts.c   common/Makefile:147:obj-$(CONFIG_CMD_MTDPARTS) += cmd_mtdparts.o
[Microcontroller]
TQ2440 Study Notes—— 29. Porting U-Boot [U-Boot compilation and linking process]
U-Boot compilation and linking process After configuration, execute "make all" to compile. From the Makefile, you can understand which files U-Boot uses, which file is executed first, and the memory occupied by the executable file. First determine which files are used. The following shows the ARM-related part of t
[Microcontroller]
TQ2440 Study Notes—— 29. Porting U-Boot [U-Boot compilation and linking process]
u-boot-2016.09 transplant (5)-uart
Because the architecture of u-boot-2016.09 is moving closer to the kernel, the serial port is no longer directly usable as before, which increases the workload of uboot porting. Let's port the serial port. In the previous section, we have added the configuration of the serial port GPIO in board/samsung/tq210/lowleve
[Microcontroller]
u-boot-2016.09 transplant (5)-uart
OK6410A development board (three) 13 u-boot-2021.01 boot analysis SPL image running part boot detailed analysis
url : git@github.com:lisider/u-boot.git branch : ok6410a commit id : e63a4077ad3aea53107495b0b68b95e720fe6033 config :ok6410a_mini_defconfig // There are 67 .S .s .c files involved From the entrance to the exit // Run at 0x0c00 0000 // The entry is the b reset at the _start label in arch/arm/lib/vectors.S rese
[Microcontroller]
Preliminary porting of u-boot-2015.01 on tq2440
Development board: tq2440 Tools: Win7 + VMware + Debian6 U-boot version: u-boot-2015.01 Linux version: linux-2.6.30.4 that comes with Tianxiang GCC version: gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) Since u-boot-2014.04 was transplanted to tq2440 before, I won’t go into details when transplanting u-boot-2015.01
[Microcontroller]
Preliminary porting of u-boot-2015.01 on tq2440
Latest Microcontroller Articles
  • Download from the Internet--ARM Getting Started Notes
    A brief introduction: From today on, the ARM notebook of the rookie is open, and it can be regarded as a place to store these notes. Why publish it? Maybe you are interested in it. In fact, the reason for these notes is ...
  • Learn ARM development(22)
    Turning off and on interrupts Interrupts are an efficient dialogue mechanism, but sometimes you don't want to interrupt the program while it is running. For example, when you are printing something, the program suddenly interrupts and another ...
  • Learn ARM development(21)
    First, declare the task pointer, because it will be used later. Task pointer volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • Learn ARM development(20)
    With the previous Tick interrupt, the basic task switching conditions are ready. However, this "easterly" is also difficult to understand. Only through continuous practice can we understand it. ...
  • Learn ARM development(19)
    After many days of hard work, I finally got the interrupt working. But in order to allow RTOS to use timer interrupts, what kind of interrupts can be implemented in S3C44B0? There are two methods in S3C44B0. ...
  • Learn ARM development(14)
  • Learn ARM development(15)
  • Learn ARM development(16)
  • Learn ARM development(17)
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号