一、内核裁剪
内核的裁剪首先就是修改我们的配置文件,即 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");