Linux学习笔记 | 您所在的位置:网站首页 › mfgtool2无法烧录 › Linux学习笔记 |
目录 准备文件 重命名文件 替换firmware文件夹中的文件 替换files文件夹中的文件 修改cfg.ini配置文件 烧写系统 启动系统 设置网络相关环境变量 设置环境变量bootcmd 和 bootargs 配置网络参数 设置开机自动配置网络 上一节中已经用MfgTool工具成功的烧写了NXP官方的系统,下面就按照同样的方法将官方的系统替换为自己的系统。 如果要烧写我们的系统,就需要用我们编译出来的 zImage、u-boot.imx 和 imx6ull-alientek-emmc.dtb 这三个文件替换掉表中这三个文件。但是名字要和表中的一致。 下面就需要从自己的Ubuntu系统中去拷贝这几个文件。 准备文件打开Ubuntu系统,打开FileZilla软件,连接到虚拟机上。同时在电脑上新建一个”烧写软件”的文件夹,用于存放需要用到的文件。 从虚拟机中 /home/hxydj/linux/IMX6ULL/uboot/my_uboot文件夹中 复制 u-boot.imx 文件到 Windows中烧写软件文件夹中。 从虚拟机中/home/hxydj/linux/IMX6ULL/linux/my_linux/arch/arm/boot文件夹中复制 zImage 文件 到Windows中烧写软件文件夹中。 从虚拟机/home/hxydj/linux/IMX6ULL/linux/my_linux/arch/arm/boot/dts文件夹中复制 imx6ull-mylinux-emmc.dtb文件到Windows中烧写软件文件夹中。 最后要使用的自己的根文件系统,将Ubuntu系统中/home/hxydj/linux/nfs/rootfs文件夹打包, 重点!重点!重点! 这里打包文件时,切记一定要在rootfs文件夹内打包。不能在文件夹外部打包,因为tar打包命令默认是不会打包隐藏文件的。直接在文件夹外面打包的根文件系统在后期烧写进单片机时会导致系统内核崩溃,不能正常进入。 系统内核奔溃错误如下图所示 首先进入到rootfs文件内部。 然后使用打包命令打包所有文件 cd rootfs tar -vcjf rootfs.tar.bz2 * 打包完成后查看文件大小 打包完成后将压缩包移动到文件夹外面去 使用FileZilla软件将压缩包发送到烧写软件文件夹中 此时需要用到的4个文件就准备好了 重命名文件接下里需要将自己的文件重命名为和系统默认名称一样,否则的话 ucl2.xml 是识别不出来。 将设备树文件重命名为zImage-imx6ull-14x14-evk-emmc.dtb 将uboot文件重命名为u-boot-imx6ull14x14evk_emmc.imx 系统镜像名字不用变。 将根文件系统重命名为rootfs_nogpu.tar.bz2 接下来开始替换NXP官方的文件。 替换firmware文件夹中的文件将这zImage-imx6ull-14x14-evk-emmc.dtb、u-boot-imx6ull14x14evk_emmc.imx、zImage 这三个文件复制到mfgtools-wth-rootfs\mfgtools\Profiles\Linux\OS Firmware\firmware目录中 替换原来的文件。 替换files文件夹中的文件接下来用重命名后的4个文件替换mfgtools-with-rootfs\mfgtools\Profiles\Linux\OS Firmware\files文件夹中的源文件。 替换完成后可以按照修改日期查看一下,就可以看到文件是否替换成功。 这时就可以开始烧写文件了,将拨码开关拨到USB模式。 修改cfg.ini配置文件在烧写前需要修改一下cfg.ini 配置文件 ucl2.xml文件会调用因为配置文件中的变量,从而决定了烧写软件会加载哪个文件。 打开ucl2.xml文件可以看到 在142行和164行MX6ULL会调用file文件,而file文件路径是由变量决定的。 其中142行文件路径为: file ="firmware/u-boot-imx6ul%lite%%6uluboot%_emmc.imx" 这里面有两个变量lite 和 6uluboot 默认配置文件中值为: 如果将默认配置文件中的值替换进去的话,那么这个uboot文件名就是 u-boot-imx6ull 14x14ddr3arm2 _emmc.imx 其中164行文件路径为:file="firmware/zImage-imx6ul%lite%-%6uldtb%-emmc.dtb" 将默认配置文件变量替换后,设备树文件名是 zImage-imx6ull- 14x14-ddr3-arm2 -emmc.dtb 在184、205、212行调用文件也使用到了变量lite 和 6uluboot file="files/u-boot-imx6ul%lite%%6uluboot%_emmc.imx" file="files/zImage-imx6ul%lite%-%6uldtb%-emmc.dtb" $FILE /mnt/mmcblk%mmc%p1/imx6ul%lite%-%6uldtb%.dtb" 分别替换后为 u-boot-imx6ull 14x14ddr3arm2 _emmc.imx zImage-imx6ull- 14x14-ddr3-arm2 -emmc.dtb 第三个路径为在EMMC中查找设备树,变量mmc用来确定EMMC的分区 EMMC 版本的核心板启动 linux 以后会存在/dev/mmcblk0、/dev/mmcblk1、/dev/mmcblk0p1、/dev/mmcblk0p2、/dev/mmcblk1p1 和/dev/mmcblk1p2 这样的文件,其中/dev/mmcblkx(x=0~n)表示 mmc 设备,而/dev/mmcblkxpy(x=0~n,y=1~n)表示 mmc 设备x 的分区 y。在 I.MX6U-ALPHA 开发板中/dev/mmcblk1 表示 EMMC,而/dev/mmcblk1p2 表示EMMC 的分区 2。 这里用到的是EMMC,所以mmc变量要设置为1。 可以看到根据默认配置文件解析出来的文件名和自己需要用到的文件名不一样。 需要用到的文件名为: zImage-imx6ull-14x14-evk-emmc.dtb u-boot-imx6ull14x14evk_emmc.imx zImage rootfs_nogpu.tar.bz2 在ucl2.xml文件中可以找到对这四个文件的依次调用 调用zImage文件,直接使用文件名没有用到变量。 调用rootfs_nogpu.tar.bz2文件也直接使用的是文件名,没有用到变量。 调用firmware文件夹中的设备树和uboot文件时使用了变量lite 和 6uluboot 调用files文件夹中的设备树和uboot文件时使用了变量lite 、6uluboot 和 mmc 所以就需要修改cfg.ini配置文件中的变量lite 、6uluboot 和 mmc 根据用到的这几个文件可以反推出来这几个变量的值为 mmc = 1 6uluboot=14x14evk 6uldtb=14x14-evk lite=l 所以修改后的配置文件为: 其中lite值默认就是l,所以不用修改。其他三个变量值需要修改,修改完成后,保存配置文件。 那么如果要烧写不同的文件,每次都要修改配置文件名吗?这样岂不是很麻麻烦?有没有简单的方法? 当然是有方法的,配置文件中的变量值也可以通过*.vbs文件来修改。 不同的vbs文件中就对应了不同的变量值,用文本的形式打开vbs文件。 可以看到,在mfgtool2-yocto-mx-evk-emmc.vbs文件中重新设置了 "mmc=1" "6uluboot=14x14evk" "6uldtb=14x14-evk" 这样就不需要每次都修改配置文件了,只需要烧写脚本中重新设置这几个变量值就行了,这样的话,对于不同的文件,使用起来就更加方便了。 烧写系统接下来就可以开始下载自己的系统了。 双击打开mfgtool2-yocto-mx-evk-emmc.vbs文件开始烧写。由于自己的文件系统比较小,所以这次烧写的就比较快,几分钟就烧写完成。 点击Stop按钮,在点击Exit按钮。 启动系统将拨码开关重新拨回到EMMC模式,然后重启开发板,然后打开串口终端。 从系统打印的信息可以看出,系统的编译时间是刚才编译的。板子的名称也和设置的一样。说明系统下载成功了。但是有个提示是网络地址没有设置。这是因为重新烧写系统后,环境变量丢失了。 下面就重新设置网络,按下复位键重启开发板,然后在倒计时结束前按下键盘上的任意键。 这时候就可以看到系统提示没有设置网络地址。 设置网络相关环境变量接下来设置网络相关的环境变量。 192.168.1.50是开发板的IP地址,192.168.1.66是Ubuntu的IP地址。 重启开发板 此时就不会报FEC1错误了。然后打印环境变量 可以看到IP地址也设置好了。 为了确认下烧写的文件是不是正确,可以查看下mmc中的内容。 使用 ls mmc 1:1 命令将mmc中的文件列表打印出来。 可以将这两个文件的大小和烧写文件的大小比较一样,看看是否一样。 可以看出mmc中的文件和烧写的文件大小一致,说明烧写是成功的。 设置环境变量bootcmd 和 bootargs接下来还需要设置两个环境变量,bootcmd 和 bootargs。 可以看到bootcmd值恢复为默认值了,这里需要重新设置bootargs和bootcmd的值。需要从EMMC启动,使用命令将EMMC中的文件显示出来,一会设置的文件名要和EMMC中的文件名一致。 使用命令 ls mmc 1:1 打印EMMC中的文件列表。 接下来设置环境变量 setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' setenv bootcmd 'mmc dev 1:fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 83000000 imx6ull-14x14-evk.dtb;bootz 80800000 - 83000000;' saveenv 然后重启系统,在倒计时结束前 按下键盘上任意键。使用print命令打印环境变量。 可以看到bootcmd和bootargs这两个环境变量的值已经设置成功了。 接下来输入boot指令,启动系统。 可以看到系统开始加载内核了 系统启动成功后会提示按下键盘上的回车键。 使用ls命令打印文件列表,可以看到这个文件和Ubuntu系统下的一样。进入drivers目录下测试hello程序。 测试程序正常运行,可以使用ctrl+c 命令结束程序运行。 配置网络参数接下来还需要设置一下系统的网络 由于默认情况下系统的网络是关闭的,可以输入ifconfig -a 命令查看当前网络。 使用命令打开网络 输入 ifconfig eth0 up 输入命令后等待网络设备的加载 加载完成后使用命令再次查看一下网络 开发板使用的是eth0口,现在需要设置一下这个网口的IP地址。 输入命令设置IP地址和子网掩码 ifconfig eth0 192.168.1.50 netmask 255.255.255.0 输入命令添加默认网关 route add default gw 192.168.1.1 使用ifconfig命令查看网络 使用ping命令测试开发板和电脑连接是否成功。 开发板和主机网络连接成功。 设置开机自动配置网络但是这样设置的网络不会保存,重新开机后设置的网络就会丢失,需要重新设置一次。 为了方便操作,可以将网络设置的命令直接添加到系统中,每次开机后让系统自动配置网络。 只需要将设置命令添加到/etc/init.d/rcS 文件中就行了。 在串口终端中进入/etc/init.d文件夹 使用vi 命令打开 rcS文件 在文件中添加网络设置命令 Vi编辑器里面汉字显示不出来 那些小点就是汉字写的注释,这里看不到,不过没关系。不影响正常功能的使用。 打开eth0网卡 通过路由器自动获取IP地址 手动设置IP地址和子网掩码 手动添加网关 这里设置开发板的默认IP地址为192.168.1.50 设置完成后重启开发板 启动成功后输入ifconfig命令查看IP。 这时可以看到IP地址已经被系统自动设置好了。 到这里使用MfgTool工具烧写自己的系统就完成了。 |
CopyRight 2018-2019 实验室设备网 版权所有 |