Day3: uboot - 1

Uboot Day1

uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。uboot 官网为 http://www.denx.de/wiki/U-Boot/

我们可以把Uboot分为两种:
Day3: uboot - 1_第1张图片

例如,NXP 官方提供的2016.03版本的uboot, 下载地址为 :
http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tag/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=rel_imx_4.1.15_2.1.0_ga

在正原电子的参考文档里面,把其开发板的uboot列为第三种,对于开发者来说,自己开发的硬件电路板的uboot,便对应于这第三种,即基于半导体厂商的开发板的代码移植的Uboot.

编译

512MB(DDR3)+8GB(EMMC)核心板

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

这三条命令中 ARCH=arm 设置目标为 arm 架构,CROSS_COMPILE 指定所使用的交叉编
译器。第一条命令相当于“make distclean”,目的是清除工程.
第二条指令相当于“make mx6ull_14x14_ddr512_emmc_defconfig”,用于配置 uboot,配置文件为 mx6ull_14x14_ddr512_emmc_defconfig.
最后一条指令相当于 “make -j12”也就是使用 12 核来编译 uboot.

烧写

uboot的烧写有多种方式,在之前的笔记中也有描述。根据场景不同可以选用不同的方式

  • 比如在工厂生产,一般通过NXP的mfg Tool + usb serial download模式
  • 在开发阶段,第一次烧写(板上没有uboot, 也没有kernel), 也可以通过mfg tool, 或者 SD卡
  • 如果存在uboot, 则可以通过tftp下载new uboot到板上SDRAM,然后通过Uboot命令mmc write来更新
  • 如果存在kernel,还可以通过kernel dd 命令来更新uboot

uboot下tftp下载,mmc write烧写方式见下图
Day3: uboot - 1_第2张图片
Day3: uboot - 1_第3张图片

Uboot 命令

除了上面用到的烧写mmc的命令,uboot其他常用命令如下

  • 常用的和信息查询有关的命令有 3 个:bdinfo、printenv 和 version
  • 环境变量的操作涉及到两个命令:setenv 和 saveenv
  • 网络操作命令:ping, dhcp, nfs, tftp
  • emmc/sd命令, nand 命令
  • boot操作命令
  • 其他

例如,boot kernel

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000

Day3: uboot - 1_第4张图片

另外,启动相关的一个重要的环境变量bootcmd,例如上电后自动从emmc其中的设置为

fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000

通过设置环境变量命令设置,

setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-
emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'
savenev
boot

uboot 顶层目录

Day3: uboot - 1_第5张图片

arch

arch 文件夹存放着和架构有关的文件,比如 arm、avr32、m68k 等。 我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可。 打开 arm 文件夹里面内容如下:

fei@ubuntu:~/zhengyuandianzi/uboot/arch/arm$ ls
config.mk   Kconfig.debug  mach-highbank    mach-rockchip  mach-versatile
cpu         lib            mach-integrator  mach-s5pc1xx   mach-zynq
dts         mach-at91      mach-keystone    mach-socfpga   Makefile
imx-common  mach-bcm283x   mach-kirkwood    mach-stm32     thumb1
include     mach-davinci   mach-mvebu       mach-tegra
Kconfig     mach-exynos    mach-orion5x     mach-uniphier

mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星的 exyons 系列 CPU 有关的文件。我们使用的是 I.MX6ULL,所以要关注“imx-common”这个文件夹。
“cpu”这个文件夹也是和 cpu 架构有关的,打开以后如下:

fei@ubuntu:~/zhengyuandianzi/uboot/arch/arm/cpu$ ls
arm11    arm720t    arm946es  armv8       pxa         u-boot-spl.lds
arm1136  arm920t    armv7     built-in.o  sa1100
arm1176  arm926ejs  armv7m    Makefile    u-boot.lds

可以看出有多种 ARM 架构相关的文件夹,I.MX6ULL 使用的 Cortex-A7 内核,
Cortex-A7 属于 armv7,所以我们要关心“armv7”这个文件夹。cpu 文件夹里面有个名为“uboot.lds”的链接脚本文件,这个就是 ARM 芯片所使用的 u-boot 链接脚本文件!armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的。

这个就是 ARM 芯片所使用的 u-boot 链接脚本文件!armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的。

你可能感兴趣的:(Linux,linux,arm开发,运维)