(个人笔记,有需要相关资料的可以私聊我哦)
linux系统启动必须需要一个bootloader引导程序,也就是说芯片上电以后先要运行一段bootloader烧录。那么一开始linux系统会先运行bootloader引导程序,bootloader程序又是如何烧录的呢?
0.uboot获取
uboot官网 http://www.denx.de/wiki/U-Boot/;点击左侧Topics中的“source Code”,再点击FTP服务器
1.初次编译
首先在ubuntu中安装ncurses库,否则编译会报错
sudo apt-get install libncurses5-dev
使用如下命令解压
tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2
使用的是512M(DDR)+8G(EMMC)核心板,使用如下命令来编译uboot:
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
编译完成之后会有u-boot.bin文件,u-boot.imx文件。uboot是个裸机程序,因此需要在其前面加上头部才能在I。MX6U上执行,u-boot.imx就是添加头部之后的u-boot.bin
2.uboot烧写与启动
2.1 SD卡方式
uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将 uboot烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写,命令如下:
./imxdownload u-boot.bin /dev/sdb
/dev/sdb是我自己u盘对应的设备文件
2.2 emmc方式
如果要在 uboot 中更新 EMMC 对应的 uboot,可以使用如下所示命令:
mmc dev 1 0 //切换到 EMMC 分区 0
tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 33E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置, EMMC 需要这一步!
其中33E是uboot.imx文件大小除以512对应的十六进制,我的u-boot.imx大小是424960,424960/512=0x33E