uboot
groundhappy
这个作者很懒,什么都没留下…
展开
-
uboot初步学习
文中使用树莓派的uboot说明。bootloader是系统起来以后执行的起点。比如arm cpu从地址为0的地址开始执行执行。一般地址为0的位置映射了rom .我们把bootloader放到这里。加电以后就从bootloader的第一句代码执行开始,假定我们的bootload是ubootuboot 最初编译初来的时候是一个elf文件名字就叫uboot。CPU从0开始执行原创 2016-09-04 14:27:50 · 494 阅读 · 0 评论 -
uboot调试和符号
用gdb第一阶段调试的时候,符号应该没有任何问题。但是由于uboot将自己拷贝到RAM里面去。随后跳转到RAM执行。所以debug的时候符号就失效了。比如初始的地址是abc。拷贝后的地址是1000abc。随后跳转到0x1000xxx的地址执行了,而你的break do_mem_md,依然在原来的abc。这样就无法中断下来。为了解决这个问题。要重新加载符号表。总的ub原创 2016-10-17 13:56:49 · 2101 阅读 · 0 评论 -
uboot的.boards.depend和make rpi_b
http://chxxxyg.blog.163.com/http://chxxxyg.blog.163.com/u-boot实现原理完全分析当我们uboot执行make rpi_b的时候。根本没有发现makefile里面没有rpi_b这个目标那么rpi_b这个目标是哪里来的呢?原来makefile中有这么一句:sinclude $(obj).boar原创 2016-10-08 14:39:28 · 1465 阅读 · 0 评论 -
uboot中的mmu和cache开启(基本协处理器操作)
在第二个阶段的board_r的initr_caches中static int initr_caches(void){/* Enable caches */enable_caches();return 0;}enable_caches在arm/cpu/arm11当中void enable_caches(void){icache_enable();d原创 2016-11-02 08:56:59 · 5943 阅读 · 0 评论 -
jlink下载文件配合uboot 的 fatwrite fatload传输文件
调试kernel的时候。我先通过启动uboot随后使用fatload命令从sd卡中加载kernel.然后使用bootz跳转到kernel入口点执行。比如fatload mmc 0:1 0x800000 kernel.img表示从mmc 0 的第1个分区加载kernel.img到地址 0x800000然后bootz 0x800000 表示跳转到0x800000启动内核原创 2016-11-20 18:11:45 · 2282 阅读 · 0 评论 -
树莓派uboot的串口初始化(uboot驱动结构 2通用解析)
先上一张看不清的图片 具体的下载资源里面的看 用dia看蓝色的部分是我们定义的部分更加详细的部分看 http://blog.csdn.net/groundhappy/article/details/53256086这里说通用的部分uboot在初始化的时候会调用initf_dm->dm_init_and_scan->dm_scan_pl原创 2017-01-14 17:16:53 · 1360 阅读 · 0 评论 -
mmu以及页表 UBOOT(1)
mmu的主要作用就是实现进程隔离主要功能是1 虚拟地址到物理地址的转换访问某个进程1的虚拟地址A。mmu转换为物理地址B访问。访问某个进程2的虚拟地址A。mmu转换为物理地址C的访问。保证不同空间上的同一个虚拟地址访问映射到不同的物理内存。2 内存权限控制的实现在页表项中将某些不需要的bit项变成访问控制位,控制内存的访问。在ARM中使用CP15协处原创 2017-02-06 15:21:08 · 2412 阅读 · 0 评论 -
mmu以及页表 linuxkernel(2)
对于mmu的作用,参看第一篇的介绍这里讲linux kenel的mmu和页表linux有两次页表处理第一次是在arch/arm/kernel/head.s里面第二次是是在start_kernel以后还有其他的一些io地址映射第一次在arch/arm/kernel/head.s/* * Setup the initial page tables.原创 2017-02-06 18:34:10 · 2073 阅读 · 0 评论 -
uboot到kernel启动需要注意的内存
kernel的加载地址通常在0x8000,一般利用0x4000-0x8000作为页表。主要就是(atag或者dtb)的内存不要和uboot和kernel的空间重叠。所以要注意几个内存搬移1uboot将自己拷贝到ram中的内存搬移2kernel uncompress阶段判断解压后的地址空间和当前img是否重叠,如果重叠会进行一次搬移。3uncomp原创 2017-02-09 15:34:28 · 2930 阅读 · 0 评论 -
uboot的两种command执行方式
主要是uboot进入了void cli_loop(void){#ifdef CONFIG_SYS_HUSH_PARSER parse_file_outer(); /* This point is never reached */ for (;;);#else cli_simple_loop();#endif /*CONFIG_SYS_HUSH_PARSER*/}这里进入了原创 2017-02-20 14:56:37 · 3279 阅读 · 0 评论 -
uboot的autoconf.mk 以及mk.dep的产生
在执行make xxx的时候会自动产生 autoconf.mk和autoconf.mk.dep看看这两个文件如何产生,有什么作用autoconf.mk里面全部是配置。CONFIG_CMD_CRC32=yCONFIG_SYS_LONGHELP=yCONFIG_SYS_LOAD_ADDR=0x1000000CONFIG_SYS_CPU="arm1176" 等等aut原创 2016-09-30 14:26:40 · 4012 阅读 · 0 评论 -
uboot makefile里面的两个all:作用(伪目标,空命令)
uboot的makefile里面有两个all:第一个all:没有依赖,也没有命令。后面接的是两条includesinclude $(obj)include/autoconf.mk.depsinclude $(obj)include/autoconf.mk另外一个 all: $(ALL-y) $(SUBDIR_EXAMPLES)这个all才是我们真正需要执原创 2016-09-30 10:55:09 · 5442 阅读 · 2 评论 -
最新uboot的Kbuild系统 5 make构建Uboot obj的产生和构建
前面可以看到 rpi的编译主要是由arch/arm/cpu/arm1176/start.o xxx/built-in.oarch/arm/lib/eabi_compat.oarch/arm/lib/lib.a这些文件构成的。u-boot:$(u-boot-init)$(u-boot-main)先看 $(u-boot-init)u-boot原创 2016-10-12 13:43:31 · 1291 阅读 · 0 评论 -
uboot的makefile过程
这里使用的是树莓派的来做解析 https://github.com/gonzoua/u-boot-pi使用的命令是make ARCH=arm CROSS_COMPILE=/xx/xxx/xx/arm-linux-gnueabihf- rpi_b开始编译## (C) Copyright 2000-2012# Wolfgang Denk, DENX Software Enginee原创 2016-10-08 15:04:19 · 1948 阅读 · 0 评论 -
最新uboot的Kbuild系统 1
linux kernel和最新的uboot都采用了kbuild来实现构建。所以有必要了解一下KBuild基础知识。KBuild是基于gnu make 实现的一个内核构建系统,也就是对于gnu make的扩展,将公共的一些部分提取到scripts/makefile.build中,一些使用的函数提取到scripts/makefile.lib中。通过在顶层的makefile中in原创 2016-10-09 14:10:01 · 2505 阅读 · 1 评论 -
最新uboot的Kbuild系统 3 .config的生成
前面的工作产生了一个conf关键点是由conf产生.config的过程最后是通过执行scripts/kconfig/conf --defconfig=arch/../configs/rpi_defconfig Kconfig 生成的Kconfig包含了当前目录中可以进行的一些配置信息。rpi_defconfig包含了默认的配置信息。conf根据rpi_defc原创 2016-10-10 11:06:46 · 2546 阅读 · 1 评论 -
最新uboot的Kbuild系统 2 make rpi_defconfig
查看 make rpi_defconfig 的执行过程匹配顶层Makefile中%config: scripts_basic outputmakefile FORCE$(Q)$(MAKE) $(build)=scripts/kconfig $@依赖于 scripts_basic outputmakefile。再展开后面命令为 ($(build)在include scrip原创 2016-10-10 09:41:03 · 1106 阅读 · 0 评论 -
rpi uboot 2016的关键跳转点
VERSION = 2016PATCHLEVEL = 11SUBLEVEL =EXTRAVERSION = -rc1NAME =1最开始的启动部分第一句代码从start.S移动到了vector.S。arm/lib/vector.S line 48_start:b reset直接跳到了cpu/arm1176/start.S顺序执行到line原创 2016-10-21 12:08:33 · 659 阅读 · 0 评论 -
最新uboot的Kbuild系统 4 make构建Uboot简略流程
前面第三章生成了.config,实际上还是不清楚细节上如何移植,不同的板子怎样设计.confg文件。我们只是知道在.config里面 配置了很多CONFIG_XXX以及各种变量。实际上先了解makefile构建uboot的整个流程。我们才能最终知道构建Uboot编译了哪些文件。然后先编译一个rpi再编译几个其他板子,查看他们哪些编译是通用的。哪些编译是不通用的就知道移植一块板子原创 2016-10-10 14:57:41 · 1612 阅读 · 0 评论 -
uboot的make config操作
一种是在boards.cfg里面配置另外一种是直接写到makefile里面在boards.cfg里面配置1 在boards.cfg里面配置新的开发板的数据。主要有# Target ARCH CPU Board name Vendor SoC Opt原创 2016-09-26 17:47:56 · 1999 阅读 · 0 评论 -
最新uboot的Kbuild系统 6 简单比较不同板子
这里用rpi和rockchip的比较一下编译的时候将一些数据打印出来在makefile.build中添加 saveobjy将进入每个目录构建的.o文件打印出来objf=objdetailsaveobjy=\ @if [ ! -d "$(objf)/$(obj)" ];then \ mkdir -p $(objf)/$(obj);\ fi; \ echo $(obj-y) >$原创 2016-10-13 16:05:51 · 834 阅读 · 0 评论 -
树莓派uboot的串口初始化(uboot驱动结构 1主要流程)
在board_f.c的顺序初始化中有serial_init函数。该函数位于/drivers/serial/serial-uclass.c当中int serial_init(void){serial_find_console_or_panic();gd->flags |= GD_FLG_SERIAL_READY;return 0;}主要是调用serial_fi原创 2016-11-23 16:36:44 · 3290 阅读 · 0 评论