uboot啓動會從nandflash讀取環境變量,如果讀取失敗,會使用默認環境變量,如上圖是讀取失敗使用默認參數的打印信息。
修改默認參數:
1、搜索using default environment,發現默認環境變量存在全局變量default_environment結構體中(common/env_common.c)
如上圖,想修改哪個默認參數值,只需要要inclu/configs/smdk2440.h定義對應宏即可,如下,
#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3"
#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel;bootm 30000000"
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.1.17
#define CONFIG_SERVERIP 192.168.1.1
#define CONFIG_ETHADDR 00:0c:29:4d:e4:f4
2、裁剪uboot,目前uboot編譯出來的u-boot.bin比較大,需要將不需要的命令刪除。只需要將inclu/configs/smdk2440.h不要的宏去掉即可(如果報錯,可以根據報錯信息進行解決)。
3、設置環境變量在nandflash。
uboot下通過saveenv命令進行將環境變量保存到nandflash,通過搜索saveenv查找需要哪些宏。
我們需要nand進行保存環境變量,由上圖,我用使用的文件是env_nand.c文件。要想將env_nand.c編譯進uboot,需要查看makefile需要什麼宏,如下圖,
我們需要宏CONFIG_ENV_IS_IN_NAND,同時需要去掉CONFIG_ENV_IS_IN_FLASH(norflash相關宏)。
編譯查看結果,查看env_nand.c文件需要哪些宏定義,修改後定義如下
inclu/configs/smdk2440.h:
編譯進行燒錄
啓動後依然會打打印using default environment,因爲我們沒有吧環境變量存到nandflash,執行save命令,重啓後就沒有了。
4、進行nandflash分區。inclu/configs/smdk2440.h:
MTDPARTS_DEFAULT根據uboot大小和環境偏移地址確定。
編譯。
之前燒寫程序命令如下
tftp 30000000 uImage(使用tftp命令前提要tftp服務端,網上可以下載)
nand erase 60000 200000
nand write 30000000 60000 200000
分區後可以使用如下命令進行燒寫程序
tftp 30000000 uImage
nand erase.part kernel
nand write 30000000 kernel
燒寫完成後可以啓動內核。