U-Boot

U-BOOT的移植与分析(第一阶段配置过程)(1)

早过忘川 提交于 2020-03-07 19:17:09
U-BOOT配置   补丁文件中修改代码的表示方法:(1)“---” 表示是 原来代码 (2)“+++”表示修改后的代码 补丁要补的位置 diff -urN u-boot-1.1.6/board/100ask24x0/100ask24x0.c u-boot-1.1.6_jz2440/board/100ask24x0/100ask24x0.c --- u-boot-1.1.6/board/100ask24x0/100ask24x0.c 1970-01-01 07:00:00.000000000 +0700 +++ u-boot-1.1.6_jz2440/board/100ask24x0/100ask24x0.c 2010-11-26 12:54:37.034090906 +0800 @@ -0,0 +1,96 @@ “-”表示没有修改过的代码;“+”表示修改后的代码 原来的代码是从第0行开始共有0行(补丁产生新文件)修改过的代码从第1行开始向下共有96行。 补丁的详细过程 解压U-BOOT文件 tar xjif u-boot-1.1.6.tar.bz2 打补丁 打补丁时一般 已经是进到“u-boot-1.1.6”这个目录下,所以 patch时便忽略去目录“u-boot-1.1.6”。用到参数 -p1 。是指忽略去第一 个“/”。 启动内核 1.先配置 make xx_config:在

How to test the return of a command in U-Boot CLI

只谈情不闲聊 提交于 2020-03-05 05:09:25
问题 I would like to use the return of the command 'gpio input' in an if statement in U-Boot but it doesn't seem to work. So I've tried something like : if test {gpio status 50} -eq 1; then echo 1; else echo 0; fi; But it always return 1 whether the GPIO is high or low. I also tried to store the result of the gpio status command into a variable by using the setenv command but it doesn't work either. PS: I've modified the gpio.c file in the U-boot source code so the command returns just '0' or '1'

常用u-boot命令详解(全) .

三世轮回 提交于 2020-02-29 04:10:54
U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持 “Tab”键的命令补全和命令的历史记录功能 。而且如果你输入的命令的前几个字符和别的命令不重复,那么你就只需要打这几个字符即可,比如我想看这个U-boot的版本号,命令就是“ version”,但是在所有的命令中没有其他任何一个的命令是由“v”开头的,所以只需要输入“v”即可。 [ u - boot@MINI2440 ] # version U - Boot 2009 . 11 ( 4月 04 2010 - 12 : 09 : 25 ) [ u - boot@MINI2440 ] # v U - Boot 2009 . 11 ( 4月 04 2010 - 12 : 09 : 25 ) [ u - boot@MINI2440 ] # base Base Address : 0x00000000 [ u - boot@MINI2440 ] # ba Base Address : 0x00000000 由于U-boot支持的命令实在太多,一个一个细讲不现实,也没有必要。所以下面我挑一些烧写和引导常用命令介绍一下,其他的命令大家就举一反三,或者“help”吧! (1)获取帮助 命令:help 或 ? 功能:查看当前U-boot版本中支持的所有命令。 [ u - boot@MINI2440 ]

U-boot中SPL功能和源码流程分析

我的梦境 提交于 2020-02-27 09:32:32
   在U-boot目录下,有个比较重要的目录就是SPL的,SPL到底是什么呢?为什么要用它呢?    SPL(Secondary programloader)是uboot第一阶段执行的代码。主要负责搬移uboot第二阶段的代码到 系统内存(System Ram,也叫片外内存)中运行。 SPL是由固化在芯片内部的ROM引导的。我们知道很多芯 片厂商固化的ROM支持从nandflash、SDCARD等外部介质启动。所谓启动,就是从这些外部介质中搬移一段 固定大小(4K/8K/16K等)的代码到内部RAM中运行。这里搬移的就是SPL。在最新版本的uboot中,可以看到 SPL也支持nandflash,SDCARD等多种启动方式。当SPL本身被搬移到内部RAM中运行时,它会从nandflash、 SDCARD等外部介质中搬移uboot第二阶段的代码到系统内存中。     SPL复用的是uboot里面的代码.    SPL的主要功能就是衔接系统的硬件SRAM和u-boot之间的纽带。 1.BasicArm Initialization 2.UART console initialization 3.Clocks and DPLL Locking(minimal) 4.SDRAM initialization 5.Mux(minimal) 6.Boot Device

