一,U-Boot
简介
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段
bootloader
程序。
这段bootloader
程序会先初始化
DDR
等外设,然后将
Linux
内核从
flash(NAND,
NOR FLASH,
SD
,
MMC
等
)
拷贝到
DDR
中,最后启动
Linux
内核。当然了,
bootloader
的实
际工作要复杂的多,但是它最主要的工作就是启动
Linux
内核,
bootloader
和
Linux
内核的关系
就跟
PC
上的
BIOS
和
Windows
的关系一样,
bootloader
就相当于
BIOS
。
uboot 的全称是 Universal Boot Loader,
uboot 是一个遵循 GPL 协议的开源软件,uboot 是一个裸机代码,可以看作是一个裸机综合例程。
uboot 官网为
http://www.denx.de/wiki/U-Boot/.
正点会提供3种uboot:
![](https://img-blog.csdnimg.cn/direct/f32f5f4bb55a41c0a23d514c762ca761.png)
二,U-Boot
初次编译
首先在
Ubuntu
中安装
ncurses
库,否则编译会报错
sudo apt-get install libncurses5-dev
在 Ubuntu 中创建存放 uboot 的目录,然后在此目录 下新建一个名为“alientek_uboot”的文件夹用于存放正点原子提供的 uboot 源码。
使用如下命令对其进行解压缩:
tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2
1
、
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
。
u-boot.bin 就是编译出来的
uboot 二进制文件。u-boot.imx 文件就是添加头部以后的 u-boot.bin,u-boot.imx 就是我们最
终要烧写到开发板中的 uboot
镜像文件。
新建一个 shell 脚本文件,每次只需要执行
shell
脚本即可完成编译工作。
mx6ull_alientek_emmc.sh 的
shell
脚本文件:
1 #!/bin/bash
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)
mx6ull_14x14_ddr512_emmc_defconfig
4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
第 1
行是
shell
脚本要求的,必须是“
#!/bin/bash
”或者“
#!/bin/sh
”。
第 2
行使用了
make
命令,用于清理工程,也就是每次在编译
uboot
之前都清理一下工程。
第 3
行也使用了
make
命令,用于配置
uboot
。
第 4
行有
4
个参数,用于编译
uboot
,通过第
3
行配置好
uboot
以后就可以直接“
make
”编
译
uboot
了。
mx6ull_alientek_emmc.sh
./mx6ull_alientek_emmc.sh
2
、
256MB(DDR3)+ 512MB(NAND)
核心板
1 #!/bin/bash
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)
mx6ull_14x14_ddr256_nand_defconfig
4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
mx6ull_alientek_nand.sh
./mx6ull_alientek_nand.sh
三,U-Boot
烧写与启动
uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将
uboot
烧写到
SD
卡中,然后通过
SD
卡来启动来运行
uboot
。使用
imxdownload
软件烧写,命令如
下:
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd //烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!
等待烧写完成,完成以后将 SD
卡插到
I.MX6U-ALPHA
开发板上,
BOOT
设置从
SD
卡启
动,使用
USB
线将
USB_TTL
和电脑连接,也就是将开发板的串口
1
连接到电脑上。打开
MobaXterm
,设置好串口参数并打开,最后复位开发板。
在 MobaXterm
上出现“
Hit any key to stop autoboot: ”倒计时的时候按下键盘上的回车键,默认是
3
秒倒计时,在
3
秒倒计时结束以 后如果没有按下回车键的话 uboot
就会使用默认参数来启动
Linux
内核了。如果在
3
秒倒计时结束之前按下回车键,那么就会进入 uboot
的命令行模式。
四,U-Boot
命令使用
太多了,大家自己查文档一一详细学习。