一 系统移植
 
 
系统移植 主要分四个不分由系统启动流程决定
 
- U-Boot的移植
-  Linux内核的移植 
- 根文件系统的构建
- 系统烧写    
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 
  
 
 
 
  
配置成功
 

 
 
2 sudo service tftpd-hpa start  (tftp环境配置)
 
1.4 烧写内核
 
 copy zImage到 tftp server目录 
 
chmod 777 zImage
 

 
 
 4  
 zImage  
 文件下载到开发板  
 DRAM  
 的  
 0X80800000  
 地址处 
 
 
 
 
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
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 
 