第1阶段——u-boot分析之make 100ask24x0_config指令(1)

僤鯓⒐⒋嵵緔 提交于 2020-02-27 09:31:09
本文学习目标: 掌握"make 100ask24x0_config"指令在Makefile和mkconfig文件中是怎么实现配置芯片选型 1.执行make 100ask24x0_config用来配置芯片选型,它执行以下一段,该段在Makefile中定义。 首先打开u-boot-1.1.6/Makefile文件: 87 SRCTREE := $(CURDIR) *CURDIR是make的内嵌变量, 为当前目录 92 MKCONFIG := $(SRCTREE)/mkconfig 1886 100ask24x0_config : unconfig 1887 @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0 在第82行中,$(SRCTREE)等于$(CURDIR),也就是当前目录u-boot-1.1.6_OpenJTAG,所以MKCONFIG=./mkconfig 在第1886~1887行中,$(@:_config=)的结果就是将 “100ask24x0_config” 中的 “_config” 去掉, 结果为 “100ask24x0” 。 实际执行: mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0 $0 $1 $2 $3 $4 $5 $6 2.打开

答网友问:嵌入式Linux执行程序提示Not found的解答

若如初见. 提交于 2020-02-26 18:06:05
某日,网友不会飞的骆驼问了我一个问题。在嵌入式Linux系统中执行./a.out时,提示找不到,信息如下: $ ./a.out -sh: ./a.out: not found 1 2 找了点资料,帮解决了。 问题重现 我在板子上重现了问题。的确如上所述。 使用file命令查看a.out属性,信息如下: file ./a.out ./a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=89b9b01541d4f84bfba73ce649cdd2982bb3840e, stripped 1 2 从信息上看,a.out是32位ARM系统程序,动态链接,解析器为/lib/ld-linux-armhf.so.3。但是,在板子上查看该文件: $ ls /lib/ld-linux* /lib/ld-linux.so.3 1 2 可以看到只有ld-linux.so.3,找不到前面提到的ld-linux-armhf.so.3,所以执行程序时提示not found。 造成这个问题的原因是:板子上的系统所用的链接器版本

Openwrt1806在全志H3上移植(银杏icore5)

会有一股神秘感。 提交于 2020-02-26 03:51:10
写在前边 H3有很多开发板可以参考,主要有nanopi、orangepi等,这些开发板上大部分支持debian的系统,本着学习的目的,想运行一把openwrt。Openwrt18.06已经对全志的很多板子做了支持,这里主要参考了nanopi-m1-plus. openwrt开发环境配置及原理 下载openwrt,可以通过github拉取最新代码,网速比较慢也可以下载压缩包后再解压,最新已经有19.07,不过我这里用的是18.06。 git clone https://github.com/openwrt/openwrt.git (github直接下载) https://github.com/openwrt/openwrt (或者从网站下载压缩包) Linux系统,我用的是虚拟机安装ubuntu18.04LTS,4G内存+100GB硬盘,小了不够用。 参考openwrt readme应该更新一下源和软件包 /scripts/feeds update -a ./scripts/feeds install -a 有时候会出错,我这里一般是网络问题,速度太不给力,可以直接点击链接,用迅雷一类的工具下载会快一些。还有一种情况不是网络问题,类似依赖一类的问题,Openwrt邮箱列表有人提到再执行一遍这两条命令可解决,中间遇到过一次,果然如此。 4. 如果使用的是openwrt支持的板子

基于tiny4412的u-boot移植(一)

