i.MX6ULL(十四) 系统移植之 命令行

一 系统移植

系统移植 主要分四个不分由系统启动流程决定

  1. U-Boot的移植
  2.  Linux内核的移植 
  3. 根文件系统的构建
  4. 系统烧写    

1.1 交叉编译环境

交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器, Linaro 是一间非营利性质的开
放源代码软件工程公司, Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链 ( 编译
) ,关于 Linaro 详细的介绍可以到 Linaro 官网查阅。 Linaro GCC 编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/ ,打开以后下
载界面如图 4.3.1.1 所示:

安装完验证 

arm-linux-gnueabihf-gcc -v\

1.2 编译 uboot

开发板光盘 ->1 、例程源码 ->3 、正点原
Uboot Linux 出厂源码 -> uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2
添加编译脚本
mx6ull_alientek_emmc.sh
 #!/bin/sh
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  distclean
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  mx6ull_14x14_ddr512_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  all -j4

运行脚本

chmod a+x  mx6ull_alientek_emmc.sh

./mx6ull_alientek_emmc.sh
编译后目录如下

u-boot.imx 就是我们最 终要烧写到开发板中的 uboot 镜像文件
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 的命令行模式,

比较重要的环境变量 命令使用

bootcmd  bootargs

 加载zImage相关环境变量 这里使用fatload 加载到 mmc 

mmcroot=/dev/mmcblk1p2
内核设备树文件
定义位置

 

这是很多文档没有说明清楚的地方 uboot编译后 加载设备树的路径已经指明 规则因厂商版本可能不同,  在使用 MfgTool烧写自定义zIMage 时 需要匹配好dtb文件名

1.3  搭建烧写网络环境

从网络启动 linux 系统的唯一目的就是为了调试!不管是为了调试 linux 系统还是 linux
的驱动。每次修改 linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测
试,这样太麻烦了。我们可以设置 linux 从网络启动,也就是将 linux 镜像文件和根文件系统都
放到 Ubuntu 下某个指定的文件夹中,这样每次重新编译 linux 内核或者某个 linux 驱动以后只
需要使用 cp 命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC
这样就加快了开发速度。我们可以通过 nfs 或者 tftp Ubuntu 中下载 zImage 和设备树文件,
根文件系统的话也可以通过 nfs 挂载,不过本小节我们不讲解如何通过 nfs 挂载根文件系统,这
个在讲解根文件系统移植的时候再讲解。
这里我们使用 tftp Ubuntu 中下载 zImage 和设备树 文件,
1 首先调通板子和ubuntu  P CIE以太网 板子紧靠着串口的一(ubuntu 虚拟机网络配置)
setenv ipaddr 192.168.1.113
setenv ethaddr 00:90:F5:F1:6C:87
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.122
saveenv

配置成功

sudo service tftpd-hpa start  (tftp环境配置)

1.4 烧写内核

1.4.1 编译内核

1下载

NXP 会从 https://www.kernel.org 下载某个版本的 Linux 内核,然后将其移植到自己的 CPU
上,测试成功以后就会将其开放给 NXP CPU 开发者。开发者下载 NXP 提供的 Linux 内核,
然后将其移植到自己的产品上。本章的移植我们就使用 NXP 提供的 Linux 源码, NXP 提供 Linux
源码已经放到了开发板光盘中,路径为: 开发板光盘 ->1 、例程源码 ->4 NXP 官方原版 Uboot
Linux-> linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
2 编译
1 安装依赖命令  sudo apt-get install lzop 
2 创建编译辅助脚本  mx6ull_alientek_emmc.sh
 #!/bin/sh
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
 chmod a+x mx6ull_alientek_emmc.sh
./mx6ull_alientek_emmc.sh
弹出内核配置页面 按默认设置 接着编译
编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件, zImage 就是
我们要用的 Linux 镜像文件。另外也会在 arch/arm/boot/dts 下生成很多 .dtb 文件,这些 .dtb 就是
设备树文件

copy zImage到 tftp server目录 

chmod 777 zImage

4 zImage 文件下载到开发板 DRAM 0X80800000 地址处
tftp 80800000 zImage

1.5接着烧写设备树   imx6ull-14x14-emmc-4.3-800x480-c.dtb  

而非 imx6ull-14x14-emmc-7-1024x600-c.dtb 

uboot启动信息未看到屏幕信息 

printenv 打印环境变量查看屏幕型号和尺寸 确定设备树文件为

从正点原子出厂固件copy   imx6ull-14x14-emmc-4.3-800x480-c.dtb  到tftp目录

imx6ull-14x14-emmc-4.3-480x272-c.dtb

tftp 83000000 i mx6ull-14x14-emmc-4.3-800x480-c.dtb   
#tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 80800000 - 83000000

注意修改权限  

VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:  ??

答: 根文件系统缺失错误 

1.6 根文件系统烧写

Linux 内核启动以后是需要根文件系统的,根文件系统存在哪里是由 uboot bootargs 环境
变 量 指 定 , bootargs 会 传 递 给 Linux 内 核 作 为 命 令 行 参 数 。 比 如 上 一 小 节 设 置
root=/dev/mmcblk1p2 ,也就是说根文件系统存储在 /dev/mmcblk1p2 中,也就是 EMMC 的分区 2
中。这是因为正点原子的 EMMC 版本开发板出厂的时候已经 EMMC 的分区 2 中烧写好了根文
件系统,所以设置 root=/dev/mmcblk1p2 。如果我们不设置根文件系统路径 就会出现以上错误;


 

正点原子 mfgTool烧写的出厂系统  uboot日志 

//start kernel

未发现设备树文件日志

但根据环境变量得知

imx6ull-14x14-emmc-4.3-800x480-c.dtb 

bootcmd启动先findfdt 

猜你喜欢

转载自blog.csdn.net/TyearLin/article/details/131648695