u-boot
文章平均质量分 72
以九鼎x210开发板为学习工具进行u-boot代码研读,虚拟机中安装Ubuntu20.04,直接使用root用户登录以避免烦人的权限问题。
贱贱的剑
计算机专业硕士研究生、操作系统与Linux内核开发,应用开发,喜欢研究Linux系统的各种疑难杂症。。。
展开
-
u-boot之start_armboot分析(三)
略过没有定义的部分CFG_NO_FLASH(NandFlash和NorFlash都是Flash,但是一般NandFlash会简称为Nand而不是Flash,一般讲Flash都是指的NorFlash。这里这里的代码是NorFlash相关的),我们硬件中并没有。CONFIG_VFDCONFIG_LCDmem_malloc_initstatic void mem_malloc_init (ulong dest_addr){ mem_malloc_start = dest_addr; m.原创 2022-03-08 21:46:29 · 173 阅读 · 0 评论 -
u-boot之start_armboot分析(二)
本篇主要分析init_sequence里的初始化函数board_initint board_init(void){ DECLARE_GLOBAL_DATA_PTR;#ifdef CONFIG_DRIVER_SMC911X smc9115_pre_init();#endif#ifdef CONFIG_DRIVER_DM9000 dm9000_pre_init();#endif gd->bd->bi_arch_number = MACH_TYPE; gd->.原创 2022-02-27 00:23:42 · 228 阅读 · 0 评论 -
u-boot之start_armboot分析(一)
略过所有没有定义的宏定义这是uboot第二阶段的入口函数函数位于lib_arm/board.c中DECLARE_GLOBAL_DATA_PTR#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")定义了一个要放到寄存器r8中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针。gd_t在include/asm-arm/global_data.h中定义,内容如下typedef str.原创 2022-02-26 23:33:25 · 296 阅读 · 0 评论 -
u-boot之start.S分析(四)
接下来紧挨着u-boot之start.S分析(三)最后的代码分析再次设置栈skip_hw_init: /* Set up the stack */stack_setup:#if defined(CONFIG_MEMORY_UPPER_CODE) ldr sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0x1000)#else ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot .原创 2022-02-26 20:27:39 · 575 阅读 · 0 评论 -
u-boot之内存地址映射
总结本篇主要分析内存地址映射ARM的段式映射中长度为1MB,那我们整个4G范围内需要4G/1MB=4096个映射单元代码1. 内存地址映射1.macro FL_SECTION_ENTRY base,ap,d,c,b .word (\base << 20) | (\ap << 10) | \ (\d << 5) | (1<<4) | (\c << 3) | (\b << 2) | (1<<.原创 2022-02-26 15:31:05 · 1381 阅读 · 0 评论 -
u-boot之start.S分析(三)
重新设置栈/* get ready to call C functions */ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */sub sp, sp, #12mov fp, #0 /* no previous frame, so fp=0 */在u-boot之start.S分析(一)的最后一部分我们已经设置了栈地址,但是只有不到8K的大小,这显然是不够的。由于当时我们并没有初始化DDR,所以只能将栈设置到不需要初始化的内部IRA.原创 2022-02-26 12:23:15 · 332 阅读 · 0 评论 -
u-boot之start.S分析(二)
这节继续前文分析lowlevel_init函数。那么这个函数究竟在哪里呢?让我们再看一眼前面定义的链接器脚本中的.text段。.text: { cpu/s5pc11x/start.o (.text) cpu/s5pc11x/s5pc110/cpu_init.o (.text) board/samsung/x210/lowlevel_init.o (.text) cpu/s5pc11x/onenand_c原创 2021-06-14 13:24:14 · 202 阅读 · 0 评论 -
u-boot之start.S分析(一)
在C语言中,我们只需要找到main函数就找到了程序的入口函数,但是在u-boot初始运行之时,并没有操作系统为我们初始化堆栈,所以它的入口函数是汇编代码。 我们之前在链接脚本中的代码(.text)段定义了u-boot的启动文件顺序,因此第一个运行的函数必是cpu/s5pc11x/start.o所对应的源文件,而且入口函数是ENTRY(_start)对应的_start原创 2021-06-03 09:20:45 · 503 阅读 · 0 评论 -
u-boot之链接脚本
一、链接地址与运行地址链接地址: 链接时指定的地址。运行地址: 程序运行时的实际地址。链接地址在Makefile中用-Ttext来指定(例如-Ttext 0x0f),运行地址由实际运行时加载的内存地址决定。如果运行地址必须设置为链接地址,这就叫位置有关码,否则称为位置无关码。二、程序段的概念段包括代码段,数据段,bss段(ZI段)和自定义段。段就是程序的一部分,我们把整个程序分成了一个一个段,给每个段起个名字,然后在链接时就可以用这个名字来指示这些段。也就是说给段命名就是为了在链接脚本中用段名原创 2021-06-03 01:17:17 · 472 阅读 · 0 评论 -
u-boot之顶层Makefile分析(三)
在u-boot之顶层Makefile分析(二)中分析了config.mk的生成过程,接着继续分析顶层Makefile导出config.mk为环境变量# load ARCH, BOARD, and CPU configurationinclude $(obj)include/config.mkexport ARCH CPU BOARD VENDOR SOC将include/config.mk文件加载进来并将其内部的五个变量导出为环境变量设置交叉编译工具链ifndef CROSS_C原创 2021-06-03 00:21:37 · 334 阅读 · 0 评论 -
u-boot之顶层Makefile分析(二)之config.mk文件的生成
在u-boot之顶层Makefile分析(一)一文中我们发现没有include/config.mk文件。在uboot环境搭建与编译一文中,只使用了make x210_sd_config和make两个命令 (make -j4是多线程运行make)。 因此可知缺失的文件只可能是在执行make x210_sd_config之时生成的。接下来探寻config.mk文件的生成过程寻找目标在顶层Makefile中搜索x210_sd_config,可以看到下面几行信息。x210_sd_config : .原创 2021-06-02 20:35:18 · 1250 阅读 · 0 评论 -
u-boot之顶层Makefile分析(一)
顶层Makefile差不多3200,只分析我们需要的流程,即前面已经用过的make x210_sd_config和make两个命令 (make -j4是多线程运行make)。u-boot版本以及环境变量VERSION = 1PATCHLEVEL = 3SUBLEVEL = 4EXTRAVERSION =U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE = $(obj)includ原创 2021-06-02 19:46:39 · 369 阅读 · 0 评论 -
使用vscode搭建u-boot开发环境
上节将dsp解压到了虚拟机的Ubuntu中,那么我们这里使用vscode进行dsp中的uboot源码远程查看。一、配置Ubuntu使用命令apt-get install openssh-server安装openssh服务器。打开/etc/ssh/sshd_config文件,将PermitRootLogin的值改为yes,并取消注释,如下使用命令/etc/init.d/ssh restart重启ssh服务二、配置vscode在vscode端安装remote-ssh插件,点击“+”原创 2021-06-01 22:51:15 · 943 阅读 · 2 评论 -
uboot环境搭建与编译
一、安装编译环境这里假设虚拟机已经安装完成,现在我们将DSP中自带的交叉编译工具链arm-2009q3.tar.gz使用下列命令进行解压缩并配置环境变量。tar -zxvp -f arm-2009q3.tar.gz -C /opt它是将工具链安装到/opt目录下,然后使用命令apt-get install libc6-i386安装交叉编译工具链所需要的32位底层库,否则交叉编译器无法使用使用下面命令打开当前用户下的bashrc文件vi ~/.bashrc然后在文件的最后添加P原创 2021-06-01 21:42:23 · 765 阅读 · 0 评论