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. 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) 2. Environment variables
2.1 Modify the partition to nand
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
- Popular Resources
- Popular amplifiers
Professor at Beihang University, dedicated to promoting microcontrollers and embedded systems for over 20 years.
- LED chemical incompatibility test to see which chemicals LEDs can be used with
- Application of ARM9 hardware coprocessor on WinCE embedded motherboard
- What are the key points for selecting rotor flowmeter?
- LM317 high power charger circuit
- A brief analysis of Embest's application and development of embedded medical devices
- Single-phase RC protection circuit
- stm32 PVD programmable voltage monitor
- Introduction and measurement of edge trigger and level trigger of 51 single chip microcomputer
- Improved design of Linux system software shell protection technology
- What to do if the ABB robot protection device stops
- Huawei's Strategic Department Director Gai Gang: The cumulative installed base of open source Euler operating system exceeds 10 million sets
- Download from the Internet--ARM Getting Started Notes
- Learn ARM development(22)
- Learn ARM development(21)
- Learn ARM development(20)
- Learn ARM development(19)
- Learn ARM development(14)
- Learn ARM development(15)
- Analysis of the application of several common contact parts in high-voltage connectors of new energy vehicles
- Wiring harness durability test and contact voltage drop test method
- Can the op amp be powered from a single supply?
- The embodiment of advanced usage of C language in application
- High-performance lossless data compression IP based on LZO
- MSP340F149 card number reading reference routine
- Summary of comprehensive test lists in various regions
- Use CCS to connect to a running C2000 chip
- Answer questions to win prizes | TI Industrial Essentials selection, exquisite content, worth reading!
- A request for help from a newbie
- Wind speed and light irradiance synchronous tester based on MSP430
- Convert gerber file to ad format pcb