+ w9 ?! u* B7 f1 t4 H( E- J6 P 6.你会发现这里什么都没有做,只有 printf("Unknown boot device\n"); \7 e, I2 w5 {1 {# i ( u3 o: Y$ p- M3 \
7.那我们就添加保存的函数,函数哪里来,就在前面,saveenv_movinand(),这个就是我们需要的函数 * @0 z& Z, d: S- R+ A8 g5 u - Y+ |6 B; s/ [5 C 8.你以为这就完了,不存在的,进去看看它做了什么0 k. B1 }7 |( R" p6 q) B
; J, b( {/ L# ]" M; B 9. mmc_init(find_mmc_device(0));检查mmc设备是否存在 $ C; l* ]/ ?% r. m movi_write_env(virt_to_phys((ulong)env_ptr));把要保存的环境变量写进去,没毛病,这是我们想要的,可是这函数里面有个致命的错误: d4 C4 R) h P4 {( ^
8 e& E, k8 x7 l$ f% ^9 @# h 10.movi_write(raw_area_control.image[2].start_blk, 4 U. a2 @4 t, a7 H1 A0 A4 d raw_area_control.image[2].used_blk, addr);我们源码中把要保存的环境变量保存到raw_area_control.image[2]中,但实际上uboot的分区是! y# d5 y0 a; L+ D: ~ `
raw_area_control.image[3]保存的才是环境变量6 w4 i9 `9 P( ?) c, u
. J% b; Q6 w! \1 ^ 11.在哪看分区信息?init_raw_area_table()函数中,可以直接由raw_area_control的定义间接找到3 z9 S4 ^/ q) m5 Q
/ H; e: m/ U2 i& z- j% T# ]3 h b& t
12.把raw_area_control.image[2]改成raw_area_control.image[3],大功告成。