uboot

【转】UBOOT——启动内核

不想你离开。 提交于 2019-11-29 00:31:15
转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT?   UBOOT的主要作用是用来启动linux内核,因为CPU不能直接从块设备中执行代码,需要把块设备中的程序复制到内存中,而复制之前还需要进行很多初始化工作,如时钟、串口、dram等;   如要想让CPU启动linux内核,只能通过另外的程序,进行必要的初始化工作,在把linux内核中代码复制到内存中,并执行这块内存中的代码,即可启动linux内核;一般情况下,我们把linux   镜像储存在块设备中如SD卡、iNand、Nandflash等块设备中,首先执行UBOOT带码,在UBOOT中把块设备中的内核代码复制到内存地址0x30008000地址处,然后在执行bootm 0x30008000   命令来执行内核代码; 整个过程大致如上述所讲,下面我们详细分析一下UBOOT启动内核的代码: 2:在启动UBOOT时候会出现看机倒计时,如果没有按键按下,会自动启动内核,我们来看一下这个是如何实现的: 下面这段代码是在main_loop函数中:作用是执行完倒数计时函数以后启动linux内核,启动方式是 s = getenv ("bootcmd");我们假定不使用HUAH_PARSER的情况下 run_command (s, 0);

uboot支持S3C6410的SD启动

扶醉桌前 提交于 2019-11-28 16:48:17
这里使用的uboot并非uboot官方发布的uboot代码,而是为三星定制的一个uboot版本s3c-u-boot-1.1.6,其代码作者就包括了三星的程序员与denx的员工。这个版本支持SD启动,不过默认是nand启动,使它支持uboot需要做以下事情:   1、 虽然支持uboot启动,但是uboot代码里不叫SD启动方式,而是叫movinand启动方式,在incluede/configs/smdk6410.h中就有这个选项,所以在这个文件里关闭nand启动,打开movinand启动就可以了:   //#define CONFIG_BOOT_NOR   //#define CONFIG_BOOT_NAND 注释nand启动   #define CONFIG_BOOT_MOVINAND 打开movinand启动   //#define CONFIG_BOOT_ONENAND   //#define CONFIG_BOOT_ONENAND_IROM   #define CONFIG_NAND   //#define CONFIG_ONENAND   #define CONFIG_MOVINAND 打开movinand选项,使uboot支持movinand的操作   2、如果单纯是做上面的改动,还是不够的,在运行的时候会发现到了一定的时候uboot就死掉了

uboot图形化配置浅析

限于喜欢 提交于 2019-11-28 15:12:49
1.1:menuconfig 重点会用到两个文件:.config 和 Kconfig,.config 文件前面已经说了,这个文件保存着 uboot 的配置项,使用 menuconfig 配置完 uboot 以后肯定要更新.config 文件。Kconfig文件是图形界面的描述文件,也就是描述界面应该有什么内容,很多目录下都会有 Kconfig 文件 1.2:打开图形界面,设置好要设置的项目后, make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8再编译uboot, 注意不能用用 mx6ull_alientek_emmc.sh ,因为在编译之前会清理工程,会删除掉.config 文件 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig 1.3:过程分析:当输入 make menuconfig 以后会匹配到顶层 Makefile 的如下代码 %config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@

(转)从0移植uboot(五) _实现串口输出

走远了吗. 提交于 2019-11-28 06:08:19
ref : https://www.cnblogs.com/xiaojiang1025/p/6500520.html 串口作为一种非常简单的通信方式,才是嵌入式系统调试的王道,通过设置串口输出,我们可以将程序运行的情况直接通过串口线输出到屏幕上,对于这种异常重要的功能,uboot原生就提供了支持,但为此我们需要做一些准备工作, 流程还是那套: 找运行逻辑 ,即插入代码的位置。 根据运行逻辑编写功能代码。 找配置逻辑 ,即修改哪些文件使配置生效。 根据配置逻辑修改配置使功能代码生效。 重新编译烧写uboot。 1. 找运行逻辑 通过 (二) 的分析, 我们了解到初始化串口的工作在BL2的 "board/samsung/myboard/lowlevel_init.S" 中进行, 所以我们的工作就是在这个文件中添加相应的代码. 2. 编写功能代码 为了让串口工作, 我们需要添加如下代码 添加临时栈 41 lowlevel_init: 42 ldr sp,=0x02060000 @use iRom stack in bl2 43 push {lr} 关闭看门狗 67 beq wakeup_reset 68 69 #if 1 /*for close watchdog */ 70 /* PS-Hold high */ 71 ldr r0, =0x1002330c 72 ldr r1, [r0]

bootcmd与bootargs

