回答

收藏

[原创] [MYD-Y6ULX试用][4]试编译U-Boot & Linux Kernel并下载更新系统

嵌入式系统 嵌入式系统 5849 人阅读 | 0 人回复 | 2018-04-03

本帖最后由 风之山谷 于 2018-4-4 11:33 编辑

上一篇已经安装了两种交叉编译链工具之后,接下来试编译一下MYD-Y6ULX米尔官方提供的U-Boot和Linux Kernel。以下默认采用Linaro交叉编译链工具(GCC 4.9.3),Ubuntu 16.04.4 LTS x64操作系统。

U-Boot是开源的嵌入式系统的Bootloader,它的作用是用来在上电时初始化设置,引导嵌入式系统启动、更新底层固件。U-Boot功能强大,支持多个包括Linux系统等多个嵌入式操作系统和包括ARM在内的多个处理器。而且U-Boot支持众多外设,功能强大而且方便稳定。

1.编译U-Boot

下面现在编译米尔官方提供的U-Boot项目。先解压U-Boot源码。

  1. cd ~/Y6ULX_dev/04-Source
  2. tar -xvf MYiR-iMX-uboot.tar.gz
复制代码

解压完成后文件如下:



输入以下命令先清除文件:
  1. make distclean
复制代码



清除之后对U-Boot设置参数,此处是编译MYD-Y6ULX开发板(256Mb Nand Flash版本),把编译开关设置为myd_y6ul_14x14_nand_defconfig,输入以下命令进行设置:
  1. make myd_y6ul_14x14_nand_defconfig
复制代码
输入之后如下图所示:



接着用make命令进行编译:
  1. make
复制代码



编译完成之后,编译出来多个文件,而我们所需的文件在根目录下,为u-boot.imx

2.编译Linux Kernel

接下来编译Linux的内核——Kernel 4.1.15,Linux项目也是开源的,可以在官网免费下载源代码。Linux内核是集成了储存管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等,是一个操作系统的基础,当了除了内核以外,还需要文件系统,这在下一节再说。

先解压米尔官方提供的适配MYD-Y6ULX的Linux Kernel项目。
  1. cd ~/Y6ULX_dev/04-Source
  2. tar -xvf MYiR-iMX-Linux.tar.gz
复制代码

进入解压出来的目录,输入以下命令来清除上一次编译的文件:
  1. make distclean
复制代码

清除之后设置参数myd_y6ulx_defconfig,也就是Y6ULX的默认设置参数,输入以下命令:
  1. make myd_y6ulx_defconfig
复制代码



设置好参数之后就准备开始编译Linux Kernel,此时需要一整段比较长的时间来进行编译,我的Intel i5 2.5GHz处理器+SSD笔记本编译用时不到1小时。输入以下命令进行编译镜像和设备树文件dtb:
  1. make zImage dtbs
复制代码



编译时的处理器利用率:占用率并不是很高



编译到途中出现错误!?提示如下
  1. /bin/sh: 1: lzop: not found
复制代码



谷歌之,原来是没有安装lzop,利用Apt-get命令下载并安装lzop即可,输入以下命令:
  1. sudo apt-get install lzop
复制代码



如果提示选y即可,安装完lzop之后,再次输入
  1. make zImage dtbs
复制代码
即可接着之前进度继续编译,编译完Linux Kernel之后,Linxu Kernel镜像zImage已经放在目录下/arch/arm/boot中,设备树文件放在目录下/arch/arm/boot/dts中,对于MYD-Y6ULX开发板256Mb Nand版本来说,设备树文件dtb是myd-y6ul-gpmi-weim.dtb。以上两个文件留作备用。

能力高的可以在编译前输入以下命令来图形化定制参数,裁剪Linux内核(新手切莫进下以下操作)
  1. make menuconfig
复制代码







3.利用Yocto工具构建Linux文件系统和命令

只有内核并不够用,需要一个标准的FHS目录、文件系统、系统软件、操作命令等等,这些都需要构建好以便使用,而Yocto正是为了构建这些东西的。

由于Yocto构建工具比较庞大,而且编译比较慢,因此放到下一篇文章,后面的内容将使用米尔官方提供的已经构建好的不带QT基本Linux文件系统文件core-image-base-myd-y6ul14x14-20180124025825.rootfs.tar.bz2

