一、内核裁剪
内核的裁剪首先就是修改我们的配置文件,即 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,去掉此宏 再次编译执行,编译完成。 烧写进开发板。启动。 环境变量的设置都会存在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"); 二、环境变量
2.1 修改分区为nand