本次移植u_boot基于的开发板是FL2440,FL2440不支持Norflash,但开发板上有一块Nandflash芯片,所以在移植u_boot时,我们要基于原u_boot文档将其Norflash改为Nandflash。移植过程中出现了一下问题:
根据红色方框里的内容可以看出错误是:在env_flash,c文件中没有定义"flash_sect_protect","flash_sect_erase","flash_write","flash_perror"这四个函数。
根据文档开始我们已经知道,在移植u_boot的时候我们要将Norflash改为Nandflash,那么env_flash.c是不应该被编译的,所以我们要找到Makefile里有关此文件的操作。
我们打开common下的Makefile发现,可以看出env_flash.c受到CONFIG_ENV_IS_IN_FLASH这个宏的控制,那么我们去掉这个宏,则env_flash.c就不会被编译,也就不会出现上面的问题。
我们打开fl2440.h,可以发现CONFIG_ENV_IS_IN_FLASH在里面被定义:
所以我们要对其进行修改,修改如下:
CONFIG_ENV_IS_IN_FLASH无效之后,则Makefile文件中有关env_flash.c的操作就会失效,那么在编译的时候env_flash.c就不会被编译,也就会避免以上错误。
补充:
还有一种情况也会出现以上错误:如果在修改fl2440.h之前就对其进行过编译的话,系统就会生成一个可以被编译的文件(A),那么在你修改之后,再进行编译的时候,系统还会对A文件进行编译,因为修改fl2440.h并不能改变A文件,所以当修改完fl2440.h文件之后,要对整个u_boot进行 make dietclean 操作,make distclean会把之前make过的临时文件都删掉,然后再执行make fl2440_config 对fl2440.h重新编译,编译后生成的文件就会引导Makefile哪些文件需要编译,哪些文件不需要编译。
完成以上步骤之后,我们再对整个u_boot进行编译,则可生成相对应的".bin"文件,这个文件就是我们最终所需的文件。