4.Micro-SD卡更新MYD-Y6ULX开发板上U-Boot & Kernel更新U-Boot 和 Linux Kernel可以通过两种方法,其一是通过NXP官方工具MFGTOOLS通过USB线更新,其二是通过米尔提供的工具mkupdate通过制作SD卡来更新。先解压缩工具:
  1. tar -xvf MYiR-iMX-mkupdate-sdcard.tar.bz2
复制代码

打开目录后,firmware是SD卡更新系统的固件,一般不动,其作用是上电进入该SD卡系统,然后把更新的文件烧录到开发板上的Nand Flash。mfgimages-myd-y6ul-ddr256m-nand256m目录是存放刚编译好的文件的地方(针对Y6UL 256Mb Nand Flash版本),里面有五个文件——Mainfest、DTB、IMX、zImage、ROOTFS,分别是摘要文件、设备树文件、U-Boot文件、Linux Kernel镜像文件和文件系统,把Mainfest保留下,其余删除掉。然后把U-Boot编译时的u-boot.imx文件、Linux kernel编译时的myd-y6ul-gpmi-weim.dtb文件、zImage文件和米尔提供的core-image-base-myd-y6ul14x14-20180124025825.rootfs.tar.bz2文件拷入到该目录下,并修改Mainfest文件,如下图和文字:把文件名改成拷进去的文件名字,并保存。
  1. ubootfile="u-boot.imx"
  2. kernelfile="zImage"
  3. dtbfile="myd-y6ul-gpmi-weim.dtb"
  4. rootfsfile="core-image-base-myd-y6ul14x14-20180124025825.rootfs.tar.bz2"
复制代码



这样,我们就把所需的文件准备好,接下来回到mkupdate目录下,输入以下命令生成SD卡镜像:
  1. sudo ./build-sdcard.sh -p myd-y6ul -n -d mfgimages-myd-y6ul-ddr256m-nand256m
复制代码
build-sdcard.sh提供了四种参数:
'-p' 表示平台,可用参数为"myd-y6ul"代表MYD-Y6UL
'-n' 表示板上存储芯片是NAND
'-e' 表示板上存储芯片是eMMC
'-d' 表示更新文件的目录
'-t' 表示添加文件名标识



稍等一会即可生成后缀为.sdcard文件,接下来把这个sdcard镜像文件复制到MicroSD卡上,把MicroSD卡插入电脑。

在Windows可以Win32DiskImager工具写入到MicroSD卡上。

在Linux系统下,先确定插入的MicroSD卡设备号。

如果是在虚拟机中运行Linux,别忘了把MicroSD卡连接入虚拟机中。


可输入以下命令查看设备日志以确定设备号:
  1. dmesg | tail
复制代码



由图可知刚插入的设备号为sdb。

或者使用
  1. fdisk -l
复制代码
来通过容量大小来判断MicroSD卡设备号


清楚设备号之后,输入以下命令来对MicroSD烧录镜像:
  1. sudo dd if=myd-y6ul-update-nand-20180329160349.rootfs.sdcard of=/dev/sdb conv=fsync
复制代码



此处稍等时间比较久,具体取决于MicroSD卡写入速度,此处大约需要写入600多Mb,大约需要8分钟。



写入成功,便可将MicroSD卡插入MYD-Y6ULX开发板MicroSD卡槽中。在启动开发板之前需要把拔码开关(SW1)调节为如下方式,以实现MicroSD卡启动。

Bit1 ON
Bit2 OFF
Bit3 ON
Bit4 OFF

连接上Uart后启动,可以看到进入的是MicroSD卡上的系统,如果发现编译时间不对或者系统变为Y6ULL时不要慌,这个不是最终烧录到Nand中的系统。此时只需要等就好了,该系统会自动烧录,待烧录完成之后断电关机。再次调节拔码开关(SW1)调节为如下方式,以调节为Nand Flash启动。

Bit1 OFF
Bit2 ON
Bit3 ON
Bit4 OFF

最后上电,可以看到U-Boot中已经更新为我们编译的版本和最新的时间戳。



同样,Linux Kernel也更新为编译的系统,时间戳为我们编译的时间,GCC 为我们用的Linaro的版本,编译信息变为我们刚刚编译所用的账号名.



登入系统后输入以下命令查看Linux版本和确认时间戳是否正确:
  1. uname -a
复制代码



到此步已经算是编译和下载成功了。以上就是本篇文章全部内容~


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条