1、了解uboot: 阅读uboot源码顶层目录下的README.TXT可以提取如下信息: made to support booting of Linux images. //引导内核程序 make <board_name>_defconfig :see boards.cfg for supported names check the file doc/README.scrapyard for a list of no longer supported boards lowlevel_init(): essential init to permit execution to reach board_init_f() //底层硬件相关的初始化,没有global_data 和 BSS board_init_f():set up the machine ready for running board_init_r(): //有global_data,栈位于SRAM,清除bss段 board_init_r(): main execution, common code //有global_data 和 BSS,主要的执行程序,初始化SDRAM和UART 配置选项: 配置文件在"include/configs/<board_name>.h"
一般不要使能icache和dcache(configuration option CONFIG_CMD_CACHE) 单板初始化设置: - CONFIG_BOARD_EARLY_INIT_F: Call board_early_init_f() - CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r() - CONFIG_BOARD_LATE_INIT: Call board_late_init() - CONFIG_BOARD_POSTCLK_INIT: Call board_postclk_init()
修改源代码之后要相应地更新<board>/u-boot.lds* 底层硬件相关的配置: 在Makefile中需要配置CROSS_COMPILE
如果uboot没有支持我们所用的单板: 1.1、在boards.cfg中为你的单板添加新的配置选项,可以使用已经存在的单板作为参考; 1.2、新建一个目录以支持你的单板,单板目录下至少包含Makefilea, <board>.c, flash.c and u-boot.lds; 1.3、为你的单板创建一个新的配置文件include/configs/<board>.h; 1.4、如果你是移植U-Boot到你的CPU, 也创建一个新的目录支持你CPU的特定程序 1.5、运行make <board>_defconfig 1.6、make 1.7、调试并且解决问题
Monitor Commands: 常用的: md - memory display mm - memory modify (auto-incrementing) nm - memory modify (constant address) mw - memory write (fill) nand - NAND memory operations (see doc/README.nand) erase - erase FLASH memory flinfo - print FLASH memory information bdinfo - print Board Info structure iminfo - print header information for application image coninfo - print console devices and informations bootm - boot application image from memory tftpboot- boot image via network using TFTP protocol and env variables "ipaddr" and "serverip" (and eventually "gatewayip") 不常用: cp - memory copy go - start application at address 'addr' run - run commands in an environment variable bootp - boot image via network using BootP/TFTP protocol bootz - boot zImage from memory tftpput - upload a file via network using TFTP protocol rarpboot- boot image via network using RARP/TFTP protocol diskboot- boot from IDE devicebootd - boot default, i.e., run 'bootcmd' loads - load S-Record file over serial line loadb - load binary file over serial line (kermit mode) cmp - memory compare crc32 - checksum calculation i2c - I2C sub-system sspi - SPI utility commands base - print or set address offset printenv- print environment variables setenv - set environment variables saveenv - save environment variables to persistent storage protect - enable or disable FLASH write protection ide - IDE sub-system loop - infinite loop on address range loopw - infinite write loop on address range mtest - simple RAM test icache - enable or disable instruction cache dcache - enable or disable data cache reset - Perform RESET of the CPU echo - echo args to console version - print monitor version help - print online help 环境变量的设置: setenv: 设置环境变量 printenv: 打印环境变量 saveenv: 保存环境变量 设置列表:baudrate、bootdelay、bootcmd、bootargs、bootfile、ipaddr、serverip uImage format:New uImage format (FIT) 、Old uImage format 引导内核会打印内核相关信息: Checking Image at 40100000 ... Image Name: 2.2.13 for initrd on TQM850L Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 335725 Bytes = 327 kB = 0 MB Load Address: 00000000 Entry Point: 0000000c Verifying Checksum ... OK