Linux06Uboot裁减移植.ppt

上传人:本田雅阁 文档编号:3482248 上传时间:2019-09-01 格式:PPT 页数:42 大小:3.09MB
返回 下载 相关 举报
Linux06Uboot裁减移植.ppt_第1页
第1页 / 共42页
Linux06Uboot裁减移植.ppt_第2页
第2页 / 共42页
Linux06Uboot裁减移植.ppt_第3页
第3页 / 共42页
Linux06Uboot裁减移植.ppt_第4页
第4页 / 共42页
Linux06Uboot裁减移植.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《Linux06Uboot裁减移植.ppt》由会员分享,可在线阅读,更多相关《Linux06Uboot裁减移植.ppt(42页珍藏版)》请在三一文库上搜索。

1、Uboot裁减移植,课程安排,引导加载程序BootLoader Uboot源码移植与使用 Uboot启动过程源码分析,BootLoader概念,PC机系统的引导,Bootloader定义,Bootloader定义,6410启动顺序,嵌入式Linux软件层次,嵌入式Linux软件层次,BootLoader移植,BootLoader移植,BootLoader工作流程,BootLoader工作流程,BootLoader工作流程,常用开源bootloader,课程安排,引导加载程序BootLoader Uboot源码编译与使用 Uboot启动过程源码分析,Uboot简介,Uboot源码层次,Uboot

2、创建步骤,Uboot配置过程,1、选择要使用的board配置: make mini6410_nand_config-ram256 2、相当于执行: mkconfig mini6410 arm s3c64xx mini6410 samsung s3c6410 NAND ram256 3、执行mkconfig (1)在include目录下建立开发板相关平台链接文件:asm、asm-arm/arch等 (2)在include目录下生成config.mk定义ARCH(arm)、CPU(s3c64xx)、BOARD(mini6410)、VENDOR(samsung)、SOC(s3c6410) (3)在i

3、nclude目录下生成config.h,引用BOARD(mini6410)特定头文件(configs/mini6410.h),Uboot配置过程,4、Uboot依靠开发板的配置文件configs/board_name.h(如mini6410.h)进行平台相关裁减、配置 5、Uboot还没有类似Linux一样的图形配置界面,如果需要更改平台配置,需要手动更改该文件,配置文件中有两类宏 (1)、选项,前缀为CONFIG_ ,用于选择CPU、开发板类型,设置系统时钟、选择设备驱动等 (2)、参数,前缀为CFG_ ,用于设置malloc缓冲池大小、提示符、下载文件默认加载地址、Flash起始地址等,U

4、boot编译过程,2、执行编译:make (1)引用include/config.mk, 根据其体系结构ARCH执行编译 include $(OBJTREE)/include/config.mk export ARCH CPU BOARD VENDOR SOC ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- (2)引用顶层目录的config.mk,根据配置确定编译器、编译选项 引用开发板相关配置 include $(TOPDIR)/board/$(BOARDDIR)/config.mk 引用开发板相关链接脚本 LDFLAGS += -Bstatic

5、-T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds,演示:创建并烧写Uboot,配置编译开发板使用的uboot.bin 烧写uboot.bin到Nand Flash,BootLoader工作模式,启动模式,下载模式,Uboot主要功能,1、引导功能 (1)、硬件相关初始化:关看门狗、关中断、设置CPU时钟、RAM初始化、设置好栈指针等 (2)、从固体设备(Flash)读出内核,启动内核 2、开发功能 (1)例如:烧写FLASH,网络通信

6、功能,串口通信功能,USB通信功能能 (2)这些方便开发调试的功能通过控制台命令实现,Uboot常用命令,开发板信息命令,环境变量相关命令,环境变量相关命令,文件下载命令,在host主机配置NFS服务器 将host主机IP地址设置为serverip(192.168.1.88),执行程序命令,执行程序命令,课程安排,引导加载程序BootLoader Uboot源码编译与使用 Uboot启动过程源码分析,Uboot的两个阶段,第一阶段主要功能: (1)、硬件设备初始化 (2)、为加载第二阶段代码准备RAM空间 (3)、复制第二阶段代码到RAM空间中 (4)、设置好栈 (5)、跳转到第二阶段代码的C

7、入口点 第一阶段主要源码 (1)、由Uboot编译命令可知,Uboot入口代码为cpu/$(CPU)/start.S,对于S3C6410则为cpu/s3c64xx/start.S (2)、start.S入口为异常中断向量表,reset内执行完硬件相关初始化,并设置好栈后,跳转到C函数start_armboot,Uboot的两个阶段,第二阶段主要功能: (1)、初始化本阶段要使用的硬件设备 (2)、检测系统内存 (3)、将内核映像和根文件系统从FLASH读到RAM空间 (4)、为内核设置启动参数 (5)、调用内核 第二阶段主要源码 (1)、执行lib_arm/board.c的init_seque

8、nce数组中预先定义的初始化 函数完成硬件相关初始化(cpu_init、board_init、interrupt_init等), 检测系统内存(dram_init) (2)、lib_arm/board.c的start_armboart函数后续调用的初始化函数执行FLASH、网络等初始化(nand_init、env_relocate、eth_set_mac),Uboot的两个阶段,(3)、进入控制台命令循环main_loop (4)、如果设置了环境参数bootdelay和bootcmd,并且在bootdelay秒内 有串口输入,则执行bootcmd命令 (5)、否则,循环读入串口数据并执行相应命

9、令 bootcmd命令: (1)nand read.i c0008000 400000 500000;bootm c0008000 (2)调用nand read命令从nand的0x400000地址读出5M内容(内核+根文件系统)到内存0xc0008000地址(虚拟地址),实际地址为0x50008000 (3)、调用bootm命令先设置内核启动参数,再到0xc0008000地址启动内核,Uboot命令格式,1、UBOOT中每个命令都通过U_BOOT_CMD宏来定义: U_BOOT_CMD(name,maxargs,rep,cmd,usage,help):include/command.h 2、参

10、数意义: (1)、name:命令名,不要用双引号括起来 (2)、maxargs:最大参数个数 (3)、rep:命令是否可重复,下次敲回车即可再次运行 (4)、cmd:对应的命令函数 (5)、usage:简短帮助 (6)、详细帮助 3、对于每一个U_BOOT_CMD命令,其实都是在.u_boot_cmd段中定义一个cmd_tbl_t结构,见链接脚本u_boot.lds _u_boot_cmd_start = .; .u_boot_cmd : *(.u_boot_cmd) _u_boot_cmd_end = .;,演示:Uboot命令实现,在Uboot中增加一个hello测试命令: 1、在comm

11、on目录增加cmd_hello.c 2、实现do_hello函数 3、为hello命令添加U_BOOT_CMD宏 4、在common目录的Makefile添加cmd_hello.c文件编译 5、编译新uboot.bin,验证hello命令,内核启动,1、Uboot通过标记列表(tagged list)向内核传递参数,见lib_arm/armlinux.c setup_start_tag setup_memory_tags setup_commandline_tag setup_end_tag 2、do_bootm_linux函数设置标记列表(在内存启始地址+0x100处),最后通过theKernel (0, bd-bi_arch_number, bd-bi_boot_params)启动内核 3、 theKernel 指向存放内核的启始内存地址(0x50008000),bi_arch_number为board_init函数设置的机器类型ID(2520),而bi_boot_params存放标记列表的开始地址(0x50000100),演示:Uboot内核,1、printenv显示uboot环境变量 2、拷贝bootcmd变量内容 3、在uboot控制台执行bootcmd变量内容 4、观察uboot启动内核过程,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1