您尚未登录。

楼主 #1 2020-05-09 20:07:10

缥缈九哥
会员
注册时间: 2020-05-09
已发帖子: 76
积分: 92

U-BOOT移植过程流水账--缥缈九哥

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)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn