uboot移植新手入门实践pdf

所需积分/C币:26 2019-03-11 11:38:48 1.53MB PDF

u-boot移植新手入门实践视频教程中使用的配套pdf文档。
目录 前 1u-boot启动流程分析.… 1.1u-boot启动入口 .1.1u-boot源码 112u-boot链接脚本 1.1.2.1顶层 Makefile 1.1.2.2 mkconfig................ 1.1.2.3 config. mk 1.1.2.41ib 1.1.2.5链接脚本cpu/ arm cortex9/u-boot.lds... 113朋除u-boot文件 12u-boot启动第一阶段(汇编) 21标签 122标签 reset 8 12.3标签 cache init… 124标签 lowlevel init 125标签 mem ctrl asm init:DDR初始化 12.6标签 uart asm init:串口初始化…. 10 127u-boot重定位 1.3 u-boot启动第二阶段(C 12 131函数 start armboot c语言入口 132指针数组 init sequence:初始化和显示信息相关函数为元素 12 133函数 display banner:显示u-boot版本号等 .1 134函数 print cpuinfo:显示CPU配置相关信息一吋钟等.…. 13.5函数 checkboard:显示板子名称 36函数 dram init:DRAM初始化 …14 137函数 display dram config:显示内存大小 14 1.38函数main_loop:命令解析控制台… 15 1.39函数 run command命令解析 13.10执行 bootm命令 bootm命令执行函数 16 1311函数 do bootm linux:传参内核并启动 14小结 翻·着,看翻首1着 2 Samsung u-boot移植 18 21创建itop4412编译配置 18 211 Makefile添加itop4412编译则. 18 212 build uboot sh修改编译脚本 22移植itop4412u-boot 9 221修改显示信息 222适配电源和MMC 19 223DDR3移植 2.2.3.1DDR3初始化 2虚拟地址映射 21 2.2.3.3移植DDR3实践… 22 224eMMC初始化失败: unrecognised EXT_ CSD structure version7 .28 23u-boot启动内核… 9 24小结 31 附录 32 配套视频地址 32 1u-boot启动流程分析 11u-boot启动入口 1.11u-boot源码 u-boot源码可以通过两种路径获取 第·种方式:从u-boot官方网站中下载,但通过这种途径获得的u-boot与我们使用的 板子的适配度可能比较低,因此会增加栘植难度。对于新手不建议以这种u-boot为基础入 手移植;因为以这种u-boot移植,需要对u-boot整体架构和SoC的配置比较熟悉,不然会 觉很难入手。 第二种方式:使用 Samsung针对这款SoC的demo板移楨过的u-bot,可以找开发板 厂家获取。基于这样的u-boot再去移植到我们自己的丌发板,这样就很大的降低了移植难 度,同时也能让我们体验一把移植μ-bσot成功的乐趣。使甪这种u-bσot之所以能降低移植 难度,更适合新手作为入门实践,是由于我们的开发板与demo板使用一样的SOC,或者可 以理解为我们的开发板是基 J- Samsung的demo板做了扩展,因此两者之间存在异同之处, 而我们只需要针对差异之处移植。 在入门篇u-baot移植中,使用的就是 Samsung基于 Exynos54412demo板做过移植的 u-boot。误程的移植源码和资料将共享到github合库((github.com/bugshiyanshi/buglab412) 有需要的同鞋可以通过该仓库获取 112u-boot链接脚本 分析u-boot启动时需要明确从哪里开始分析,也就是说要先确定u-boot的启动入口‘函 数’;如何确定启动入凵‘函数’?在这里需要通过u-bot链接脚本米确定。 根据 Makefile来确定 u-boot的链接脚本 1.1.2.1顶层 Makefile HOSTARCH HOSTARCH: = S(shell uname -m I\ sed-es/86/i386/ es/sun4u/ sparc64八 e s/arm. */arm/\ -e s/sa110/arm/\ -e s/powerpc/ppc -e s/ppcb4/ppc/\ /macppc/ppc/ 定义编译⊥机的架构,‘ sed -e s/86/i386/’将i86替换成 i386 HOSTOS HOSTOS: =$(shell uname -s tr[: upper: ] [ lower: ]'I\ sed-e's (cygwin). /cygwin/) 定义编译主机的操作系统类型 BUILD DIR ifneq(s(BUILD DIR)) saved-output: =S(BUILD DIR) Attempt to create a output directory S(shell [-d S(BUILD DIR]]II mkdir-p S(BUILD DIRS Verify if it was successful BUILD_ DIR: =S(shell cd S(BUILD DIR)&&/ bin/pwd) S(if S(BUILD DIR), S(error output directory"$(saved-output) does not exist) endif ifneq (s(BUILD DIR)) D_DR:编译输出目录 如果“S(BULD_DR)’表示的目录不存在,则创建并且赋值 为当前目录的路径 OBJTREE s(if S(BUILD_DIR),S(BUILD DIR),S(CURDIR) SRCTREE S(CURDIR TOPDIR S(SRCTREE) LNDIR S(OBJTREE export TOPDIR SRCTREE OBJTREE MKCONFIG S(SRCTREEWmkconfi export MKCONFIG ifneq(S(OBJTREE), $(SRCTREE)) obj -S(OBJTREE)/ S(SRCTREE) else src endif OBJTREE:=S(if S(BUILD DIR),S(BUILD DIR),$(CURDIR)): n 果‘S( BUILD DIR)’不为空,则 OBJTREE=S(BULD_DR),否 则 OBJTREE=S(CURD|R) s( CURDIR):为当前路径的目录 s( SRCTREE):源码目录,这里指 u-boot顶层目录 因此,这几个变量最后的值为: OBJTREE =S(BUILD DIR) SRCTREE S(CURDIR TOPDIR S(SRCTREE) 这里S(BULD_DR)= S(CURDIR)=S( SRCTREE)都是为 u-boot的 顶层目录故: Src:= MKCONFIG=/mkconfig include/config. mk i ifeq(s(obj)include/ config. mk, S(wildcardS(obj)include/ config.m 文件存在 环境变量 ARCH include s( objinclude/ config. mk CPU BOARD export ARCH CPU BOARD VENDOR SOC VENDOR SOC包含 include/ config. mk文件,并将全局变量 ARCH CPU BOARD VENDOR SOC设置为环境变量 CROSS_ COMPILE i ifeq(s(arch), arm CROSS COMPILE =arm- none-linux-gnueabi end dif CROSS COMPILE:指定编译器 arm- none-linux-gnueabi-:编译工具的前缀 include/config.mk i include S(TOPDIR)/config. mk 包含 config. mk配置文件 编译生成目标AL+= S(obj)u-boot srec s( (obj)u-boot bin( Lobj)System,map S(U BOOT NAND) S(U BOOT ONENAND S(ALL include/config.|################################################### k文件不存在 else iconfig. mk ll Sobj)u-boot hex s (obj)u-boot srec s(obj)u-boot bin S(obj)u-boot. img S(obj)u-boot dis S(obj)u-boot s(filter-out tools, S(SUBDIRS) S(TIMESTAMP FILE S(VERSION FILE) gdbtools updater env depend dep tags ctags etags cscope S(obj)System. n @echo"System not configured -see README>&2 exit 1 config. mk不存在,停止编译 uncont: confi @rm-f s(obj)include /config. h sobjinclude config mk S(obj)board/*/config. tmp S(obj)board/*/*/config. tmp S(objinclude/autoconf mk S(obj)include/autoconf mk dep ‰:% config S(MAKE :% config:当执行 make xxx config会匹配到此通配符,执 行S(MAKE) S(MAKE): make 配置目标编译参数t4 android config;: unconfig @S(MKCONFIG)S(@: config=)arm arm_cortexa9 smdkc210 samsung s5pc210 S(MKCONFIG)= / mkconfig s@: config=):表示 XXX config并将 config替换为’替换后 s(@: config=)=x表达式即为 tc4 android config nfi /mkconfig tc4 android arm arm cortexa9 smdkc 210 samsung 5pc210 kconfig后面几个参数说明 第一个参数:目标板型号 第二个参数:CPU架构 第三个参数:CPU型号 第四个参数:开发板名称 第五个参数:生成厂家 第六个参数:SOC 1.1.2.2 mkconfig mkconfig echo"ARCH =$2> config. mk echo"CPU =$3 >>config.mk cho"BOARD =$4">> config. mk [$5]&&[S5!="NULL"]&& echo"VENDOR=$5 > config mk [S6]&&["S61=NULL"]&& echo"SoC =$6">>config. mk 根据传递进来的参数来生成 include/ config. mk文件,接着执行make 命令,并最终生成u-boot镜像文件,如果未执行‘ make xxx config 命令,在执行make命令后显示一下错误信息,并停止编译: System not configured- see readme 这是因为找不到 include/ config. mk文件导致的,详情查看 Makefile中 判断 include/ config. mk是否存在部分 1.1.2.3 config. mk 110 i]i sinclude S(OBJTREE)/include/autoconfmk ifdef Arch #t ARCH= arm sinclude $(TOPDIR)/lib_S(ARCH)/config.mk i巳ndif ifdef CPu CPU arm cortexa9 sinclude S(TOPDIR)/cpu/s(CPU)/config. mk endif ifdef 5oc SOC= s5pc210 sinclude S(TOPDIR)/cpu/s(CPU)/S(SoC)/config. mk endif 将ARCH、CPU、SOC替换后的路径为 sinclude lib arm /config. mk sinclude cpu/arm_cortexa9/config. mk include cpu/arm cortexa9/s5pc 210/config. mk 4 1.1.2.4 lib arm/config. mk AEJFiLDSCRIPT: - S(SRCTREE)cpu/s(cPU)/u-boot Ids 行替换S(CPU)=arm_con LDSCRIPT: cpuarm_ cortexa9/u-boot. lds 1.1.2.5链接脚本cpu/ arm cortex9/u-boot.1ds 29行 ENTRY( start) SECTIONS ,=0X00000000 ALIGN(4) text cpu/arm cortexa9/ start o text cpu/arm cortexa9 /55pc210/cpu init. o(text) board/samsung/smdkc210/lowlevel_ init. o (text) common/ace sha1o(text) (text tet:代码段,存放程序代码 data:数据段,存放静态初始化的数据 bss:bss段,存放未初始化和初始化为0的全局变量,并将未初始化全 局变量初始化为0,这也是在C语言中未初始化的全局变量其值为‘0 的原因 根据text段,可以将启动入口定位到cpu/ arm cortexal9/ Istart.o的原 文件中。 b.根据 ENTRY( start),推测出‘ start'所在处为u-boot的入冂 5 113删除u-boot文件 为了能更好进行源码的分析,本课程使用 source insight来阅读源码;由于 u-boot为了 适配尽可能多的CPU架构,导致u-bot中文件众多(例如:i386、ppc、avr32架构),为了能 更快速的定位函数、宏等,需要先删除项日中不需要的文件,具体需要删除的文件: ib*:库文件 开发使用的是arm架构的SOC,保留通用库文件 (ib_ generic和arm架构的库文件(ib_arm) include/asm-*:CPU架构保留CPU架构通用的汇编文件(asm- generic和arm架构 相关的汇编文件 的汇编文件(asm-arm) include/ asm-arm/rch保留SOC是5PC210(ah5210相关的文件 include/configs 保留tc4demo板相关的配置文件(tc4_*.h) … cpu 保留 arm cortex9相关的文件 board/ 保留厂家 Samsun相关的文件 …--- board/samsung 保留 smoke210相关的文件 rm_ nuse file sh:删除无|#/n/bash 关文件脚本 echo"删除"lib*非 arm generIc日录" ls grep 'lib' egrep-v 'arm generic' xargs rm echo"删除 include/sm*非 arm generIc目录" d include Is I grep'asm-'I egrep-V'armI generic xargs rm -rf echo"删除 include/ asm -arm/arch-*非s5pc210目录" d asm-arm Is grep'arch-' grep-v's5pc210'xargs echo"删除 include/ configs/下非tc4*的文件和目录 d./configs Is grep-vtc4' xargs rm -rf o"删除cpu/下非 arm cortex9目录 d/./cpu Is grep ortexa9 xargs rm -rf echo"删除 board/非三星的目录 d/board Is grep-v'samsung'I xargs rm -rf echo"删除/ board/ samsung/非 smoke210日录 samsung Is I grep-v'smdkc210' xargs rm -rf echo rm file finish" 6

...展开详情

评论 下载该资源后可以进行评论 2

Mobile360 正好手上有4412的开发板,下载下来学习一下
2019-05-25
回复
锋之律 资源和视频都不错,希望能看到更多相关视频
2019-04-19
回复
谢谢
img
bug工作室

关注 私信 TA的资源

上传资源赚积分,得勋章
相关内容推荐