第五章 开发板系统工具使用
5.1 Linux 磁盘类工具 / 命令使用
注意 :以下操作都是在开发板上操作,我们的教程涉及多款开发板,不同的 linux 版本,命令用法可能
稍有差异。
5.1.1 df :查看系统已用空间
5.1.1.1 df 支持的命令参数简介
[root@imx6ull:~]# df [-PkmhT] [目录或档名]
选项与参数:
-k :以 KBytes 的容量显示各档案系统;
-m :以 MBytes 的容量显示各档案系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
5.1.1.2 示例一: 将系统内所有的 Filesystem 列出来!
5.1.1.3 示例二: 将文件系统容量显示格式以易读的方式展示。
5.1.1.4 示例三:将系统内的文件系统类型和容量大小以易读的方式展示出来。
5.1.1.5 输出结果提示信息含义简介。
•
Filesystem:代表该系统是在哪个设备的哪个分区,有些是虚拟文件系统比如 tmpfs。
•
Type: 文件系统类型。
•
1k-blocks:说明底下的数字单位是 1KB ,可利用 -h 或 -m 来改变单位;
•
Used:顾名思义,就是使用掉的磁盘空间。
•
Available:也就是剩下的磁盘空间大小。
•
Use%:就是磁盘的使用率,如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不
足造成系统问题。
•
Mounted on:就是磁盘挂载所在目录。
df 读取的资料整个文件系统的统计信息,在显示的结果中你需要特别留意的是那个根目录(/dev/root)
的剩余容量。所有的资料都是由根目录衍生出来的,当根目录的剩余容量剩下 0 时,那你的 Linux 存储
空间肯定不够了。
5.1.2 du 命令统计目录大小
5.1.2.1 du 命令支持参数简介
[root@imx6ull:~]# du [-aHLdclsxhmk] 文件或目录名称
选项与参数:
-a
同时显示每个文件的文件大小
-d
N 将输出限制为深度
-c
显示总计
-s
每个参数仅显示总计
-x
跳过不同文件系统上的目录
-h
可读格式的大小(例如 1K 243M 2G)
-m
大小(以兆字节为单位)
-k
大小(以千字节为单位)(默认)
5.1.2.2 示例一: 统计/etc 目录下所有文件所占用的容量。
先执行“cd /etc”进入/etc 目录,再执行 du 命令:
5.1.2.3 示例二:统计每个文件和目录所占用的容量大小,并以易读的方式展示出来
5.1.2.4 示例三:统计根目录下每个目录所占用的容量
5.1.2.5 示例四:统计 /etc 目录下层级 1 的所有目录所占用的大小。
5.1.3 fdisk 分区工具使用
5.1.3.1 fdisk 工具使用界面简介
5.1.3.2 查看当前系统内所有分区
使用 fdisk –l 列出系统下的所有磁盘设备分区信息,每个磁盘设备的提示信息意义为:
•
Device:装置档名,依据不同的磁盘界面/分区位置而变。
•
StartCHS,EndCHS:指的是 MBR 分区的开始和结束地址。
•
Boot:是否为开机启动区块?通常 Windows 系统的 C 需要这块。
•
Start, End:这个分区在哪个磁柱号码之间,可以决定分区的大小;
•
Sectors:这里指的是此分区占用的扇区个数一共有多少个。
•
Id,Type:分别代表文件系统代号,磁盘类型。
此时我们需要得知,不同的设备分区来自哪个磁盘设备,如下图所示,/dev/mmcblk0 为我插入的 8GB SD 卡
设备,此时可以从下图中得知 此 sd 卡有两个分区信息,容量大小为 7560MB。
5.1.3.3 新增一个分区
fdisk /dev/mmcblk0 :先进入 fdisk 画面;
p :先看一下分区的信息,这里显示只有一个分区。
n :这个时候让你选择 primary partition(主分区) 还是 extended(扩展分区),我们这里输入 p 选择主分
区。
2 :此时让你输入创建到第几个分区,这里直接输入 2, 输入成功后再次打印显示分区信息,显示已经有两
个分区。
w :按 w 可将分区信息存储到分区表中,并离开 fdisk ;当然啰, 如果你反悔了,直接按下 q 就可以
取消刚刚的删除动作,此时,我们需要格式化并挂载新的分区。
从上图可知,我们的第二个分区设备为 /dev/mmcblk0p2 ,分区类型为 Linux ,此时我们可以用如下
命令对其进行格式化,并挂载。
// 格式化此分区设备为 ext3 格式,如果提示是否强制继续,输入 y 即可
[root@imx6ull:~]# mkfs.ext3 /dev/mmcblk0p2
格式化完成后,需要将其挂载到相应的目录,才可对其进行操作,此时我们挂载的目录为 /mnt
root@imx6ull:~]# mount -t ext3 /dev/mmcblk0p2 /mnt
此时可以使用 df –Th 命令查看系统所有的挂载信息,来确认是否挂载成功 以及分区的详细信息。
5.1.3.4 删除一个分区
fdisk /dev/mmcblk0 :先进入 fdisk 操作界面;
p :先看一下分区的信息,这里显示只有一个分区。
d :这时候让你选择删除那个分区,我们有两个分区就选择删除第 2 个分区好了,删除后,再次输入 p 来
查看当前磁盘设备有几个分区。
w :按 w 可将分区信息存储到分区表中,并离开 fdisk ;当然啰, 如果你反悔了,直接按下 q 就可以
取消刚刚的删除动作。
5.1.3.5 修改某个分区的分区类型
fdisk /dev/mmcblk0 :先进入 fdisk 操作界面;
p :先看一下分区的信息,这里显示只有一个分区。
n :这个时候让你选择 primary partition(主分区) 还是 extended(扩展分区),我们这里输入 p 选择主分
区。
t :输入 t 表示要修改分区类型,然后输入需要修改的分区,这里选择第二个分区,
L :列出所有的分区类型,此时输入我们将要修改成的分区类型,这里是要修改成 FAT32(LBA)分区类型,
所以输入 c 。
p :再次显示所有的分区类型,看是否已经更改。
w :按 w 可将分区信息存储到分区表中,并离开 fdisk ;当然啰, 如果你反悔了,直接按下 q 就可以
取消刚刚的删除动作,此时,我们需要格式化并挂载新的分区。
从上图可知,我们的第二个分区设备为 /dev/mmcblk0p2 ,分区类型为重新设置为 FAT32,此时我们可
以用如下命令对其进行格式化,并挂载。
// 格式化此分区设备为 fat 格式,如果提示是否强制继续,输入 y 即可
[root@imx6ull:~]# mkfs.fat /dev/mmcblk0p2
格式化完成后,需要将其挂载到相应的目录,才可对其进行操作,此时我们挂载的目录为 /mnt
root@imx6ull:~]# mount -t vfat /dev/mmcblk0p2 /mnt
此时可以使用 df –Th 命令查看系统所有的挂载信息,来确认是否挂载成功 以及分区的详细信息。
5.2 linux 网络类工具 / 命令使用
5.2.1 bluez 工具使用说明
5.2.2 wpa 工具使用说明
5.2.3 iw 工具使用说明
5.2.4 ssh 登陆工具使用
5.2.5 samba 传输文件工具使用
5.3 linux 系统工具 / 命令使用
5.3.1 kmod 内核模块管理工具使用
5.3.1.1 lsmod:列出已经安装了哪些模块
[root@imx6ull:~]# lsmod
提示信息含义说明:
•
Module :表示模块的名称。
•
Size : 表示模块的大小
•
Used: 使用者。
5.3.1.2 insmod:手工安装模块
后面讲到的 modprobe 命令,它是从/lib/modules 下的目录里自动安装某个模块。但是在实验过程中,
我们经常需要手工安装其他目录下的模块,可以使用以下命令安装(需要指定模块文件即 ko 文件的位置)。
[root@imx6ull:~]# insmod /path/to/module/xxx.ko
[root@imx6ull:~]# insmod -f /path/to/module/xxx.ko // 强制安装
开发板出厂时运行的是我们编译好的内核,当你做实验时需要先编译出自己的内核,然后编译出自己的
驱动程序。如果你不想替换内核,那么你的驱动程序跟板上的内核并不完全匹配。这时就要用 insmod -f 命
令强制安装驱动程序。下面是一个例子:
5.3.1.3 rmmod:卸载掉某个已安装的模块
[root@imx6ull:~]# rmmod <模块名称>
从上图 lsmod 可知系统已经安装了哪些模块,这里我们以卸载 usb wifi 模块驱动为例,具体操作如
下图所示。
5.3.1.4 modinfo:查看某个模块的详细信息
[root@imx6ull:~]# modinfo <模块>
modinfo 命令用于显示 kernel 模块的信息。
用法:
[root@imx6ull:~]# modinfo [-adlpn0Fkbvh] <模块文件>
-a 或--author 显示模块开发人员。
-d 或--description 显示模块的说明。
-l 或—license 显示版本信息
-p 或--parameters 显示模块所支持的参数。
-0 或--null 用 \0 代替 \n
-F 或--field=FIELD 仅打印提供的字段
-k 或--set-version=VERSION 用 VERSION 代替 `uname -r`
-b 或--basedir=DIR 使用 DIR 作为/lib/modules 的文件系统根目录 100ask_imx6ull
User Manual
-V 或--version 显示版本信息
-h 或--help 显示帮助信息
可以在开发板执行 modinfo -h 命令查看帮助信息,如下图:
下面是一个例子,用来显示 evbug 模块的信息:
[root@imx6ull:~]# modinfo evbug
5.3.1.5 modprobe:自动安装模块
modprobe 可载入指定的个别模块,或是载入一组相依的模块。modprobe
会根据 depmod 所产生的相依
关系,决定要载入哪些模块。若在载入过程中发生错误,则 modprobe 会卸载整组的模块。
insmod 与 modprobe 都是用于安装内核模块,差别是:modprobe 能够处理模块的依赖问题。比方你要加
载 a 模块,但是 a 要求系统先载入 b 模块时,直接用 insmod 加载可能会出现错误讯息。modprobe 会自动
加载 b,才加载 a,帮你处理这些依赖关系。
用法:
[root@imx6ull:~]# modprobe [options] [模块名]
开发板执行 modprobe -h 可以看到命令用法,如下图:
常用的命令解释如下:
-r 卸载模块
-f 名制安装或卸载
-r 删除模块(堆栈)或自动清洁
-D 显示依赖
操作示例,modprobe 自动解析依赖并安装相应模块:
注意 :使用modproe也会碰到insmod同样的内核版本不一致问题,可以使用 modprobe -f 强制安装
5.3.2 使用 rz 命令通过串口下载 Windows 文件到开发板上
注意 :rz命令不稳定,不可靠,在没有其他办法的情况下再用它。
可以使用 rz 命令,将 PC 上的文件传输到开发板。
首先使用串口工具登陆开发板,然后在开发板上输入rz命令,此时终端会提示等待接收 ,此时在
Mobaxterm里面鼠标右键会弹出一个选择框,点击Send file using Z-modem 来传输文件,如下图所示:
注意 : rz命令传输速率太小,适合传输小文件,不适合大文件,我们还是推荐nfs挂载的方式进行文件
的传输。
5.3.3 使用 sz 命令通过串口把开发板文件上传给 PC
注意 :sz命令不稳定,不可靠,在没有其他办法的情况下再用它。
开发板启动进入 Linux 后,先在串口中执行命令“sz <要发送的文件>”,然后按住 shift 键的同时,
用鼠标右键点击串口界面,选择“Receive file using Z-modem”,最后在弹出的文件框保存文件。
如下图所示:
第六章 构建系统
6.1 前言
Linux平台上有许多开源的嵌入式linux系统构建框架(框架的意思就是工具),这些框架极大的方便了
开发者进行嵌入式系统的定制化构建,目前比较常见的有OpenWrt, Buildroot, Yocto,等等。其中
Buildroot功能强大,使用简单,而且采用了类似于linux kernel的配置和编译框架,所以受到广大嵌入式
开发人员的欢迎。
本章重点介绍使用Buildroot_2019.02LTS版构建文件系统和u-boot, kernel镜像的方法,并从这三个
部分入手,描述如何使用Buildroot构建一个适合100ask_imx6ull系列开发板的嵌入式Linux系统。
在构建文件系统时,还简要介绍了如何通过Buildroot将QT5图形系统集成到文件系统中, 方便用户后
续开发QT5的应用程序。
无论你是使用VMware还是docker运行Ubuntu,都需要先在Ubuntu中安装很多软件,比如ssh服务、nfs服
务。确保Ubuntu能ping通外网(比如:ping news.qq.com)后,按以下章节配置Ubuntu:
《第 2 篇 环境搭建、Linux 基本操作、工具使用》
《第四章 使用 NAT 配置 Ubuntu 网络》
《第五章 安装软件及开发示例》
6.2 获取源码
源码的获取方法有2种:本地拷贝、在线下载。这2种方法请选择1种,不要同时选择2种方法。 强烈建议
使用在线下载,这种方式得到的源码肯定是最新的。
6.2.1 本地拷贝
注意 :网盘中没有为mini nand版单独提供源码,请用在线下载。
注意 :网盘中的文件不一定是最新的,所以强烈建议使用在线下载源码。
注意:请一定要在Ubuntu下解压100ask_imx6ull-sdk.7z,否则会出现莫名其妙的错误。
通过FileZilla工具上传“网盘开发板配套资料“07_Bsp_sdk (BSP包)/100ask_imx6ull-sdk.7z”文件
到Ubuntu系统/home/book目录下。
执行 7z x 100ask_imx6ull-sdk.7z 解压缩文件(解压缩时请不要用sudo 命令,否则后面编译会有
一系列错误发生)。
book@100ask:~$ 7z x 100ask_imx6ull-sdk.7z
目录结构如下图所示
注意 :如果提示没有7z命令,请先使用命令“sudo apt-get install p7zip”安装(前提是Ubuntu能上
网)。
6.2.2 在线下载
100ask_imx6ull开发板的所有代码都是保存在git站点上通过repo命令进行统一管理,可以通过如下命
令进行下载或同步。
6.2.3
配置 repo
下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置。
book@100ask:~$ git config --global user.name "100ask"
注意: 请先配置git邮箱和用户名,否则会导致下载失败(如下为参考示例图)。
6.2.4
下载源码
通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用。
对于不同版本的IMX6ULL开发板,要执行不同的命令下载源码。
(1) IMX6ULL全功能版
执行以下4条命令,为方便大家复制,第3条是很长的命令,使用了很小的字体:
book@100ask:~$ git clone https://e.coding.net/codebug8/repo.git
book@100ask:~$ mkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk
book@100ask:~/100ask_imx6ull-sdk$ ../repo/repo init -u https://e.coding.net/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml --no-repo-verify
book@100ask:~/100ask_imx6ull-sdk$ ../repo/repo sync -j4
(2) IMX6ULL mini nand版
执行以下4条命令,为方便大家复制,第3条是很长的命令,使用了很小的字体:
book@100ask:~$ git clone https://e.coding.net/codebug8/repo.git
book@100ask:~$ mkdir -p 100ask_myir_mini_imx6ull-sdk && cd 100ask_myir_mini_imx6ull-sdk
book@100ask:~/100ask_myir_mini_imx6ull-sdk$ ../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_myir-imx6ull_mini_linux4.9.88_release.xml --no-repo-verify
book@100ask:~/100ask_myir_mini_imx6ull-sdk$ ../repo/repo sync -j4
注意 :下载成功后,可以看到名为Linux-4.9.88的目录,可以在Ubuntu压缩它,再传回Windows。
在Windows下解压后,用source insight建立工程,这样就可以很方便地阅读源码了。
注意 :使用source insight阅读Linux源码的方法,请参考 《7.4 使用Source Insight阅读Linux内核源
码》 。
Ubuntu下压缩命令为( 最好是下载之后马上压缩,不要编译内核后再压缩,否则文件太大了 ):
tar cjf Linux-4.9.88.tar.bz2 Linux-4.9.88
以下截图是下载IMX6ULL全功能版源码的过程,mini nand版的操作与它类似:
首次下载如果提示 Testing colorized output (for 'repo diff', 'repo status'): 此时输
入 y 即可,继续执行 ../repo/repo sync -j4 命令即可开始同步源码(同步代码根据网络情况需要等待数
分钟)。
下图为参考示例。
同步完成后如下图所示
注意: repo在线下载的代码和网盘配套资料中的代码是一致的,我们会每隔一段时间更新一次源码
包,如使用在线方式获取源码 可以直接在 ~/100ask_imx6ull-sdk 目录下执行 ../repo/repo sync -c进
行同步更新最新代码!
6.3 配置交叉编译工具链
注意 :使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译
的架构环境变量配置,(建议配置为永久生效)。
6.3.1 设置交叉编译工具链
交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其他平台上运行。
设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。
在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修
改本节所讲述的命令。
设置这3个环境变量有多种方法,任意选择其中一种方法即可,建议使用“永久生效”的方法。录制视
频时我会使用多种开发板,所以在视频里我总是使用“临时生效”的方法。
6.3.1.1 永久生效
如需永久修改,请修改用户配置文件。
注意 :如果不会使用vim命令,可以使用图形化的编辑工具,执行:gedit ~/.bashrc
vim ~/.bashrc
(1) IMX6ULL全功能版
在行尾添加或修改,加上下面几行(第3行很长,这里使用小字体方便大家复制):
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
设置完毕后,要执行 source ~/.bashrc 命令使其生效,这条命令是加载这些设置的环境变量。
(2) IMX6ULL mini nand版
在行尾添加或修改,加上下面几行(第3行很长,这里使用小字体方便大家复制):
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf
export PATH=$PATH:/home/book/100ask_myir_mini_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
设置完毕后,要执行 source ~/.bashrc 命令使其生效,这条命令是加载这些设置的环境变量。
以下截图是设置IMX6ULL全功能版工具链的过程,mini nand版的操作与它类似:
6.3.1.2 临时生效
也可以手工执行“ export ”命令设置环境变量,该设置 只对当前终端有效(另开一个终端需要再次设置)。
(1) IMX6ULL全功能版
执行以下3个命令,第3个命令很长,这里使用小字体方便大家复制:
book@100ask:~$ export ARCH=arm
book@100ask:~$ export CROSS_COMPILE=arm-linux-gnueabihf
book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
(2) IMX6ULL mini nand版
执行以下3个命令,第3个命令很长,这里使用小字体方便大家复制:
book@100ask:~$ export ARCH=arm
book@100ask:~$ export CROSS_COMPILE=arm-linux-gnueabihf
book@100ask:~$ export PATH=$PATH:/home/book/100ask_myir_mini_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
6.3.1.3 手动指定
先设置PATH环境变量,然后在make编译时指定ARCH架构 CROSS_COMPILE交叉编译工具链(执行make命令
时指定的参数,只对当前命令有效;下次执行make时仍需要再次指定那些参数)。
(1) IMX6ULL全功能版
示例如下,第1条命令很长,这里使用小字体方便大家复制:
book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
book@100ask:~$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
(1) IMX6ULL mini nand版
示例如下,第1条命令很长,这里使用小字体方便大家复制:
book@100ask:~$ export PATH=$PATH:/home/book/100ask_myir_mini_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
book@100ask:~$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
6.3.2 测试交叉编译工具链
6.3.2.1 测试环境变量:
book@100ask:~$ echo $ARCH
arm
book@100ask:~$ echo $CROSS_COMPILE
arm-linux-gnueabihf-
6.3.2.2 测试交叉编译器:
执行以下命令,结果见后图:
book@100ask:~$ arm-linux-gnueabihf-gcc -v
6.4 解压编译 bootloader
6.4.1 Bootloader 介绍
Bootloader是在操作系统运行之前运行的一段代码,用于引导操作系统。通常每个操作系统都有一组专
属的引导加载程序。引导加载程序通常可以通过多种方式引导操作系统内核,还有各种命令用于调试或修改
内核运行环境。
U-Boot是一个开源的主引导加载程序,用于引导设备的操作系统内核,并含有多种命令以便调试系统。
它适用于多种计算机体系结构,包括68k,ARM,Blackfin,MicroBlaze,MIPS,Nios,SuperH,PPC,RISC-
V和x86。
U-boot官网 https://www.denx.de/wiki/U-Boot
源码下载页面 http://ftp.denx.de/pub/u-boot/
Git仓库地址 https://e.coding.net/weidongshan/imx-uboot2017.03.git
uboot更多使用讲解请参考页面 http://wiki.100ask.org/Category:Uboot
注意 :我们使用的版本针对板子进行过修改,u-boot官网下载的源码不能直接使用。
6.4.2 编译 u-boot 镜像
不同的开发板对应不同的配置文件,配置文件位于 u-boot源码的configs/ 目录。
(1) IMX6ULL全功能版
对于IMX6ULL全功能版,u-boot的编译过程如下(编译uboot前必须先配置好工具链等开发环境):
book@100ask: ~/100ask_imx6ull-sdk$ cd Uboot-2017.03
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make distclean
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make mx6ull_14x14_evk_defconfig
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03$ make
如下为具体的执行步骤:
编译完成后生成的文件如下图所示。
编译完成之后生成u-boot-dtb.imx,可以用于TF卡启动和EMMC启动。为方便学习,建议优先选择从TF卡
启动。
(2) IMX6ULL mini nand版
对于IMX6ULL mini nand版,NAND启动时的u-boot和SD启动时的u-boot是不一样的,需要分开编译。
烧写到nand上的u-boot的编译过程如下(编译uboot前必须先配置好工具链等开发环境):
book@100ask:~$ cd ~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03$ make 100ask_myir_imx6ull_mini_nand_defconfig
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03$ make
编译成功后,在uboot目录下可以看到 u-boot-dtb.imx文件。
烧写到SD/TF卡上的u-boot的编译过程如下(编译uboot前必须先配置好工具链等开发环境):
book@100ask:~$ cd ~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03 100ask_imx6ull
User Manual
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03$ make 100ask_myir_imx6ull_mini_defconfig
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Uboot-2018.03$ make
编译成功后,在uboot目录下可以看到 u-boot-dtb.imx文件。
编译过程就不截图了,可以参考上面为IMX6ULL全功能版编译U-Boot时的截图。
6.5 编译 Linux Kernel
6.5.1 Linux 内核介绍
Linux内核(英语:Linux kernel)是一种开源的类Unix操作系统宏内核。整个Linux操作系统家族基于
该内核部署在传统计算机平台(如个人计算机和服务器,以Linux发行版的形式)和各种嵌入式平台,如路
由器、无线接入点、专用小交换机、机顶盒、FTA接收器、智能电视、数字视频录像机、网络附加存储(NAS)
等。工作于平板电脑、智能手机及智能手表的Android操作系统,它的底层操作系统也是Linux。尽管在桌面
计算机的占用率较低,但基于Linux的操作系统统治了几乎从移动设备到主机的其他全部领域。实际Linux的
发行版Ubuntu,其易用性也逐渐接近Windows。
Linux kernel官网: https://www.kernel.org/
linux Kernel维基百科: https://www.wiki.kernel.org/
在线阅读linux kernel源码: https://elixir.bootlin.com/
Git仓库地址: https://e.coding.net/weidongshan/imx-linux4.9.88.git
更多关于Linux内核资料请参考页面: http://wiki.100ask.org/Category:Linux_Operating_System
上述Git仓库是专为100ask_imx6ull系列开发板制定的Linux内核,它有如下特性:
名称
是否支持
作用
是否开源
USB HOST
支持
USB Host驱动,支持OHCI和EHCI两种传输模式
Yes
USB OTG
支持
Usb otg驱动,支持device模式和host模式
Yes
Network
支持
RJ-45以太网驱动
Yes
MMC/SD
支持
MMC/SD卡驱动
Yes
EMMC
支持
EMMC驱动
Yes
I2C
支持
I2C驱动
Yes
SPI
支持
SPI驱动
Yes
LCD
支持
显示驱动
Yes
RTC
支持
内置RTC时钟驱动
Yes
ADC
支持
ADC驱动
Yes
TouchScreen
支持
电容触摸
Yes
UART
支持
串口驱动
Yes
PMU
支持
电源管理驱动
Yes
LED
支持
LED驱动,包括GPIO LED和PWM
Yes
Button
支持
GPIO Button 驱动
Yes
Camera
支持
摄像头驱动
Yes
6.5.2 编译内核镜像
不同的开发板对应不同的配置文件,配置文件位于内核源码arch/arm/configs/目录。
(1) IMX6ULL全功能版
kernel的编译过程如下(编译内核前需要先配置好工具链等一些环境变量):
book@100ask:~/100ask_imx6ull-sdk$ cd Linux-4.9.88
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make mrproper
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make 100ask_imx6ull_defconfig
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make zImage -j4
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make dtbs
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ cp arch/arm/boot/zImage ~/nfs_rootfs
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs
编译步骤参考如下,编译完成zImage后才可编译设备树文件。
编译完成后生成的文件如下图所示
编译完成后,在arch/arm/boot目录下生成zImage内核文件, 在arch/arm/boot/dts目录下生成设备树
的二进制文件 100ask_imx6ull-14x14.dtb 。
把这2个文件复制到/home/book/nfs_rootfs目录下备用,如下图:
(2) IMX6ULL mini nand版
kernel的编译过程如下(编译内核前需要先配置好工具链等一些环境变量):
book@100ask:~/100ask_myir_mini_imx6ull-sdk$ cd Linux-4.9.88
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ make mrproper
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ make 100ask_myir_imx6ull_mini_defconfig
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ make zImage -jN //N 表示根据 CPU 个数,来加速编译系统
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88 $ make dtbs
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88 $ cp arch/arm/boot/zImage ~/nfs_rootfs
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ cp arch/arm/boot/dts/100ask_myir_imx6ull_mini.dtb ~/nfs_rootfs
编 译 成 功 后 , 可 以 得 到 这 些 文 件 : 内 核 文 件
arch/arm/boot/zImage , 设 备 树 文 件
arch/arm/boot/100ask_myir_imx6ull_mini.dtb。
把这2个文件复制到/home/book/nfs_rootfs目录下备用。
6.5.3 编译内核模块
6.5.3.1 编译内核模块
无论是哪个版本的IMX6ULL开发板,编译内核模块的命令是一样的。
(1) IMX6ULL全功能版
进入内核源码目录后,就可以编译内核模块了:
book@book-virtual-machine:~$ cd ~/100ask_imx6ull-sdk/Linux-4.9.88/
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
内核模块编译完成后截图示例
(2) IMX6ULL mini nand版
进入内核源码目录后,就可以编译内核模块了
book@book-virtual-machine:~$ cd ~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
编译过程请参考上面IMX6ULL全功能版的截图。
6.5.4 安装内核模块到 Ubuntu 某个目录下备用
可以先把内核模块安装到nfs根文件系统(/home/book/nfs_rootfs为安装目录)。
注意 :下面会执行tree命令,如果提示没有该命令,需要执行“sudo apt install tree”命令安装tree
工具(前提是Ubuntu能上网)。
(1) IMX6ULL全功能版
执行以下命令:
book@book-virtual-machine:~$ cd ~/100ask_imx6ull-sdk/Linux-4.9.88/
book@100ask:~/100ask_imx6ull-sdk/Linux-4.9.88$ sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install
如下图,把模块安装在nfs所在目录 /home/book/nfs_rootfs/ 目录下:
安装后的的/home/book/nfs_rootfs/目录结构如下图所示:
(2) IMX6ULL mini nand版
执行以下命令:
book@book-virtual-machine:~$ cd ~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Linux-4.9.88$ sudo make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install 100ask_imx6ull
User Manual
6.6 安装内核和模块到开发板上
注意 : 《第十章 烧写整个系统或更新部分系统》 中列出了很多种更新开发板文件的方法,开发过程中
最常用的是NFS,看本节即可。
假设:执行上述命令后,在Ubuntu的/home/book/nfs_rootfs目录下已经有了zImage、dtb文件,并且有
lib/modules子目录(里面含有各种模块)。
下面,要把这些文件复制到开发板上。
如果你使用的是VMware NAT方式,或是使用docker,假设 Windows IP 为192.168.1.100,在开发板启动
进入Linux后,输入root登录,然后执行以下命令( 注意 :必须指定port为2049、mountport为9999):
mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/book/nfs_rootfs /mnt
cp /mnt/zImage /boot
cp /mnt/*.dtb /boot
cp /mnt/lib/modules /lib -rfd
如果你使用的是VMware桥接方式,假设 Ubuntu IP 为192.168.1.100,在开发板上执行以下命令:
mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book/nfs_rootfs /mnt
cp /mnt/zImage /boot
cp /mnt/*.dtb /boot
cp /mnt/lib/modules /lib -rfd
最后重启开发板,它就使用新的zImage、dtb、模块了。
6.7 使用 Buildroot 构建根文件系统
6.7.1 简介
制作根文件系统有归多种方法:
① 使用Busybox手工制作
Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载、编译,如果它需要某些依
赖库,你还需要手工下载、编译这些依赖库。
如果想做一个极简的文件系统,可以使用Busybox手工制作。
② 使用Buildroot自动制作
它是一个自动化程序很高的系统,可以在里面配置、编译内核,配置编译u-boot、配置编译根文件系统。
在编译某些APP时,它会自动去下载源码、下载它的依赖库,自动编译这些程序。
Buildroot的语法跟一般的Makefile语法类似,很容易掌握。
③ 使用Yocto
NXP、ST等公司的官方开发包是使用Yocto,但是Yocto语法复杂,并且Yocto动辄10GB,下载安装都很困
难,非常不适合初学者。
基于上述特点,我们选择Buildroot。
Buildroot是一组Makefile和补丁,可简化并自动化地为嵌入式系统构建完整的、可启动的Linux环境
(包括bootloader、Linux内核、包含各种APP的文件系统)。Buildroot运行于Linux平台,可以使用交叉编
译工具为多个目标板构建嵌入式Linux平台。Buildroot可以自动构建所需的交叉编译工具链,创建根文件系
统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立
组合。例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。
参考网址
Buildroot用户手册 https://buildroot.org/downloads/manual/manual.html
BuildRoot源码下载位置 https://buildroot.org/downloads/
目录结构的位置以及作用请参考网址 http://wiki.100ask.net/Buildroot
Git仓库地址 https://e.coding.net/weidongshan/buildroot_2019.02.git
学习更多关于buildroot知识请参考 http://wiki.100ask.org/Buildroot
百问网提供的 Buildroot 有如下特性:
文件系统支持
作用
web环境
html+php网络开发环境
Qt环境
Qt 5.9开发环境(选用)
Vim开发环境
vim8.0环境
串口传输文件
通过z-mode协议使用串口传输文件到开发板
ssh工具
通过ssh工具登录开发板系统
nfs工具
通过nfs命令挂载主机文件
Alsa-utils
Alsa声卡使用工具
Can-utils
Can接口测试工具
Wifi工具
用于链接wifi网络/扫描wifi相关工具
fb-test
用于测试lcd显示色彩是否正常
Pppd
用于拨号上网工具
其它工具介绍
参考http://wiki.100ask.org/100ask_imx6ull
6.8 构建 IMX6ULL 全功能版的根文件系统
6.6.2.1 配置文件说明
配置文件
含义
100ask_imx6ull-nfs_defconfig
专门用于nfs启动使用的文件系统
100ask_imx6ull_defconfig
默认文件系统版本(包含除qt以外所有工具)
100ask_imx6ull-qt_defconfig
包含Qt文件系统版本
6.6.2.2 编译系统
下面以100ask_imx6ull_defconfig配置文件为例,说明 Buildroot 的配置过程:
book@100ask: ~/100ask_imx6ull-sdk $ cd Buildroot_2019.02
book@100ask:~/100ask_imx6ull-sdk/Buildroot_2019.02$ make clean
book@100ask:~/100ask_imx6ull-sdk/Buildroot_2019.02$ make 100ask_imx6ull_defconfig
book@100ask:~/100ask_imx6ull-sdk/Buildroot_2019.02$ make all
注意: 机器性能不同,编译时间不同。性能差的电脑,有可能需要等待1 ~ 2个小时。
编译完成后如下图所示。
6.6.2.3 镜像文件
编译成功后文件输出路径为 output/images
buildroot2019.02
├── output
├── images
├── 100ask_imx6ull-14x14.dtb <--设备树文件
├── rootfs.ext2
<--ext2 格式根文件系统
├── rootfs.ext4 -> rootfs.ext2
<--ext2 格式根文件系统
├── rootfs.tar
├── rootfs.tar.bz2
<--打包并压缩的根文件系统,用于 NFSROOT 启动
├── sdcard.img
<--完整的 SD 卡系统镜像
├── u-boot-dtb.imx
<--u-boot 镜像
└── zImage
<--内核镜像
可以参考 《第七章 烧写整个系统或更新部分系统》 把上面编译出来的emmc.img烧写到EMMC,把上面编
译出来的sdcard.img烧写到SD/TF卡。
深入了解学习更多关于buildroot知识请参考 http://wiki.100ask.org/Buildroot
6.9 构建 IMX6ULL mini nand 版的根文件系统
6.9.1 配置文件说明
配置文件
含义
100ask_myir_imx6ull_mini_defconfig
用于myir imx6ull 256MB NAND flash SD卡启动的
文件系统,使用busybox init进程文件系统。
100ask_myir_imx6ull_mini_nandflash_defconfig
用于myir imx6ull 256MB NAND flash ubi文件系
统,使用busybox init进程文件系统
100ask_myir_imx6ull_mini_systemV_defconfig
用于SD卡启动的文件系统,使用systemV守护服务
6.9.2 编译 nand flash 文件系统
使用以下命令编译出的文件,可以烧写到imx6ull mini nand版的Nand Flash上:
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make clean
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make 100ask_myir_imx6ull_mini_nandflash_defconfig
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make all
注意: 机器性能不同,编译时间不同。性能差的电脑,有可能需要等待1 ~ 2个小时。
编译成功后文件输出路径为 output/images:
buildroot2019.02
├── output
├── images
├── 100ask_myir_imx6ull_mini.dtb <--设备树文件
├── rootfs.tar
├── rootfs.tar.bz2
<--打包并压缩的根文件系统,用于 NFSROOT 启动
├── rootfs.ubi
<--nandflash 文件系统 ubi 格式镜像
├── rootfs.ubifs
├── u-boot-dtb.imx
<--u-boot 镜像
└── zImage
<--linux 内核镜像
可以参考 《第七章 烧写整个系统或更新部分系统》 把上面编译出来的rootfs.ubi、zImage、u-boot
dtb.imx、100ask_myir_imx6ull_mini.dtb等文件烧写到Nand Flash上。
深入了解学习更多关于buildroot知识请参考 http://wiki.100ask.org/Buildroot
6.9.3 编译 SystenV 服务系统
使用以下命令编译出的文件,可以烧写到imx6ull mini nand版的SD/TF卡上:
book@100ask:~/100ask_myir_mini_imx6ull-sdk$ cd Buildroot_2019.02
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make clean
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make 100ask_myir_imx6ull_mini_systemV_defconfig
book@100ask:~/100ask_myir_mini_imx6ull-sdk/Buildroot_2019.02$ make all
注意: 机器性能不同,编译时间不同。性能差的电脑,有可能需要等待1 ~ 2个小时。
编译成功后文件输出路径为 output/images:
buildroot2019.02
├── output
├── images
├── 100ask_imx6ull-14x14.dtb <--设备树文件
├── rootfs.ext2
<--ext2 格式根文件系统
├── rootfs.ext4 -> rootfs.ext2
<--ext2 格式根文件系统
├── rootfs.tar
<--打包并压缩的根文件系统,用于 NFSROOT 启动
├── rootfs.tar.gz
├── sdcard.img
<--完整的 SD 卡系统镜像
├── u-boot-dtb.imx
<--u-boot 镜像
└── zImage
<--内核镜像
可以参考 《第七章 烧写整个系统或更新部分系统》 把上面编译出来的sdcard.img、zImage、u-boot
dtb.imx、100ask_imx6ull-14x14.dtb等文件烧写到SD/TF卡上。
深入了解学习更多关于buildroot知识请参考 http://wiki.100ask.org/Buildroot
第七章 烧写整个系统或更新部分系统
百问网开发了一款烧写软件:100ask_imx6ull_flashing_tool,它的界面如下:
使用这软件,只需要一条 USB 线连接电脑和开发板 USB OTG 口,只需要点击一个按钮就可以实现某项
烧写功能。
100ask_imx6ull_flashing_tool 是一个 GUI 前端,它调用 NXP 官方的烧写工具 uuu:Universal Update
Utility(又名 mfgtools 3.0)。
市面上的 imx6ull 开发板多是使用 mfgtools 2.0 来烧写,效率不高,脚本复杂;uuu 有所改进,但是
烧写效率还是不高。
我们做了很多改进,烧写更方便、效率更高。使用 mfgtools 烧写 500M 的映象文件到 EMMC,耗时 5 分
钟;而使用 100ask_imx6ull_flashing_tool 只需要 1 分钟。
本章会首先介绍 100ask_imx6ull_flashing_tool 的使用,后面也会介绍常规的烧写方法。
7.1 100ASK_IMX6ULL 启动开关
7.1.1 全功能版
100ask_imx6ull 全功能版支持 USB、EMMC、SD/TF 卡三种启动方式。使用后 2 种启动方式之前,需要先
在 EMMC 或 SD/TF 卡上烧写系统。
板子背后画有一个表格,表示这 3 种方式如何设置。表格如下:
BOOT CFG
BOOT
SW1(LCD_DATA5)
SW2(LCD_DATA11)
SW3(BOOT_MODE0)
SW4(BOOT_MODE1)
EMMC
OFF
OFF
ON
OFF
SD
ON
ON
ON
OFF
USB
X
X
OFF
ON
这 3 种启动方式的设置示意图如下:
其中的 USB 启动模式主要用来烧写系统。
注意 :设置为 USB 启动时,不能 先 插上 SD/TF 卡。
要在 USB 启动模式下烧写 SD/TF 卡时,需要 先上电再插卡,先上电再插卡,先上电再插卡, 。
7.1.2 mini nand 版
板子上有个启动选择开关,如下:
注意 :设置为 USB 启动时,不能插上 SD 卡、TF 卡;上电之后才可以插卡。
刚出厂的板子在 Nand 上烧写了系统,你可以设置为 Nand 启动方式。
7.2 在 Windows 使用 USB 烧写工具
NXP 公司给 IMX6ULL 提供了烧写工具:mfgtools。它的使用界面如下:
操作很简单,一键烧写整个映象文件。
但是,缺点也很多:
a. 不能单独烧写 bootloader、内核、设备树
或者说,可以实现这些功能,但是需要你去修改 xml 配置文件,对初学者不友善,对老手也显得麻烦。
b. 烧写速度慢
烧写 500M 的系统,耗时 5 分钟(我们的工具可以在 1 分钟内烧完)。
基于上述缺点,我们开发了新的烧写工具 100ask imx6ull flashing tool,并且完全开源。它有如下
特点:
a. 可以烧写整个系统,也可以分开烧写 bootloader、内核、设备树
b. 可以上传用户文件到开发板系统中任意目录里
c. 烧写速度是原厂工具的 5 倍
d. 支持所有厂家的开发板烧写,注意:不只是支持 100ASK_IMX6ULL,还支持其他厂家的 IMX6ULL 开发板。
从 网 盘 下 载 工 具 后 , 在 “ 01_Tools( 工 具 )/100ask_imx6ull 烧 写 工 具 ” 目 录 下 双 击 运 行
“100ask_imx6ull_flashing_tool.exe”。
它有“基础版”、“专业版”两个页面。
“基础版”是专为 100ASK_IMX6ULL 设计的,点击一下即可完成某项烧写。
“专业版”功能更强大,特别是它可以上传文件到某个分区、某个目录。有些厂家的开发板,zImage 和
设备树是在第 1 个分区里的,而 100ASK_IMX6ULL 的 zImage 和设备树是在第 2 个分区里,所以这些厂家的
开发板就无法使用基础版来烧写,需要使用专业版,指定分区、指定分区格式、指定路径,然后再上传文件。
注意 :开发板必须设置为 USB 模式,如果要用 SD/TF 卡,必须先上电再插卡;
不能先插卡再上电,不能先插卡再上电,不能先插卡再上电!
7.2.1 烧写工具目录详解
在 100ASK_IMX6ULL 的配套资料中,有文件:“01_Tools (工具)/100ask_imx6ull 烧写工具.tar.bz2”,
把它解压后可得如下目录:
要留意的是 files 目录下的文件,各文件的作用在上图中列出来了,文件名不能改变,要更新某文件时
需要覆盖旧文件。
这个烧写工具不断更新,现在是 V3.0 版本,增加了 Nand Flash 的烧写功能。上述截图中 files 目录
下内容更丰富了,请见下表。
如果要更新某个文件,把新文件放进去覆盖同名文件即可。
目录
文件
说明
files
u-boot-dtb.imx
IMX6ULL 全功能版的 u-boot,烧到 EMMC 或 SD/TF 卡
u-boot-dtb_nand.imx
IMX6ULL mini nand 版的 u-boot,烧到 Nand
u-boot-dtb_nandsd.imx
IMX6ULL mini nand 版的 u-boot,烧到 SD/TF 卡
zImage
内核,适用于多个板子
100ask_imx6ull-14x14.dtb
IMX6ULL 全功能版的设备树文件
100ask_myir_imx6ull_mini.dtb
IMX6ULL mini nand 版的设备树文件
emmc.img
IMX6ULL 全功能版的 EMMC 映像文件
sdcard.img
IMX6ULL 全功能版的 SD/TF 卡映像文件
rootfs.ubi
IMX6ULL mini nand 版的 Nand Flash 映像文件
7.2.2 连接 USB OTG 线
接线、设置 USB 启动的方式如下:
注意 :USB 串口线可接可不接,接上只是为了观察烧写过程。
注意 :设置为 USB 启动时,先不要接 TF 卡
(1) 全功能版接线方式
(2) mini nand 版接线方式
7.2.3 安装 IMX6ULL 的 USB 驱动程序
通过 USB 下载或是烧写程序时,需要把开发板的 OTG 口用 USB 线连接到电脑。一般都会自动安装驱动,
烧写软件的绿灯不亮时,则很有可能是驱动程序没有安装好,这时再来看本节文档。
7.2.3.1 VMWARE 可能会截取 USB 设备导致烧写失败
如果你运行了 VMWARE,它会截取 USB 设备,可能会有如下提示:
要选择“连接到主机”,勾选“记住我的选择,以后不再询问”。
也许你不慎点错了“连接到虚拟机”,那也没关系,在 VMWARE 的菜单中把“Freescale SE Blank 6ULL”
或“Netchip USB download gadget”断开连接,如下图所示:
7.2.3.2 USB 驱动没有自动安装
通过 USB 下载或是烧写程序时,需要把开发板的 OTG 口用 USB 线连接到电脑。IMX6ULL 开发板会通过这
一个 OTG 口,模拟出 2 个 USB 设备(先后模拟,不是同时):“Freescale SE Blank 6ULL”、“USB download
gadget”。一般会自动安装好驱动程序,如果驱动程序没安装好,你可以去下载“zadig”来安装驱动。
安装第 1 个驱动 :只要开发板设为 USB 启动(不要插 SD/TF 卡)并上电,电脑就会识别出“Freescale SE
Blank 6ULL”设备,一般都会自动给它安装驱动程序。
如果没有自动安装好驱动程序(“设备已连接”绿灯没亮),要使用 zadig 安装 libusb-win32 驱动。
先去 https://zadig.akeo.ie/ 下载 zadig 并运行,然后参考下图安装驱动程序:
安装第 2 个驱动 :当烧写工具的“设备已连接”绿灯亮起,就可以在“专业版”点击“运行”按钮,这
时电脑会识别出“USB download gadget”设备,一般都会自动给它安装驱动程序,如下图:
如果没有自动安装好驱动程序(“固件已运行”绿灯没亮),先去 https://zadig.akeo.ie/ 下载 zadig 并
运行,然后参考下图安装驱动程序:
如果一切正常,烧写工具的 2 个绿灯都会亮,如下:
这就表示所有驱动都安装好了,可以重启开发板,使用后面 2 节的方法来烧写。
7.2.4 基础版烧写方法
要更新某个文件,就把它复制到烧写工具的 files 目录,比如 zImage、100ask_imx6ull-14x14.dtb。
举例 :要更新内核,先把新的 zImage 覆盖 files 目录下的 zImage,然后接线,上电,选择设备,点击
“更新内核”即可。
板子复位或重新上电后,在 APP 里操作即可,一个图就可以列清楚所有步骤:
当开发板设为 USB 模式,上图的烧写工具中“设备已连接”的绿灯亮起,就可以通过按钮一键烧写了,
各按钮作用如下:
按钮
作用
烧写整个系统
“选择设备”为 EMMC 时,把 emmc.img 烧到 EMMC 上;
“选择设备”为 SD/TF 时,把 sdcard.img 烧到 SD/TF 卡上;
“选择设备”为 NAND 时,把 rootfs.ubi 烧到 Nand Flash 上;
并且会烧写对应的 U-Boot,请看下面的“更新 Uboot”按钮说明。
更新内核
把 zImage 上传到根文件系统的/boot 目录
(对于 Nand,是直接烧到内核分区)
更新设备树
把 100ask_imx6ull-14x14.dtb 上传到根文件系统的/boot 目录
(对于 Nand,是直接烧到设备树分区)
更新 Uboot
对于 IMX6ULL 全功能版:
①“选择设备”为 EMMC 时,把 u-boot-dtb.imx 烧写到 EMMC
②“选择设备”为 SD/TF 时,把 u-boot-dtb.imx 烧写到 SD/TF 卡
对于 IMX6ULL mini nand 版:
①“选择设备”为 NAND 时,把 u-boot-dtb_nand.imx 烧写到 Nand Flash
②“选择设备”为 SD/TF 时,把 u-boot-dtb_nandsd.imx 烧写到 SD/TF 卡
烧写裸机
把所选裸机文件,烧写到 EMMC、SD/TF 卡或 Nand Flash
上传文件
把所选用户文件,上传到根文件系统的/目录
对于 imx6ull mini nand 版,无法上传文件(只支持 ext4 文件系统,而它不是)
7.2.5 专业版烧写方法
专业版的强大在于烧写文件时可以选择任意文件,上传文件时可以指定分区、分区格式、目标路径。用
法也很简单,一图足以说明:
有些开发板厂家把内核 zImage、设备树放在第 1 个分区里,它通常是 FAT 分区。那么可以使用专业版
来更新内核、更新设备树。
比如:
几乎所有的开发板的第 2 个分区都是 EXT4 格式,我们可以上传文件到它的任意目录下,比如:
7.3 在 Ubuntu 下使用 uuu 来烧写
Windows 下的 100ask_imx6ull_flashing_tool 实际上只是一个 GUI 前端,它通过调用命令行工具 uuu
来烧写系统。
我们没有给 Ubuntu 编写 GUI,只能使用命令行来操作;这个方法同样适用于 Windows。
解压“100ask_imx6ull 烧写工具.tar.bz2”后,可得如下文件:
100ask_imx6ull 烧写工具
├── bin // 烧写用的程序
│ ├── uuu // Linux 下的烧写工具
│ └── uuu.exe // Windows 下的烧写工具
├── doc
│ └── UUU.pdf
├── files // 在 files 目录下保存要烧写的文件,文件名不能改,要更新请覆盖旧文件
│ ├── 100ask_imx6ull-14x14.dtb // 设备树
│ ├── emmc.img // emmc 映象文件
│ ├── led.imx // 裸板文件,示例
│ ├── sdcard.img // sd/tf 卡映象文件
│ ├── u-boot-dtb.imx // u-boot
│ └── zImage // 内核
├── firmware // 固件, uuu 要借助这个目录下的 u-boot 来烧写,这是我们特制的
│ └── u-boot-dtb_fastboot_100ask.imx
└── scripts/basic // 基础版脚本
├── emmc // 烧写 emmc 的脚本
│ ├── write_all.clst // 烧写 EMMC 的整个映象文件: files/emmc.img
│ ├── write_boot.clst // 烧写 u-boot : files/u-boot-dtb.imx
│ ├── write_dtb.clst // 烧写设备树: files/100ask_imx6ull-14x14.dtb
│ └── write_kernel.clst // 烧写内核: files/zImage
├── nand // 烧写 nand 的脚本,我们还没实现,我们的板子没有 nand
└── sd // 烧写 sd/tf 卡的脚本
├── write_all.clst // 烧写 sd/tf 卡的整个映象文件: files/sdcard.img
├── write_boot.clst // 烧写 u-boot : files/u-boot-dtb.imx
├── write_dtb.clst // 烧写设备树: files/100ask_imx6ull-14x14.dtb
└── write_kernel.clst // 烧写内核: files/zImage
注意 事项:
a. 用 USB 线连接电脑和开发板的 USB OTG 接口,USB 串口可接可不接,建议接上观察效果。
b. 要烧写 SD/TF 卡,设置好 USB 启动方式后, 必须先上电再插卡,绝对不能先插卡再上电 。
c. 上电一次,只能点一次按钮烧写;要再次烧写,需要重新上电。
e. 在 Ubuntu 下执行命令时前面要加 sudo 。
使用 uuu 烧写的步骤很简单,简单地说就是:
设置 USB 启动模式,接线,复位(或重新上电),插卡(要用卡的话),执行 uuu 命令。
如果要再次执行 uuu 命令来烧写,必须重来一次:
拔卡(有的话)、复位(或重新上电)、插卡(要用卡的话),执行 uuu 命令。
uuu 命令用法:在 100ask_imx6ull 烧写工具目录下,执行命令:
sudo ./bin/uuu scripts 目录下的某个脚本 // Ubuntu 下才需要加 sudo , Windows 下不用加
比如要烧写 EMMC 的整个系统,即把 files/emmc.img 烧写到 EMMC 上,执行如下命令:
sudo ./bin/uuu scripts/basic/emmc/wirte_all.clst
对于裸机程序,因为裸机程序的名字各有不同,我们没有提供固定的脚本。命令解析如下:
sudo ./bin/uuu -b emmc firmware/u-boot-dtb_fastboot_100ask.imx files/led.imx // 借助 u-boot 把 led.imx 烧
到 EMMC
或
sudo ./bin/uuu -b sd firmware/u-boot-dtb_fastboot_100ask.imx files/led.imx // 借助 u-boot 把 led.imx 烧
到 sd/tf 卡
7.4 更新根文件系统
并不需要单独去更新根文件系统,使用我们提供的 Buildroot 系统可以制作出 emmc.img、sdcard.img,
把它们烧写到 EMMC 或 SD/TF 卡上去就可以了。
可以先把 emmc.img 或 sdcard.img 复制到烧工具的 files 目录,然后用烧写工具的“基础版”来更新
系统。
7.5 老方法:使用 mfgtool 烧写整个系统到 EMMC 上
注意 :仅适用于 IMX6ULL 全功能版,对于 IMX6ULL mini nand 版已放弃使用 mfgtool。
解压缩网盘配套资料目录下 02_Images (系统固件)\Emmc\100ask_imx6ull-mfgtools.zip 到任意文件
夹。
然后就可以开始烧写了,步骤如下:
1) 设置开发板为 USB 启动,接线,上电
如下图所示, 注意 :设置为 USB 启动时,不要接 TF 卡;下图中 USB OTG 线是连接到电脑的。
2) 双击运行 mfgtools
进入解压后的 100ask_imx6ull-mfgtools 文件夹下,双击 buildroot-image-100ask_100ask-ddr512m
emmc4g.vbs 打开烧写程序,烧写过程中保持 usb 连接。
3) 设置开发板启动方式为 Emmc,重新上电即可观察到效果(启动方式设置在开发板背面印有丝印说明)。
7.6 老方法:使用 win32diskimage 通过读卡器烧写 SD/TF 卡
安装映象烧写工具 win32diskimager 后,插卡到电脑上,直接烧写即可。
1) 安装软件
在 “ 网 盘 配套资料 \01_Tools ( 工 具 )\01_Tools.zip ” 中解压得到
win32diskimager-1.0.0-
install.exe 软件,以后运行它时要“以管理员身份运行”。
2) 把 SD/TF 卡接入读卡器,读卡器插到电脑上
3) 烧写映像文件
“以管理员身份运行”win32diskimager,如下图选择 SD 卡、选择映像文件 sdcard.img,然后点击“写
入”,操作步骤如下图所示:
上图中各序号含义为:
1.
选择 SD 卡
2.
选择映象文件,比如 sdcard_20200211.img
3.
点击“写入”
4.
确定要写入。
烧写成功后,弹出对话框“ 写入成功” ,如下图:
此时点击 OK,拔下 SD 卡,将启动开关拨到 SD 卡处,上电启动开发板。
7.7 老方法:使用板子的 Linux 系统来烧写
Linux 系统功能强大,IMX6ULL 启动 Linux 后,当然也可以烧写
EMMC、SD/TF 卡,当然就可以更新 u
boot、内核、设备树等等。
7.7.1 烧写 u-boot 到 EMMC 或 SD/TF 卡
首先将编译好的 uboot 镜像文件拷贝至 Ubuntu nfs 目录,启动开发板系统,在开发板上挂载 Ubuntu nfs
目录。
如果你使用的是VMware NAT方式,或是使用docker,假设 Windows IP 为192.168.1.100,在开发板上执
行以下命令( 注意 :必须指定port为2049、mountport为9999):
[root@imx6ull:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/book/nfs_rootfs /mnt
如果你使用的是VMware桥接方式,假设 Ubuntu IP 为192.168.1.100,在开发板上执行以下命令:
[root@imx6ull:~]# mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book/nfs_rootfs /mnt
接下来在 Ubuntu 上先将编译好的 u-boot-dtb.imx 复制到/home/book/nfs_rootfs 目录,如下图所示:
最后在开发板上把 NFS 目录中的 u-boot-dtb.imx 复制到开发板家目录下:
(1) 拷贝成功后,如果要烧写 EMMC,执行如下命令:
[root@imx6ull:~]# echo 0 > /sys/block/mmcblk1boot0/force_ro
//取消此分区的只读保护
[root@imx6ull:~]# dd if=u-boot-dtb.imx of=/dev/mmcblk1boot0 bs=512 seek=2 //实际烧写命令
[root@imx6ull:~]# echo 1 > /sys/block/mmcblk1boot0/force_ro
//打开此分区的只读保护
烧写完成后,确保开发板设置为 EMMC 启动,可以观察到刚烧写的 U-boot 的启动信息。
(2) 拷贝成功后,当前目录有 u-boot-dtb.imx,如果要烧写 SD/TF 卡,执行如下命令:
[root@imx6ull:/]# dd if=u-boot-dtb.imx of=/dev/mmcblk0 bs=512 seek=2
烧写完成后,确保开发板设置为 SD/TF 卡启动,可以观察到刚烧写的 U-boot 的启动信息。
7.7.2 开发板挂载 NFS 目录后更新内核或设备树
开发板使用的内核名为 zImage,设备树名为 100ask_imx6ull-14x14.dtb。它们保存在开发板的/boot
目录中。
更新它们很简单:只要替换/boot 目录下的文件即可。
如果你使用的是VMware NAT方式,或是使用docker,假设 Windows IP 为192.168.1.100,在开发板上执
行以下命令( 注意 :必须指定port为2049、mountport为9999):
[root@imx6ull:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/book/nfs_rootfs /mnt
如果你使用的是VMware桥接方式,假设 Ubuntu IP 为192.168.1.100,在开发板上执行以下命令:
[root@imx6ull:~]# mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book/nfs_rootfs /mnt
挂载成功后将已经拷贝到 Ubuntu nfs 目录中的内核、设备树文件拷贝到开发板/boot 目录下,替换掉
原来的文件:
[root@100ask_imx6ull:~]# cp /mnt/zImage /boot
[root@100ask_imx6ull:~]# cp /mnt/100ask_imx6ull-14x14.dtb /boot
[root@100ask_imx6ull:~]# sync
等待同步完成后重启开发板即可。
注意:更新完成新编译的 zImage 内核镜像和设备树文件后,还需要更新内核模块驱动文件,否则可能会
出现某些外围设备无法使用的问题,内核模块编译方法和安装方法请参考:
《第 2 篇 环境搭建、Linux 基本操作、工具使用》
《第九章 开发板的第 1 个驱动程序》
7.8 老方法:在 VMWare 的 Ubuntu 中更新 SD/TF 卡
7.8.1 烧写 u-boot 到 SD/TF 卡
首先 TF 卡插入读卡器,再把读卡器插入电脑。VMWare 有时候会自动弹出对话框,选择“连接到虚拟机”
即可;如果没有对话框,可以通过菜单“可移动设备”找到 SD 卡,点击“连接”。
然后使用 dmesg 命令获取设备挂载的设备节点,根据 log 信息获得该磁盘设备有两个分区,分别是
/dev/sdb1、/dev/sdb2。/dev/sdb 表示整个卡。如下图所示:
book@100ask: ~/100ask_imx6ull-sdk/Uboot-2017.03 $ dmesg
使用 dd 命令烧写 imx 镜像文件到 /dev/sdb 设备, 注意 :是烧写到 1K 偏移处:
book@100ask: ~/100ask_imx6ull-sdk/uboot2017.03$ sudo dd if=u-boot-dtb.imx of=/dev/sdb bs=1k seek=1 conv=fsync
烧写成功后,把 SD/TF 卡插到开发板上,设置在 SD/TF 卡启动,上电即可看到 u-boot 信息。
7.8.2 更新 SD/TF 卡中的内核和设备树
首先 TF 卡插入读卡器,再把读卡器插入电脑。VMWare 有时候会自动弹出对话框,选择“连接到虚拟机”
即可;如果没有对话框,可以通过菜单“可移动设备”找到 SD 卡,点击“连接”。
使用 vmware 连接 TF 卡设备后,Ubuntu 系统系统会自动挂载 tf 卡内的分区文件系统,如下图所示,我
的
TF 卡第二个分区被挂载到了 /media/book/fa14c024-8350-4efb-bf5b-14b72728ee32 (每个人的挂载目
录可能会不一样) 目录下,此时可以进入此目录进行操作。
我们进入这个已经挂载的 TF 卡第二个分区目录,通过 ls 命令查看一下目录下都有哪些文件:
之后我们需要拷贝之前编译好的 zImage 文件到 TF 卡的 boot 目录下,替换已有的,执行步骤如下:
a. 进入 boot 目录
b. 使用 sudo 命令拷贝之前编译好的目录到 TF 卡文件系统的 boot 目录下
此时会提示你输入 Ubuntu 用户密码,输入后确认,此时开始拷贝文件。
c. 拷贝完成后使用 sync 命令同步数据缓存,
d. 最后切换到另一个目录,使用 sudo umount 命令卸载 TF
最后就可以取出 TF 卡,插入开发板等待启动系统。