核能气质少年 提交于 2020-02-08 13:44:05
作者信息 作者:彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 平台介绍 开发环境:win7 64位 + VM ware11 + Ubuntu14.04 64位 开发板:tiny4412ADK + S700 + 4GB eMMC + 1G DDR3 工具链:友善之臂提供的 arm-linux- (gcc version 4.5.1) 要移植的u-boot版本:u-boot-2015-10 参考u-boot版本:友善之臂提供的 u-boot-2010-12 摘要 本博文简要分析了移植u-boot-2015-12到tiny4412,采用的是spl的启动方式,目前可以做到的是进入u-boot的命令终端,如下图: 而且仅仅支持从SD卡启动,以后会慢慢完善。 移植 要移植u-boot到tiny4412,首先我们需要对这块板子的 启动方式 、 地址空间 分配有清楚的认识。此外,由于刚开始只需要做到进入u-boot的命令行(如上图),其中至少涉及到了 系统时钟初始化 、 内存初始化 以及 串口初始化 ,做到这三点,就为以后的各种工作铺平了道路。 下面是一些参考资料: 技术部落 (这个网站对tiny4412的启动、时钟、串口以及内存初始化进行了详细的讲解) 嵌入式Linux系统开发完全手册_基于4412_上册.pdf (这个文档是韦东山写的,讲的也非常好)

RK3228H系统启动流程(一)UBOOT配置启动分析

此生再无相见时 提交于 2020-02-06 19:59:21
一、引言 本文整体介绍RK所提供的SDK中,系统整体的启动流程,包含以下三部分 1、boot启动,即MiniLoaderAll.bin和uboot.img启动 2、linux内核启动,即kernel.img的启动 3、android系统的启动,即ramdisk.img、system.img的启动。 本文先来介绍第一部分 二、U-boot配置(详细过程可看我上一篇文章) 1、工具链配置: Rockchip U-Boot 默认使用 Google Android 系统提供的 GCC ToolChain,在 “U-BOOT/Makefile” 中指定 2、平台配置 平台配置文件位于"U-Boot/configs"目录下 (为rk322xh_box_defconfig) 其中Rockchip相关的以RK开头,并根据产品形态分为 MID 和 BOX 两种配置,Rockchip 芯片平台的配置 主要是芯片类型,Rockchip 一些 Kconfig 的关键配置,采用savedefconfig 模式保存。该选项内的配置会被优先编译成宏定义并在相关的项前面自动添加 CONFIG_,可以在U-BOOT 自动生成的配置文(include/config.h)中看到生成的宏定义,会优先系统的配置文件,可以支配系统的配置文件。 3、系统配置 位于 U-Boot 根目录下的 include\configs

u-boot简单学习笔记(三)——AR9331 uboot启动分析

混江龙づ霸主 提交于 2020-01-25 03:37:45
1.最开始系统上电后 ENTRY(_start)程序入口点是 _start 由board/ap121/u-boot.lds引导 2._start: cpu/mips/start.S 是第一个源程序文件,主要完成初始化看门狗、定时器、重定位(拷贝代码段到内存中)、初始化堆 栈、 跳转到第二阶段等工作。 3. la t9, board_init_f 将函数board_init_f地址赋予t9 j t9 跳转到t9寄存器中保存的地址指向的指令 即跳转到RAM 中执行 C 代码 这里会打印一些信息。 3.1 board_init_f() lib_mips/board.c 初始化外部内存 relocate_code() 回到cpu/mips/start.S中继续执行 4.la t9,board_init_r cpu/mips/start.S j t9 将函数board_init_r地址赋予t9 跳转到t9寄存器中保存的地址指向的指令 即跳转到RAM 中执行 C 代码 这里会打印一些信息 4.1 board_init_r() 函数 lib_mips/board.c 4.2 main_loop() common/main.c s=getenv ("bootcmd") 取得环境变量中的启动命令行,如bootcmd=bootm 0xbf020000 run_command (s, 0); /