当前位置:   article > 正文

【IMX6ULL笔记】-- 快速上手

imx6ull

        IMX6ULL 这两年算是很火的一款linux入门级的芯片了,有用过nxp rt10xx系列的小伙伴,上手这款芯片,应该会很快(rt10xx是cortex-m7架构,为一种跨界处理器,它集成了cortex-A 和 传统的mcu优点。。。额,再讲下去就讲偏了)。下面笔者就简述一下如何快速上手这IMX6ULL吧(细节留到其他篇幅)。

前期准备:

IMX6ULL开发板

网线,SD卡+读卡器,能连接串口的数据线(具体看用的什么接口)

终端工具软件 -- MobaXterm(试了几种工具,还是觉得这个最好用,其他相似的还有:secureCRT,Putty等等)

vscode:笔者一直用它来编辑代码,感觉在linux下使用也特别方便,在某些方面用起来比vim方便一些(注意 vscode 终端窗口调大一点,不然编译uboot、内核这些的menucofig功能容易出错)。

安装ubuntu系统(ubuntu 的安装分两类:虚拟机下安装;非虚拟机安装),网上教程很多,这里就不作介绍了,另外笔者装的版本是16.04

搭建好 tftp、nfs (这里先不介绍)

1、在Ubuntu中安装交叉编译工具链

什么叫交叉编译?简单理解就是在x86平台编译好的代码,必须要烧录到目标机器(ARM平台)上运行。

因为该工具链是在linux上运行的,这里下载的工具链是:arm-linux-gnueabihf (GNU embedded application binary interface),下载地址可登录Linaro官网:

Linaro Releaseshttps://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/这里笔者用的4.9版本,高版本用起来有问题,还是参考别家都常用的版本吧,至少问题不多。

安装路径在:/usr/local/arm 

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

配置环境变量:vi /etc/profile   文件中输入:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

保存生效:source /etc/profile

另外工具链还需要 libstdc ++6 以及 lib32stdc ++6库的支持

sudo apt-get install lsb-core lib32stdc++6

2、u-boot 移植
u-boot 实际是个通用的 bootloader,我们没必要去u-boot官网去下载,可以直接使用芯片厂商或者第三方开发板提供的u-boot

解压u-boot:

tar -vxjf uboot-imx-2016.03-2.1.0-gd3f0479-v1.4.tar.bz2

编译u-boot前安装依赖库:

sudo apt-get install libncurses5-dev

解压完u-boot 后,这里需要特别注意configs文件夹,为u-boot配置文件夹,主要用来配置评估板和目标版差异性参数的文件,移植的时候需要用的,目前可以先不管这一块。

为了今后编译方便,我们在u-boot目录下,写个脚本:

  1. #!/bin/bash
  2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  3. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
  4. make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

然后直接执行即可:

./脚本文件名称xxxx.sh

将编译生成的 u-boot.bin文件,烧录到SD卡中(当然也可以用MfgTool工具,烧录到emmc 或者nand启动,这里忽略,原理都差不多,只是启动方式区别而已)。这里我们就直接用正点原子写好的工具烧写吧。

 注意自己U盘的名称:sda..sdb..?,不要烧错了

  1. dmesg 命令可查看挂载的SD卡信息
  2. //烧录方法1:用原子的执行文件
  3. ./imxdownload u-boot.bin /dev/sdb
  4. //烧录方法2:
  5. sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync

 上电打印,看看u-boot运行情况:

  1. U-Boot 2016.03 (Oct 24 2021 - 12:27:05 +0800)
  2. CPU: Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)
  3. CPU: Industrial temperature grade (-40C to 105C) at 41C
  4. Reset cause: POR
  5. Board: I.MX6U ALPHA|MINI
  6. I2C: ready
  7. DRAM: 512 MiB
  8. MMC: FSL_SDHC: 0, FSL_SDHC: 1
  9. Display: ATK-LCD-4.3-800x480 (800x480)
  10. Video: 800x480x24
  11. In: serial
  12. Out: serial
  13. Err: serial
  14. switch to partitions #0, OK
  15. mmc0 is current device
  16. Net: FEC1
  17. Normal Boot
  18. Hit any key to stop autoboot: 0

 3、u-boot 关键命令修改

