U-BOOT移植过程流水账
1,修改MAKEFILE
增加开发板编译定义
at91sam9260ek_config : unconfig
@./mkconfig $(@:_config=) arm arm926ejs at91sam9260ek NULL at91sam926x
指定编译器
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/eldk-4.1/usr/bin/arm-linux-
2,修改MAKEALL
增加ARM9开发板支持列表
LIST_ARM9="
at91rm9200dk cmc_pu2
at91sam9260ek at91sam9261ek at91sam9263ek
3,includeasm-armmach-types.h的修改
增加CPU型号定义
#define MACH_TYPE_AT91SAM9261EK 848
#define MACH_TYPE_PDNB3 1002
#define MACH_TYPE_AT91SAM9260EK 1099
#define MACH_TYPE_AT91SAM9263EK 1202
4,includeconfigsat91sam9260ek.h
增加开发板定义头文件
at91sam9260ek.h
5,includeasm-armarch-at91sam926xat91sam9260.h
增加CPU的寄存器定义头文件
at91sam9260.h
6,examplesMakefile
修改如此类
ELF = hello_world
编译错误
7,boardat91sam9260ek
增加开发板定义文件夹
at91sam9260ek.c config.mk dm9161a.c Makefile nand.c u-boot.lds
8,cpuarm926ejsat91sam926x
增加CPU核的支持文件夹
config.mk ether.c interrupts.c lcd.c lcd_lut.h Makefile serial.c spi.c u***_ohci.c u***_ohci.h
启动过程
1,cpuarm926ejsstart.S
A,在boardat91sam9260eku-boot.lds 中定义程序入口标志为 ENTRY(_start) TEXT段首文件: cpu/arm926ejs/start.o (.text)
B,在boardat91sam9260ekconfig.mk 中定义程度执行地址为 TEXT_BASE = 0x23f00000
C, _start -> cpu_init_crit -> relocate -> stack_setup -> clear_bss -> start_armboot 先初始化系统,然后进入主循环
D,中断处理
2,lib_armboard.c
start_armboot() 先初始化系统,然后进入主循环
A, *init_sequence[] 初始化列表
cpu_init 在 cpuarm926ejscpu.c
board_init 在 boardat91sam9260ekat91sam9260ek.c
interrupt_init 在cpuarm926ejsat91sam926xinterrupts.c
env_init 在commonenv_dataflash.c 或者 commonenv_nand.c
(includeconfigsat91sam9260ek.h 中CFG_ENV_IS_IN_DATAFLASH CFG_ENV_IS_IN_NAND 决定)
init_baudrate 在lib_armboard.c
serial_init 在cpuarm926ejsat91sam926xserial.c
console_init_f 在commonconsole.c
display_banner 在lib_armboard.c
print_cpuinfo 在cpuarm926ejscpuinfo.c
checkboard 不启用
dram_init 在 boardat91sam9260ekat91sam9260ek.c
display_dram_config 在lib_armboard.c
B,外设初始化配置
flash_init NORFLASH初始化
display_flash_config NORFLASH信息显示
(includeconfigsat91sam9260ek.h 中CFG_NO_FLASH 决定不用)
LCD VFD都不用 includeconfigsat91sam9260ek.h 中CONFIG_VFD CONFIG_LCD 定义不用
mem_malloc_init 初始化malloc空间 在lib_armboard.c
nand_init 在driversnandnand.c
AT91F_DataflashInit 在driversdataflash.c
dataflash_print_info 在driversdataflash.c
env_relocate 在commonenv_common.c
getenv_IPaddr 在netnet.c
getenv 在commoncmd_nvedit.c
devices_init 在commondevices.c
jumptable_init 在commonexports.c
console_init_r 在commonconsole.c
enable_interrupts 在cpuarm926ejsinterrupts.c
board_late_init 在boardat91sam9260ekat91sam9260ek.c
eth_initialize 在neteth.c
C,进入主循环
main_loop 在commonmain.c
3,commonmain.c
A,启动禁用 CONFIG_BOOTCOUNT_LIMIT,CONFIG_MODEM_SUPPORT,VFD_TEST_LOGO,CONFIG_VERSION_VARIABLE,CFG_HUSH_PARSER,
CONFIG_PREBOOT,CONFIG_AUTOBOOT_KEYED,CONFIG_BOOT_RETRY_TIME,CONFIG_MENUKEY,CONFIG_AMIGAONEG3SE,CONFIG_AMIGAONEG3SE
includeconfigsat91sam9260ek.h 中没有定义
B,判断自启动延时
abortboot 在commonmain.c
parse_string_outer 在commonhush.c
C,命令终端for (;;)
禁用 CONFIG_RESET_TO_RETRY CONFIG_AUTO_COMPLETE
在includeconfigsat91sam9260ek.h 中没有定义
readline 在commonmain.c
run_command 在commonmain.c
添加过程
1,修改MAKEFILE
在commonMakefile的 COBJS =
后面目标码协列表中添加新的目标码 cmd_xmodem.o xmodem.o
2,增加源文件
在common中增加源文件
xmodem.c cmd_xmodem.c
3,增加头文件
在include中增加头文件
xmodem.h
4,添加命令过程
A,核心处理函数
int do_xmodem(cmd_tbl_t *cmdtp,int flag,int argc, char *argv[])
B,命令定义模板
U_BOOT_CMD(
rx, 3, 0, do_xmodem,
"rx - load binary file over serial line (xmodem)n",
"[ off ] [ baud ]n"
" - load binary file over serial line"
" with offset 'off' and baudrate 'baud'n"
);
C,命令模板定义
命令结构体
typedef struct cmd_tbl_s cmd_tbl_t
命令模板宏
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
在 includecommand.h
D,XMODEM协议核心
int xmodem_rx(char *dest)
|