十年热恋 提交于 2019-11-28 05:55:07
1.1:bootcmd 保存着 uboot 默认命令,uboot 倒计时结束以后就会执行 bootcmd 中的命令。这些命令一般都是用来启动 Linux 内核的,比如读取 EMMC 或者 NAND Flash 中的 Linux 内核镜像文件和设备树文件到 DRAM 中,然后启动 Linux 内核;板子第一次运行 uboot 的时候都会使用默认值来设置 bootcmd,环境变量。在 include/env_default.h看下默认值 env_t environment __PPCENV__ = { ENV_CRC, /* CRC Sum */ 1, /* Flags: valid */ const uchar default_environment[] = { "bootargs=" CONFIG_BOOTARGS "\0" "bootcmd=" CONFIG_BOOTCOMMAND "\0"     ............ } 1.2:CONFIG_BOOTCOMMAND的定义用如下脚本语言定义:找设备树文件;切换到emmc上;再扫描是否有mmc设备(没有的话从网络启动),运行loadbootscript环境变量若能加载到boot.src,则运行bootscript环境变量;否则运行loadimage环境变量(loadimage=fatload mmc 1:1

uboot环境变量:详谈bootcmd 和bootargs

天大地大妈咪最大 提交于 2019-11-28 05:08:58
1.uboot中的环境变 量 bootdelay:执行自动启动的等候秒数 baudrate:串口控制台的波特率 netmask: 以太网接口的掩码 ethaddr: 以太网卡的网卡物理地址 bootfile: 缺省的下载文件 bootargs:传递给内核的启动参数 bootcmd:自动启动时执行的命令 serverip: 服务器端的ip地址 ipaddr: 本地ip 地址 stdin: 标准输入设备 stdout: 标准输出设备 stderr: 标准出错设备 以上是一些基本的环境变量。uboot中一般会有一些缺省的环境变量。    来源: https://www.cnblogs.com/zhuangquan/p/11393128.html

uboot中Kconfig架构的理解

此生再无相见时 提交于 2019-11-28 00:33:12
1./u-boot-2019.07/Kconfig 是顶层Kconfig mainmenu "U-Boot $UBOOTVERSION Configuration" #这是总menu 2.source "arch/Kconfig" #然后就引用了arch目录下的Kconfig 这个Kconfig中可以选择不同的架构,有arm M68K MIPS等 choice prompt "Architecture select" default SANDBOX config ARC bool "ARC architecture" select ARCH_EARLY_INIT_R select ARC_TIMER select CLK select HAVE_PRIVATE_LIBGCC select SUPPORT_OF_CONTROL select TIMER config ARM bool "ARM architecture" select CREATE_ARCH_SYMLINK select HAVE_PRIVATE_LIBGCC if !ARM64 select SUPPORT_OF_CONTROL config M68K bool "M68000 architecture" select HAVE_PRIVATE_LIBGCC select SYS_BOOT_GET_CMDLINE

uboot URL

為{幸葍}努か 提交于 2019-11-27 22:12:31
https://blog.csdn.net/funkunho/article/details/52465636 https://www.cnblogs.com/aaronLinux/p/5933309.html http://www.voidcn.com/article/p-pbuyitfe-bd.html https://bbs.icxbk.com/thread-99761-1-1.html http://www.voidcn.com/article/p-pbuyitfe-bd.html 来源: https://www.cnblogs.com/idyllcheung/p/11380043.html

S3C2440 移植最新5.2linux内核

冷暖自知 提交于 2019-11-27 12:23:39
基于 移植uboot后. 1. 移植linux内核 1.1 下载源码 打开 https://www.kernel.org/ 直接肝最新的 5.2.8 下载完后,在ubuntu里解压备用. 1.2 搭建交叉编译环境 1. 交叉编译环境用的是arm-linux-gcc 4.6.4的版本,这个版本挺好找的,在网上下载压缩包后,根据个人习惯解压到 /opt/ 下, 2. 并且修改环境变量 sudo vim /etc/profile export PATH=/opt/gcc-4.6.4/bin:$PATH 3. 保存,然后source /etc/profile 进行更新.稳妥起见,ubuntu要注销一下,重新登录. 4. 确定:在窗口输入arm-linux-gcc -v 显示的是你的编译环境就可以啦. 注:是可以多版本gcc编译器 " 伪共存 " 的,我这里就是gcc 3.4 的也有一份, 需要的时候,把环境变量注释一下留下需要的版本就好了.我觉得这样很方便. 1.3 修改时钟频率和mtd分区 s3c2440 支持2中时钟晶振:12MHz 和 16MHz,我这个板子上用的是12MHz, 所以修改 arch/arm/mach-s3c2440/mach-smdk2440.c s3c24xx_init_clocks(16934400); 改为: s3c24xx_init_clocks

使用uboot引导本地vxworks镜像

余生长醉 提交于 2019-11-27 12:20:57
vxworks镜像包括两个文件:vxworks、vxworks.bin,其中vxworks用于本地调试。 言归正传,下面分步骤描述引导方法: 1、运行tftp.exe工具,将路径设置为本地vxworks.bin所在文件夹。 2、运行SecureCRT.exe,在uboot下输入: ->tftp 0x10100000 vxWorks.bin 等待文件load完毕,再继续输入: ->go 0x10100000 到此就完成本地镜像引导,然后就可以执行拷贝等操作。 注意:0x10100000是 RAM_LOW_ADRS 的值, 请根据 BSP 文件里面 Makefile 中的定义。 来源: https://blog.csdn.net/idols_man/article/details/99673958