网络命令:

  1. setenv ipaddr 192.168.0.50 //开发板ip
  2. setenv ethaddr 00:04:9f:04:d2:35 //MAC
  3. setenv gatewayip 192.168.0.1 //网关
  4. setenv netmask 255.255.255.0 //子网
  5. setenv serverip 192.168.0.67 //服务器ip
  6. saveenv

ping 服务器:

 bootargs 、bootcmd 命令修改(主要目的是控制接下来内核和文件系统的启动方式):

  1. //文件系统启动于emmc
  2. setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
  3. //linux内核启动于 emmc 注意 zImage 和 dtb文件,对应自己硬件
  4. setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000
  5. imx6ull-xxxx.dtb; bootz 80800000 - 83000000;'
  6. //文件系统启动于nfs 注意搭建nfs的路径
  7. setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.0.67:/home/l17/linux/nfs/rootfs,proto=tcp rw
  8. ip=192.168.0.50:192.168.0.67:192.168.0.1:255.255.255.0::eth0:off'
  9. //linux内核启动于 tftp 注意 zImage 和 dtb文件,对应自己硬件
  10. setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-xxxx.dtb; bootz
  11. 80800000 - 83000000;'
  12. //保存当前环境变量
  13. saveenv

4、linux内核编译和移植

笔者这里也不大篇幅介绍linux内核,毕竟菜鸟不好意思讲,同u-boot一样,linux内核我们可以从linux官网下载,不过呢,我们还是直接从nxp官网下载芯片厂商测试过的内核吧。网址为:

https://www.nxp.com/search?keyword=imx6ull&start=0&category=software&filter=typeTax%3E%3Et749https://www.nxp.com/search?keyword=imx6ull&start=0&category=software&filter=typeTax%3E%3Et749https://www.nxp.com/search?keyword=imx6ull&start=0&category=software&filter=typeTax%3E%3Et749或者从第三方开发板商下载。

解压linux内核:

tar -vxjf linux-imx-rel-imx_4.1.15_2.1.0_ga.tar.bz2

 为了今后编译方便,我们在内核目录下,写个脚本:

  1. #!/bin/sh
  2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  3. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
  4. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  5. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

建议构建一个自己的defconfig文件(脚本里面暂时用的官方的),另外dts文件可以从官方evk里面拷贝一个,用于后期驱动搭建。执行脚本,编译内核,大概要几分钟(具体看电脑配置,笔者直接用一台电脑装的ubuntu,非虚拟机,速度还挺快的):

./mx6ull_xxxx.sh    //具体看脚本起的啥名字

提取输出文件:zImage 和 dtb文件。文件路劲在 arch/arm/boot 和 arch/arm/boot/dts

然后将文件通过tftp启动,上文u-boot bootargs 、bootcmd 命令修改有讲解。

5、文件系统搭建

文件系统搭建工具有很多,busybox、buildroot(内含busybox,功能更丰富,但是编译时间更长)、Yocto(适合更专业的人员,小白可以先熟悉前两个,依次来摸索)。

busybox下载地址:BusyBox

buildroot下载地址:Buildroot - Making Embedded Linux Easy

大致操作套路都差不多:

解压构建工具:

  1. tar -vxjf busybox-xxx.tar.bz2
  2. tar -vxjf buildroot-xxx.tar.bz2

打开图形化配置:

make menuconfig

配置内容省略,网上资料很多可以自行搜索。

然后将输出的rootfs.tar压缩包解压到nfs,用于网路调试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/385579
推荐阅读
  

闽ICP备14008679号