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,\include\asm-arm\mach-types.h的修改
增加CPU型号定义
#define MACH_TYPE_AT91SAM9261EK 848
#define MACH_TYPE_PDNB3 1002
#define MACH_TYPE_AT91SAM9260EK 1099
#define MACH_TYPE_AT91SAM9263EK 1202
4,include\configs\at91sam9260ek.h
增加开发板定义头文件
at91sam9260ek.h
5,include\asm-arm\arch-at91sam926x\at91sam9260.h
增加CPU的寄存器定义头文件
at91sam9260.h
6,examples\Makefile
修改如此类
ELF = hello_world
编译错误
7,board\at91sam9260ek\
增加开发板定义文件夹
at91sam9260ek.c config.mk dm9161a.c Makefile nand.c u-boot.lds
8,cpu\arm926ejs\at91sam926x\
增加CPU核的支持文件夹
config.mk ether.c interrupts.c lcd.c lcd_lut.h Makefile serial.c spi.c usb_ohci.c usb_ohci.h
启动过程
1,\cpu\arm926ejs\start.S
A,在\board\at91sam9260ek\u-boot.lds 中定义程序入口标志为 ENTRY(_start) TEXT段首文件: cpu/arm926ejs/start.o (.text)
B,在\board\at91sam9260ek\config.mk 中定义程度执行地址为 TEXT_BASE = 0x23f00000
C, _start -> cpu_init_crit -> relocate -> stack_setup -> clear_bss -> start_armboot 先初始化系统,然后进入主循环
D,中断处理
2,\lib_arm\board.c
start_armboot() 先初始化系统,然后进入主循环
A, *init_sequence[] 初始化列表
cpu_init 在 \cpu\arm926ejs\cpu.c
board_init 在 \board\at91sam9260ek\at91sam9260ek.c
interrupt_init 在\cpu\arm926ejs\at91sam926x\interrupts.c
env_init 在\common\env_dataflash.c 或者 \common\env_nand.c
(include\configs\at91sam9260ek.h 中CFG_ENV_IS_IN_DATAFLASH CFG_ENV_IS_IN_NAND 决定)
init_baudrate 在\lib_arm\board.c
serial_init 在\cpu\arm926ejs\at91sam926x\serial.c
console_init_f 在\common\console.c
display_banner 在\lib_arm\board.c
print_cpuinfo 在\cpu\arm926ejs\cpuinfo.c
checkboard 不启用
dram_init 在 \board\at91sam9260ek\at91sam9260ek.c
display_dram_config 在\lib_arm\board.c
B,外设初始化配置
flash_init NORFLASH初始化
display_flash_config NORFLASH信息显示
(include\configs\at91sam9260ek.h 中CFG_NO_FLASH 决定不用)
LCD VFD都不用 include\configs\at91sam9260ek.h 中CONFIG_VFD CONFIG_LCD 定义不用
mem_malloc_init 初始化malloc空间 在\lib_arm\board.c
nand_init 在\drivers\nand\nand.c
AT91F_DataflashInit 在\drivers\dataflash.c
dataflash_print_info 在\drivers\dataflash.c
env_relocate 在\common\env_common.c
getenv_IPaddr 在\net\net.c
getenv 在\common\cmd_nvedit.c
devices_init 在\common\devices.c
jumptable_init 在\common\exports.c
console_init_r 在\common\console.c
enable_interrupts 在\cpu\arm926ejs\interrupts.c
board_late_init 在\board\at91sam9260ek\at91sam9260ek.c
eth_initialize 在\net\eth.c
C,进入主循环
main_loop 在\common\main.c
3,\common\main.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
include\configs\at91sam9260ek.h 中没有定义
B,判断自启动延时
abortboot 在\common\main.c
parse_string_outer 在\common\hush.c
C,命令终端for (;;)
禁用 CONFIG_RESET_TO_RETRY CONFIG_AUTO_COMPLETE
在include\configs\at91sam9260ek.h 中没有定义
readline 在\common\main.c
run_command 在\common\main.c
添加过程
1,修改MAKEFILE
在\common\Makefile的 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}
在 \include\command.h
D,XMODEM协议核心
int xmodem_rx(char *dest)
离线