Linux06Uboot裁减移植.ppt

上传人:sccc 文档编号:5380515 上传时间:2023-07-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裁减移植,课程安排,引导加载程序BootLoaderUboot源码移植与使用Uboot启动过程源码分析,BootLoader概念,PC机系统的引导,Bootloader定义,Bootloader定义,6410启动顺序,嵌入式Linux软件层次,嵌入式Linux软件层次,BootLoader移植,BootLoader移植,BootLoader工作流程,BootLoader工作流程,BootLoader工作流程,常用开源bootloader,课程安排,引导加载程序BootLoaderUboot源码编译与使用Uboot启动过程源码分析,Uboot简介,Uboot源码层次,Uboot创建步骤

2、,Uboot配置过程,1、选择要使用的board配置:make mini6410_nand_config-ram2562、相当于执行: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)在include目录下生

3、成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起始地址等,Uboot编译过程,2、执行编译

4、: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-T$(LDSCRIPT)-Ttext$(TEXT_B

5、ASE)$(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,网络通信功能,串口通信功能,USB通信功能能(2)这些方便开发调试的功能通过控制台命

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

7、)/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_sequence数组中预先定义的初始化函数完成硬件相关初始化(cpu_init、board_init、interrupt_i

8、nit等),检测系统内存(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)、否则,循环读入串口数据并执行相应命令bootcmd命令:(1)nand read.i c0008000 400000 500000;bootm c0008000

9、(2)调用nand read命令从nand的0 x400000地址读出5M内容(内核+根文件系统)到内存0 xc0008000地址(虚拟地址),实际地址为0 x50008000(3)、调用bootm命令先设置内核启动参数,再到0 xc0008000地址启动内核,Uboot命令格式,1、UBOOT中每个命令都通过U_BOOT_CMD宏来定义:U_BOOT_CMD(name,maxargs,rep,cmd,usage,help):include/command.h2、参数意义:(1)、name:命令名,不要用双引号括起来(2)、maxargs:最大参数个数(3)、rep:命令是否可重复,下次敲回车

10、即可再次运行(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、在common目录增加cmd_hello.c2、实现do_hello函数3、为hello命令添加U_BOOT_CMD宏4、在common目录的Makefile添加cmd_he

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

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号