查看: 4504|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2019-12-26 22:21
  • 签到天数: 310 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2018-4-3 19:45:46 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 风之山谷 于 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
    复制代码

    解压完成后文件如下:

    Snipaste_2018-03-28_17-13-15_UBOOT.png

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

    Snipaste_2018-03-28_18-11-39_UBOOT.png

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

    Snipaste_2018-03-28_18-12-16_UBOOT.png

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

    Snipaste_2018-03-28_18-12-44_UBOOT.png

    编译完成之后,编译出来多个文件,而我们所需的文件在根目录下,为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
    复制代码

    Snipaste_2018-03-28_18-45-25_Kernel.png

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

    Snipaste_2018-03-28_18-48-54_Kernel.png

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

    Snipaste_2018-03-28_19-02-49_Kernel.png

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

    Snipaste_2018-03-28_19-07-20_Kernel.png

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

    Snipaste_2018-03-28_19-08-41_Kernel.png

    如果提示选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
    复制代码

    Snipaste_2018-03-29_16-02-40.png

    Snipaste_2018-03-29_16-01-35.png

    Snipaste_2018-03-29_16-01-51.png

    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"
    复制代码

    Snipaste_2018-03-29_16-21-37.png

    这样,我们就把所需的文件准备好,接下来回到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' 表示添加文件名标识

    Snipaste_2018-03-29_16-23-50.png

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

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

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

    如果是在虚拟机中运行Linux,别忘了把MicroSD卡连接入虚拟机中。
    Snipaste_2018-03-29_16-26-49.png

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

    Snipaste_2018-03-29_16-28-21.png

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

    或者使用
    1. fdisk -l
    复制代码
    来通过容量大小来判断MicroSD卡设备号
    Snipaste_2018-03-29_16-30-13.png

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

    Snipaste_2018-03-29_16-22-43.png

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

    Snipaste_2018-03-29_16-48-06.png

    写入成功,便可将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中已经更新为我们编译的版本和最新的时间戳。

    Snipaste_2018-03-29_17-32-35.png

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

    Snipaste_2018-03-29_17-33-35.png

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

    Snipaste_2018-03-29_17-49-40.png

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


    回复

    使用道具 举报

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

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-23 17:28 , Processed in 0.103445 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.