ELADCMSecondEditionThirdChapter

来自百问网嵌入式Linux wiki

__NOTITLE__

目录

第三篇. 开发板快速上手

资料下载

打开http://wiki.100ask.net,可以看到所有资料的下载地址。找到对应开发板的BSP包,下载对应的BSP包。

接线与启动

100ASK_AM335X开发板

串口连接

将串口模块与电脑USB口、板子RS232口连接:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 001.png
其中特别需要注意的几点:
① 串口模块的电平选择开关拨到如图所示的左边,表示切换到RS232电平;
② RS232延长线连接板子如图所示下方的RS232接口,下方的才是默认的debug接口;
③ 板子的启动选择拨到如图所示的右边,以选择从Nand Flash启动;
④ 板子如图所示插上配套的电源,电源开关暂时不用打开;
将USB转RS232/TTL串口模块插在电脑USB上时,Windows会自动安装驱动(安装可能比较慢,等一分钟左右)。
打开电脑的“设备管理器”,在“端口 (COM和LPT)”项下,可以看到如下图 中的“Silicon Labs CP210x USB to UART Bridge (COM12)”。
这里的“COM12”可能与你电脑上的不一样,记住你电脑上设备管理器中显示的数字。
如果电脑没有显示出端口号,就需要手动安装驱动,从驱动精灵官网(www.drivergenius.com)下载一个驱动精灵,安装、运行、检测,会自动安装上串口驱动。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 002.png
最后打开MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示设置端口号(前面设备管理器显示的端口号)、波特率(Speed:115200)、流控(Flow control:None),最后点击“OK”即可。
注意:流控(Flow Control)一定要选择none,否则你将无法在MobaXterm中向串口输入数据。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 003.png
随后显示一个黑色的窗口, 此时打开板子的电源开关,将收到板子串口发过来的数据,如下图所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 004.png

启动方式选择

如下图,板上有启动方式选择开关,也标有文字:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 005.png

Firefly-rk3288开发板

串口连接

将串口模块与电脑USB口、板子UART口连接:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 006.png
其中特别需要注意的几点:
①串口模块的电平选择开关拨到如图所示的右边,表示切换到TTL电平;
②串口模块附赠两条排线,使用较宽的那根(2.54mm间距)连接串口模块最中间接口;
③排线的另一端插在Firefly-RK3288如图所示位置,注意黑线(GND)在最下面;
④板子如图所示准备好配套的电源,因为没有电源开关,插上就自动启动了,所以暂时先不插电源
将USB转RS232/TTL串口模块插在电脑USB上时,Windows会自动安装驱动(安装可能比较慢,等一分钟左右)。
打开电脑的“设备管理器”,在“端口 (COM和LPT)”项下,可以看到如下图 中的“Silicon Labs CP210x USB to UART Bridge (COM12)”。
这里的“COM12”可能与你电脑上的不一样,记住你电脑上设备管理器中显示的数字。
如果电脑没有显示出端口号,就需要手动安装驱动,从驱动精灵官网(www.drivergenius.com)下载一个驱动精灵,安装、运行、检测,会自动安装上串口驱动。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 002.png
最后打开MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示设置端口号(前面设备管理器显示的端口号)、波特率(Speed:115200)、流控(Flow control:None),最后点击“OK”即可。
注意:流控(Flow Control)一定要选择none,否则你将无法在MobaXterm中向串口输入数据。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 003.png

随后显示一个黑色的窗口, 此时打开板子的电源开关,将收到板子串口发过来的数据,如下图所示:

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 007.png

启动方式选择

Firefly-rk3288开发板没有启动方式选择开关,rk3288芯片会优先从板上Flash启动,如果失败再从SD卡启动。
板上有电源开关,复位开关,各个功能也标有文字:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 008.png

roc-rk3399-pc开发板

串口连接

将串口模块与电脑USB口、板子UART口连接:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 009.png
其中特别需要注意的几点:
① 串口模块的电平选择开关拨到如图所示的右边,表示切换到TTL电平;
② 串口模块附赠两条排线,使用较宽的那根(2.54mm间距)连接串口模块最中间接口;
③ 排线的另一端插在Firefly-RK3288如图所示位置,注意黑线(GND)在最右面;
④ 板子如图所示准备好配套的电源,因为没有电源开关,插上就自动启动了,所以暂时先不插电源
将USB转RS232/TTL串口模块插在电脑USB上时,Windows会自动安装驱动(安装可能比较慢,等一分钟左右)。
打开电脑的“设备管理器”,在“端口 (COM和LPT)”项下,可以看到如下图 中的“Silicon Labs CP210x USB to UART Bridge (COM12)”。
这里的“COM12”可能与你电脑上的不一样,记住你电脑上设备管理器中显示的数字。
如果电脑没有显示出端口号,就需要手动安装驱动,从驱动精灵官网(www.drivergenius.com)下载一个驱动精灵,安装、运行、检测,会自动安装上串口驱动。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 002.png
最后打开MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示设置端口号(前面设备管理器显示的端口号)、波特率(Speed:115200)、流控(Flow control:None),最后点击“OK”即可。
注意:流控(Flow Control)一定要选择none,否则你将无法在MobaXterm中向串口输入数据。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 003.png
随后显示一个黑色的窗口, 此时打开板子的电源开关,将收到板子串口发过来的数据,如下图所示:
800px

启动方式选择

Firefly的roc-rk3399-pc开发板上没有启动方式选择开关,板子上也没有Flash。所以它只能使用SD卡启动。如果你买了它的EMMC Flash模块,那么RK3399优先从Flash启动,如果失败再从SD卡启动。
板上有电源开关,各个功能也标有文字:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 010.png

IMX6ULL开发板

如果你使用的是野火或正点原子的IMX6ULL开发板,请参考它们的手册接线。
如果你使用的是百问网IMX6ULL-QEMU虚拟开发板,无需接线。
野火、正点原子用的内核版本是4.1.15,
我们用的内核版本是linux 4.9.88,
都是4.x版本,在学习上没有任何差别。
你拿到板子后,可以使用他们出厂的系统,
也可以根据我们提供的高级用户手册更改为我们的系统,高级手册都存放在WIKI中:打开http://wiki.100ask.net,查看左侧开发板,点击进去即可,如下图所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 011.png
百问网IMX6ULL-QEMU虚拟开发板的使用也很简单,打开WIKI首页后,点击类似上图的“百问网imx6ull-qemu”进去,即可看到使用方法。

系统烧写

有的开发板配有Flash,出厂时已经烧好系统,那么本章可以先跳过。
有的开发板没有Flash,需要你在SD卡上烧好系统,然后使用SD卡启动板子,则需要阅读本章内容。
如果你想重烧系统、更新系统,也需要阅读本章内容。

100ASK_AM335X开发板

100ASK_AM335X开发板配有Flash,出厂时已经烧好系统,可以先跳过本章。

NandFlash启动/更新系统

格式化SD卡
进入资料光盘01_tools目录,右键以管理员权限运行HP USB Disk Storage Format Tool 2.0.6.EXE程序,来格式化SD卡。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 012.png
① 选择需要格式化的sd卡
② 选择sd卡文件系统类型为FAT32
③ 选中Quick Format(快速格式化)
④ 点击 start开始格式化
注意:如果点击start 格式化提示错误,则点击确定再次start就可以了。
更新系统
拷贝资料光盘目录下的nandflash_system下所有文件到格式化好的SD卡中。
把SD卡插到开发板上,并设置启动方式为mmc启动,打开终端,开发板上电,串口有输出时按下任意键即可进入uboot参数设置界面,如下所示
	U-Boot SPL 2016.05 (Jun 11 2019 - 05:46:58)
	PMIC detected:TPS65217
	Trying to boot from MMC1
	reading u-boot.img
	reading u-boot.img

	U-Boot 2016.05 (Jun 11 2019 - 05:46:58 -0400)
	CPU  : AM335X-GP rev 2.1
		Watchdog enabled
	I2C:   ready
	DRAM:  512 MiB
	NAND:  512 MiB
	MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
	*** Warning - bad CRC, using default environment

	Net:   cpsw
	Press SPACE to abort autoboot in 2 seconds
	100ask# run updatesys
	100ask#
此时输入 run updatesys
	
	NAND erase.chip: device 0 whole chip
	Skipping bad block at  0x0ba60000
	Erasing at 0x1ffe0000 -- 100% complete.
	OK
	switch to partitions #0, OK
	mmc0 is current device
	reading MLO
	51400 bytes read in 8 ms (6.1 MiB/s)
	HW ECC BCH8 Selected

	NAND write: device 0 offset 0x0, size 0xc8c8
	51400 bytes written: OK
	reading 100ask-am335x.dtb
	42526 bytes read in 10 ms (4.1 MiB/s)
	HW ECC BCH8 Selected

	NAND write: device 0 offset 0x80000, size 0xa61e
	42526 bytes written: OK
	reading u-boot.img
	434896 bytes read in 31 ms (13.4 MiB/s)
	HW ECC BCH8 Selected

	NAND write: device 0 offset 0xc0000, size 0x6a2d0
	434896 bytes written: OK
	reading zImage
	5239760 bytes read in 289 ms (17.3 MiB/s)
	HW ECC BCH8 Selected

	NAND write: device 0 offset 0x200000, size 0x4ff3d0
	5239760 bytes written: OK
	reading rootfs.ubi
	134742016 bytes read in 7306 ms (17.6 MiB/s)
	SW ECC selected

	NAND write: device 0 offset 0xa00000, size 0x8080000
	134742016 bytes written: OK
	nand flash system update OK!
如上所示,直到系统打印nand flash system update OK!,表示系统烧录nandlflash成功。
此时可以关闭开发板电源,拔出SD卡,设置启动方式为nand启动,开发板重新上电即可。


SD卡启动

格式化sd卡
首先安装资料光盘下01_tools/SD Card Formatter 5.0.1 Setup.exe软件,安装完成后打开。
然后把SD卡通过读卡器接到电脑上,使用SdCardFormatter格式化SD卡,格式化步骤如下如所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 013.png
① 选择要格式化的SD卡,选中“Quick format”;
② 在弹出的对话框中点击“是(Y)”;
③ 等待格式化完成,完成时会看到如下图的提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 014.png
烧写sd卡系统镜像
首先安装资料光盘下01_tools/ win32diskimager-1.0.0-install.exe软件,安装完成后打开。
然后使用wind32diskimage烧写编译后的系统镜像,烧写步骤如下所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 015.png
① 选中需要烧写的SD卡设备,点击文件图标选择系统镜像文件,点击写入按钮开始烧写
② 在弹出的对话框中,点击Yes按钮继续烧写, 等待烧写完成,会看到如下提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 016.png
烧写成功后,拔下SD卡,将启动开关拨到SD卡处,上电启动开发板。

Firefly-rk3288开发板

用户拿到全新的Firefly-RK328开发板时,默认系统为Firefly提供的Android系统,为了使用本教材,需要用户先破坏原来的系统,然后再使用SD卡烧写我们提供的系统。
参考前面Firefly-rk3288串口模块连接实物图,将开发板、串口模块、电脑连接起来。打开MobaXtermr软件的串口界面,插上电源,等待一会,按下键盘“Enter”键,待串口显示“shell@firefly:/ $”则表示进入了系统,接着输入以下三个命令:
	shell@firefly:/ $ su
	shell@firefly:/ # mkdosfs  /dev/block/mmcblk0
	shell@firefly:/ # sync
操作效果如下图所示,红色下划线部分为输入命令,操作完成后,即可破坏板上系统,然后就可以根据后面内容烧写SD卡、使用SD卡启动了。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 017.png

SD卡启动

格式化sd卡
首先安装资料光盘下01_tools/SD Card Formatter 5.0.1 Setup.exe软件,安装完成后打开。
然后把SD卡通过读卡器接到电脑上,使用SdCardFormatter格式化SD卡,格式化步骤如下如所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 013.png
① 选择要格式化的SD卡,选中“Quick format”;
② 在弹出的对话框中点击“是(Y)”;
③ 等待格式化完成,完成时会看到如下图的提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 014.png
烧写sd卡系统镜像
首先安装资料光盘下01_tools/ win32diskimager-1.0.0-install.exe软件,安装完成后打开。
然后使用wind32diskimage烧写编译后的系统镜像,烧写步骤如下所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 015.png
① 选中需要烧写的SD卡设备,点击文件图标选择系统镜像文件,点击写入按钮开始烧写
② 在弹出的对话框中,点击Yes按钮继续烧写, 等待烧写完成,会看到如下提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 016.png
烧写成功后,拔下SD卡,将启动开关拨到SD卡处,上电启动开发板。

roc-rk3399-pc 开发板

Roc-rk3399-pc开发板本身没有Flash;如果你买了配套的EMMC Flash模块,如需使用emmc启动请参考firefly官方文档。 本教程只使用SD卡启动。

SD卡启动

格式化sd卡
首先安装资料光盘下01_tools/SD Card Formatter 5.0.1 Setup.exe软件,安装完成后打开。
然后把SD卡通过读卡器接到电脑上,使用SdCardFormatter格式化SD卡,格式化步骤如下如所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 013.png
① 选择要格式化的SD卡,选中“Quick format”;
② 在弹出的对话框中点击“是(Y)”;
③ 等待格式化完成,完成时会看到如下图的提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 014.png
烧写sd卡系统镜像
首先安装资料光盘下01_tools/ win32diskimager-1.0.0-install.exe软件,安装完成后打开。
然后使用wind32diskimage烧写编译后的系统镜像,烧写步骤如下所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 015.png
① 选中需要烧写的SD卡设备,点击文件图标选择系统镜像文件,点击写入按钮开始烧写
② 在弹出的对话框中,点击Yes按钮继续烧写, 等待烧写完成,会看到如下提示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 016.png
烧写成功后,拔下SD卡,将启动开关拨到SD卡处,上电启动开发板。

IMX6ULL开发板

如果你使用的是野火或正点原子的IMX6ULL开发板,请参考它们的手册接线。
如果你使用的是百问网IMX6ULL-QEMU虚拟开发板,无需接线。
野火、正点原子用的内核版本是4.1.15,
我们用的内核版本是linux 4.9.88,
都是4.x版本,在学习上没有任何差别。
你拿到板子后,可以使用他们出厂的系统,
也可以根据我们提供的高级用户手册更改为我们的系统,高级手册都存放在WIKI中:打开http://wiki.100ask.net,查看左侧开发板,点击进去即可,如下图所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 011.png
百问网IMX6ULL-QEMU虚拟开发板的使用也很简单,打开WIKI首页后,点击类似上图的“百问网imx6ull-qemu”进去,即可看到使用方法。


部件实验

100ASK_AM335X开发板

开发板各个功能所在位置以及名称如下图所示,如下所有的功能测试均在串口登录终端下进行测试:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 018.png

网卡接口测试

此节演示在终端下如何设置ip地址,测试网络的连通性,以及Http+Php的web环境可用性。
注意:需要一个可以上网的路由器,并且路由器带有RJ45 LAN接口,准备开发板配套的网线,并将网线一端插到网卡接口处,另一端插到路由器(交换机) LAN 接口处。
通过ifconfig 查看ip地址
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 019.png
通过上图得知已经自动获取IP地址,如未能获取则使用 udhcpc命令获取,如下图所示
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 020.png
网络连通性测试
	[root@100ask_am335x:~]# ping www.baidu.com
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 021.png
http+Php测试
其中 inet 后的192.168.1.87是路由分配给此网卡的IP地址,首先确保你的电脑和开发板处于同一个IP地址段,让后通过浏览器访问此IP,就能看到此开发板所支持的php特征描述
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 022.png

USBhost接口测试

此节演示在终端下如何在USBhost接口上使用usb存储设备。
注意: 需要准备一个usb2.0接口的设备,U盘,内核支持的USB蓝牙模块usb网卡或者usb摄像头等。
如下使用一个16G的U盘作为示例,插到USBhost任意接口,会打印出如下设备信息。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 023.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda
挂载相应的分区到mnt目录,需先通过fdisk命令获取分区类型,如下所示
	[root@100ask_am335x:~]# fdisk -l /dev/sda
通过fdisk查看u盘分区类型得到/dev/sda2分区类型为linux所支持的文件系统类型,
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 024.png
	[root@100ask_am335x:/sys/class/leds]# mount -t vfat /dev/sda2 /mnt
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 025.png
测试完以后,通过umount卸载/mnt目录的挂载,才可拔下usb设备:
	[root@100ask_am335x:/sys/class/leds]# umount  /mnt

OTG接口测试

此节演示如何测试OTG接口的两种模式,分别是device模式和host模式。
注意:需要准备一个 micro otg线,以及开发板配套的micro usb数据线,连接到开发板usb0接口上,具体位置请查看 开发板功能位置图
otg device模式测试
usb作为从设备,被其它设备挂载,把sd卡的分区1挂在到PC机
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 026.png
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 027.png
此时在设备管理器中可以看到一个名为 linux File-Stor Gadget USB Device的磁盘设备,在windows资源管理器中也可以看到有新的可移动设备盘符弹出
测试完成后,终端下执行rmmod g_mass_storage 卸载改模块驱动。
	[root@100ask_am335x:~]# rmmod g_mass_storage
otg host模式
usb作为主设备挂载其它设备)将micro usb otg转接线插入开发板,另一端接常见的usb设备
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 028.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda
挂载相应的分区到mnt目录,需先通过fdisk命令获取分区类型,如下所示
	[root@100ask_am335x:~]# fdisk -l /dev/sda

通过fdisk查看u盘分区类型得到/dev/sda2分区类型为linux所支持的文件系统类型,

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 024.png
	[root@100ask_am335x:/sys/class/leds]# mount -t vfat /dev/sda2 /mnt
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 025.png
测试完以后,通过umount卸载/mnt目录的挂载,才可拔下usb设备
	[root@100ask_am335x:/sys/class/leds]# umount  /mnt

耳机接口测试

此节演示使用三段式耳机在100ask_am335x开发板上录制声音以及播放音频。
注意: 需要准备一个带麦克风的三段式耳机耳机上带麦克风。
录制音频测试
将带麦克风的耳机或者独立供电的话筒插入耳机孔,使用如下命令进行录制。
	[root@100ask_am335x:~]# arecord -v  --format=cd --device=plughw:0,0  test.wav
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 029.png
参数讲解
 --format=cd 指的是16 bit little endian, 44100, stereo
 --device=plughw:0,0 指的是录音音频使用的声卡设备,如果有多个声卡设备,需要指定使用那个
 test.wav 指的是录制音频文件的名称以及格式,其中test是录音音频文件的名称, wav是音频格式,其中都支持(wav, raw or au)这些格式
播放音频测试
将三段式的耳机线或者音响的音频线插入开发板耳机接口处,通过aplay进行播放。
	[root@100ask_am335x:~]# aplay -v--format=cd  --device=plughw:0,0  test.wav
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 030.png
参数讲解
 --format=cd 指的是16 bit little endian, 44100, stereo
 --device=plughw:0,0 指的是录音音频使用的声卡设备,如果有多个声卡设备,需要指定使用那个
 test.wav 指的是录制音频文件的名称以及格式,其中test是录音音频文件的名称, wav是音频格式,其中都支持(wav, raw or au)这些格式
可以通过ssh登录开发板板将下载好的wav格式的音频上传至文件系统,用aplay进行播放。

LCD显示测试

此节演示通过fb-test测试程序让lcd显示红绿蓝白4中颜色,用以观察lcd好坏。
lcd显示红色
	[root@100ask_am335x:~]# fb-test -r
	fb-test 1.1.0 (rosetta)
	fb res 480x272 virtual 480x272, line_len 960, bpp 16
	[root@100ask_am335x:~]#
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 031.png
lcd显示所有
	[root@100ask_am335x:~]# fb-test f
	fb-test 1.1.0 (rosetta)
	fb res 480x272 virtual 480x272, line_len 960, bpp 16
	[root@100ask_am335x:~]#
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 032.png

触摸屏校准测试

此节演示通过ts_calibrate程序校准触摸屏,用以验证触摸屏是否可用。
终端下运行 ts_calibrate 程序。
	[root@100ask_am335x:~]# ts_calibrate
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 033.png
此时就能看到lcd上依次弹出 + 图标,依次点击即可,最后会生成坐标文件存放在/etc目录下
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 034.png

屏幕背光调节

此节演示通过echo 命令操作/sys目录来实现调节背光亮度。
背光亮度的设置范围为 0 – 8 ,0表示最暗,8表示最亮。
通过cat命令查看当前背光亮度等级。
	[root@100ask_am335x:~]# cat /sys/class/backlight/backlight/brightness
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 035.png
查看背光最大亮度等级
	[root@100ask_am335x:~]# cat /sys/class/backlight/backlight/max_brightness
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 036.png
设置当前背光亮度值为8,此时请注意观察屏幕背光亮度是否有变化。
	[root@100ask_am335x:~]# echo 8 > /sys/class/backlight/backlight/brightness
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 037.png

RTC测试

此节演示通过使用date和hwclock工具设置软、硬件时间,测试当操作系统重启的时候,软件时钟读取RTC时钟是否同步(注意:确保板子上已经安装了纽扣电池)。
	[root@100ask_am335x:~]# date -s "2019-06-18 12:00:00"
	[root@100ask_am335x:~]# hwclock -w
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 038.png
hwclock –r 显示硬件时钟与日期
hwclock –s 将系统时钟调整为与目前的硬件时钟一致。
hwclock –w 将硬件时钟调整为与目前的系统时钟一致。
	[root@100ask_am335x:~]# hwclock -r
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 039.png

按键测试

此节演示通过hexdump命令以及dmesg命令来查看按键是否有反应。
	[root@100ask_am335x:~]# hexdump  /dev/input/event1
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 040.png
	[root@100ask_am335x:~]# dmesg | grep "Dev: input1"
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 041.png

LED灯测试

此节演示通过echo 命令来控制led状态灯的亮灭。
注意: 默认led1 led2 led3灯已经定义为不同功能的状态灯,led4为设置为状态灯,可以自行操作

进入

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 042.png
进入/sys/class/leds 目录查看
	[root@100ask_am335x:~]# cd /sys/class/leds/
am335x:green:cpu0 对应开发板led2
am335x:green:mmc0 对应开发板led1
am335x:green:nand 对应开发板led3
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 043.png
此时我们通过echo输入值到 brightness即可控制灯的亮灭,以下以am335x:green:mmc0为示例
	[root@100ask_am335x:/sys/class/leds/am335x:green:mmc0]# echo 1 > brightness  //灯亮
	[root@100ask_am335x:/sys/class/leds/am335x:green:mmc0]# echo 0 > brightness  //灯灭

串口测试

此节演示使用linux-serial-test程序测试串口的可用性。
压力测试
这发送五秒钟并接收七秒钟,之后它将退出。如果接收的字节数与发送的字节数匹配且接收的模式正确,则退出代码将为零,因此可以将其用作自动测试脚本的一部分。
	[root@100ask_am335x:~]# linux-serial-test -s -e -p /dev/ttyO2 -b 115200 -o 5 -i 7
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 044.png
全速压力测试
	[root@100ask_am335x:~]# linux-serial-test -s -e -p /dev/ttyO2 -b 3000000
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 045.png

RS485测试

此节演示使用rs485_test程序测试rs485接口的可用性。
注意:需要准备另一款支持rs485的设备,来保证测试可行,以下测试是通过两块335x开发板进行测试。
接收端
	[root@100ask_am335x:~]# rs485_test -d /dev/ttyO2 -b 115200
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 046.png
发送端
	[root@100ask_am335x:~]# rs485_test -d /dev/ttyO1 -b 115200
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 047.png

Can功能测试

此节主要演示使用两块开发板通过ip 和 can-utils命令测试can0的通信。
100ask_am335x可以作为一个CAN设备使用。按照下图所示连接两块am335开发板,并参考原理图找到对应的引脚,用连接线连接100ask_am335x的CAN接线端子的L、H和另一块开发板的CAN接口,用户也可以使用自己的Can设备进行测试。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 048.png
发送端
关闭can0接口
	[root@100ask_am335x:~]# ip link set can0 down
设置can0传输速率为50Kbits/sec
	[root@100ask_am335x:~]# ip link set can0 type can bitrate 50000
参考can0设置的参数
	[root@100ask_am335x:~]# ip -details link show can0
打开can0接口
	[root@100ask_am335x:~]# ip link set can
0 up
使用cansend命令向另一端发送数据
	[root@100ask_am335x:~]# cansend can0 123#DEADBEEF
	[root@100ask_am335x:~]# cansend can0 123#DEADBEEF
	[root@100ask_am335x:~]# cansend can0 123#DEADBE23
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 049.png
接收端
关闭can0接口
	[root@100ask_am335x:~]# ip link set can0 down
设置can0传输速率为50Kbits/sec
	[root@100ask_am335x:~]# ip link set can0 type can bitrate 50000
参考can0设置的参数
	[root@100ask_am335x:~]# ip -details link show can0
打开can0接口
	[root@100ask_am335x:~]# ip link set can0 up
打印can0的信息
	[root@100ask_am335x:~]# candump can0
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 050.png
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 051.png

Firefly-rk3288开发板

开发板各个功能所在位置以及名称如下图所示,如下所有的功能测试均在串口登录终端下进行测试:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 008.png

网卡接口测试

此节演示在串口终端下如何设置开发板的ip地址,测试网络的连通性。并使用电脑通过网络浏览器访问开发板,验证开发板的http+php可用,如图4.2.1.1所示,将网线插到此接口处。
注意:既然是在开发板和电脑之间测试网如,那双方需要有网络连接。两者之间需要有一个路由器,开发板通过网线与路由器连接。而电脑与路由器之间,可以使用网线连接,也可以使用WIFI连接。网卡接口位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 052.png
1)通过udhcpc命令获取ip地址,详细信息如下图(udhcpc获取IP输出示意图)所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 053.png
通过上图可知,使用udhcpc命令使开发板获得IP地址192.168.1.52(你的开发板自动获取的IP可能不一样)。
如果通过udhcpc命令无法获得IP,也可以使用ifconfig命令强制设置IP为同一网段的 192.168.1.112 :
	[root@firefly-rk3288:~]# ifconfig eth0 192.168.1.112
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 054.png
2)通过ifconfig命令查看详细ip信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 055.png
3)网络连通性测试:
在开发板上执行如下命令,如果有数据返回则表示开发板跟互联网是连通的(前提是你的路由器是可以上网的):
	[root@firefly-rk3288:~]# ping www.baidu.com
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 056.png
当然,很多时候开发板不能正通互联网,这也没关系,只要能ping通我们的Windows、Ubuntu即可(例如我们的ubuntu IP地址是192.168.1.163)如下为ping通示例:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 058.png

4) http+Php测试:

假设开发板的 IP 为 192.168.1.52 ,在电脑的网络浏览器中输入此IP,就能看到此开发板所支持的php特征描述:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 058.png

4.2.2 USB Host接口测试

此节演示在终端下如何在USB Host接口上使用usb存储设备,将usb设备插图图4.2.2所示的usbhost接口处。
注意:需要准备一个U盘、USB蓝牙模块、usb网卡或者usb摄像头等USB设备。 USB host接口位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 059.png
下面使用一个16G的U盘作为例子,插到任意一个USB Host接口,会打印出如下设备信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 060.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda对应整个U盘,/dev/sda1对应该U盘的第1个分区,/dev/sda2对应第2个分区。
有些U盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1等节点。对于这种情况,/dev/sda即代表整个U盘,也代表第1个分区。
我们可以挂载某个分区,挂载之前要先通过fdisk命令获取分区类型,如下所示:
	[root@firefly-rk3288:~]# fdisk  -l /dev/sda
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 061.png
从上图可知/dev/sda2是FAT16格式,挂载是可以指定类型为“vfat”:
	[root@firefly-rk3288:~]# mount  -t vfat /dev/sda2 /mnt
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 062.png
测试完以后,通过umount卸载/mnt,才可拔下usb设备:
	[root@Firefly-rk3288:~]# umount  /mnt

OTG接口测试

此节演示如何测试OTG接口的两种模式,分别是device模式和host模式。
注意:需要准备一个 OTG转接头(开发板清单中不配)、micro usb数据线(开发板清单里配有)。这2种设备如下图所示:
OTG转换头:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 063.png
micro usb线:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 064.png
otg device模式测试:
使用micro usb线小的一头插入如下图5.3.1所示的红色框所在接口,另一端连接电脑USB接口,micro otg接口位置如下图(otg device模式连接示意图)所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 065.png
开发板作为USB从设备,接到电脑上;电脑会把开发板识别为一个U盘。
先执行以下命令:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 066.png
此时在电脑的设备管理器中可以看到一个名为 linux File-Stor Gadget USB Device的磁盘设备,在windows资源管理器中也可以看到有新的可移动设备盘符弹出:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 027.png
测试完成后,在终端下执行“rmmod g_mass_storage ”卸载改模块驱动:
	[root@firefly-rk3288:~]# rmmod g_mass_storage
otg host模式:
开发板作为usb主设备,其他USB设备通过otg转接头插入开发板,开发板即可识别出这些USB外设备。otg转接头连接示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 065.png
下图是把U盘通过otg转接头插入开发板后,在串口打印的信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 067.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda对应整个U盘,/dev/sda1对应该U盘的第1个分区,/dev/sda2对应第2个分区。
有些U盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1等节点。对于这种情况,/dev/sda即代表整个U盘,也代表第1个分区。
我们可以挂载某个分区,挂载之前要先通过fdisk命令获取分区类型,如下所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 024.png
从上图可知/dev/sda2是FAT16格式,挂载是可以指定类型为“vfat”:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 025.png
测试完以后,通过umount卸载/mnt,才可拔下usb设备:
	[root@Firefly-rk3288:~]# umount  /mnt

耳机接口测试

此节演示使用三段式耳机在Firefly-rk3288开发板上录制声音、播放音频。
注意: 需要准备一个带麦克风的三段式耳机,如下图4.2.4 所示:
三段式耳机示意图
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 068.png
耳机连接位置示意图
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 069.png
播放音频:
将耳机插入开发板耳机孔(耳机孔位置如上图红框所示),使用aplay进行播放音频文件:
	[root@firefly-rk3288:~]# aplay -vv test.wav
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 070.png
参数讲解:
test.wav :指定录音文件的名称以及格式。其中test是文件名称,wav是音频格式。支持的格式有wav、raw和au等。

还可以通过ssh登录开发板,将电脑中的wav格式的音频上传到开发板,再用用aplay进行播放。

录制音频:
咪头位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 071.png
使用如下命令进行录制,执行命令后,对着咪头说话(咪头位置如上图红框所示):
	[root@firefly-rk3288:~]# arecord -vv  --format=cd --device=plughw:0,0  test.wav
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 072.png
参数讲解:
--format=cd :设置格式为16 bit little endian, 44100, stereo。
--device=plughw:0,0 指定使用card0 device0设备录制声音。
test.wav :指定录音文件的名称以及格式。其中test是文件名称,wav是音频格式。支持的格式有wav、raw和au等。

RTC测试

此节演示通过使用date和hwclock命令设置系统时间、硬件时间,并测试当操作系统重启后,系统时钟与硬件时间是否同步。
一般的板子都会有一个名为RTC(实时时钟)的硬件,RTC使用钮扣电池供电,在系统关闭时用来维持时钟。RTC维持的时间,被称为硬件时间。
Linux系统启动之后,它会自己维持时间,这个时间被称为系统时间。系统时间的初始值来源有二:
① 如果没有RTC,系统时间初始值为1970年1月1日0点0分0秒
② 如果有RTC,Linux启动后,系统时间初始值从RTC读取
在实际使用过程中,要注意系统时间、硬件时间的同步问题:
① 使用date命令查看、设置系统时间,在设置系统时间后,要使用“hwclock -w” 命令同步到RTC;
② 使用hwclock查看、设置硬件时间,在设置硬件时间后,要使用“hwclock -s”命令同步到系统时间。
注意:如果要使用RTC,要确保板子上已经安装了纽扣电池。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 073.png
RTC位置示意图
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 074.png
以下命令是设置系统时间、并同步到RTC:
	[root@firefly-rk3288:~]# date -s "2019-06-18 12:00:00"
	[root@firefly-rk3288:~]# hwclock -w
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 075.png
一般不直接设置硬件时间,要设置硬件时间时,先使用date设置系统时间,再使用“hwclock -w”同步到RTC硬件。
你使用date、hwclock命令设置好时间后,可以关闭开发板并等待一会后重启,再用date命令查看时间是否正常。
对RTC硬件的操作使用hwclock命令,常见用法如下:
hwclock -r :显示硬件时钟与日期
hwclock -s :将系统时钟调整为与目前的硬件时钟一致。
hwclock -w :将硬件时钟调整为与目前的系统时钟一致。
下面是一个示例,读取硬件时间:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 076.png

按键测试

此节演示通过hexdump命令以及dmesg命令来查看按键是否有反应。按键位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 077.png
执行下面命令之后,操作按键,如果一切正常会有打印信息:
	[root@firefly-rk3288:~]# hexdump  /dev/input/event2
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 078.png

LED灯测试

此节演示通过操作LED在/sys目录下的对应文件,以点亮、熄灭LED。
注意: led1/led2/led3灯已经被定义为系统状态灯,仍可在/sys目录中操作对应文件;led4留给用户用于其他目的。

led灯位置示意图:

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 079.png
首先,进入/sys/class/leds目录查看在多少个LED:
[root@firefly-rk3288:~]# cd /sys/class/leds/
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 080.png
这些文件对应的LED是:firefly:blue:power
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 081.png
此时我们通过echo输入值到 brightness即可控制灯的亮灭,以下以firefly:blue:power为示例
	[root@firefly-rk3288:/sys/devices/platform/leds/leds/firefly:blue:power]# echo 1 > brightness  //灯亮
	[root@firefly-rk3288:/sys/devices/platform/leds/leds/firefly:blue:power]# echo 0 > brightness  //灯灭

串口测试

此节演示使用linux-serial-test程序测试串口的可用性。
串口测试连接示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 082.png
压力测试:
这发送五秒钟并接收七秒钟,之后它将退出。如果接收的字节数与发送的字节数匹配且接收的模式正确,则退出代码将为零,因此可以将其用作自动测试脚本的一部分。
	[root@firefly-rk3288:~]# linux-serial-test -s -e -p /dev/ttyS1 -b 115200 -o 5 -i 7
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 044.png
全速压力测试
	[root@firefly-rk3288:~]# linux-serial-test -s -e -p /dev/ttyS1 -b 3000000
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 045.png
参数详解
-b, 串口波特率,115200等(默认为115200)
-p, port Port(/ dev / ttyS0等)(必须指定)
-s, stats每5秒转储串口数据
-e, dump-err显示错误
-o, tx-time要传输的秒数(默认为0,表示没有限制)
-i, rx-time要接收的秒数(默认为0,表示没有限制)

roc-rk3399-pc 开发板

本章介绍如何测试板载功能,开发板各个功能部件所在位置以及名称如下图所示。本章所有的功能测试均在串口登录终端下进行。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 083.png
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 010.png

网卡接口测试

此节演示在串口终端下如何设置开发板的ip地址,测试网络的连通性。并使用电脑通过网络浏览器访问开发板,验证开发板的http+php可用,如图5.3.1所示,将网线插到此接口处。
注意:既然是在开发板和电脑之间测试网如,那双方需要有网络连接。两者之间需要有一个路由器,开发板通过网线与路由器连接。而电脑与路由器之间,可以使用网线连接,也可以使用WIFI连接。
网卡接口位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 084.png

通过udhcpc命令获取ip地址,详细信息如下图(udhcpc获取IP输出示意图)所示:

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 085.png
通过上图可知,使用udhcpc命令使开发板获得IP地址192.168.1.52(你的开发板自动获取的IP可能不一样)。
如果通过udhcpc命令无法获得IP,也可以使用ifconfig命令强制设置IP:
	[root@roc-rk3399-pc:~]# ifconfig eth0 192.168.1.112
通过ifconfig命令查看详细ip信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 086.png
网络连通性测试:
在开发板上执行如下命令,如果有数据返回则表示开发板跟互联网是连通的(前提是你的路由器是可以上网的):
	[root@roc-rk3399-pc:~]# ping www.baidu.com
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 087.png
当然,很多时候开发板不能正通互联网,这也没关系,只要能ping通我们的Windows、Ubuntu即可(例如我们的ubuntu IP地址是192.168.1.163)如下为ping通示例:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 088.png
http+Php测试:
假设开发板的IP为192.168.1.52,在电脑的网络浏览器中输入此IP,就能看到此开发板所支持的php特征描述:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 089.png

USB Host接口测试

此节演示在终端下如何在USB Host接口上使用usb存储设备,将usb设备插图图4.3.2所示的usbhost接口处。
注意:需要准备一个U盘、USB蓝牙模块、usb网卡或者usb摄像头等USB设备。
USB host接口位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 090.png
下面使用一个16G的U盘作为例子,插到任意一个USB Host接口,会打印出如下设备信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 091.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda对应整个U盘,/dev/sda1对应该U盘的第1个分区,/dev/sda2对应第2个分区。
有些U盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1等节点。对于这种情况,/dev/sda即代表整个U盘,也代表第1个分区。
我们可以挂载某个分区,挂载之前要先通过fdisk命令获取分区类型,如下所示:
	[root@roc-rk3399-pc:~]# fdisk  -l  /dev/sda
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 092.png
从上图可知/dev/sda2是FAT16格式,挂载是可以指定类型为“vfat”:
	[root@roc-rk3399-pc:~]# mount  -t vfat /dev/sda2 /mnt
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 093.png
测试完以后,通过umount卸载/mnt,才可拔下usb设备:
	[root@roc-rk3399-pc:~]# umount  /mnt

OTG接口测试

此节演示如何测试OTG接口的两种模式,分别是device模式和host模式。
注意:需要准备一个 OTG转接头(开发板清单中不配)、type C usb数据线(开发板清单里配有)。这2种设备如下图所示:
OTG转换头:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 094.png
type c usb线:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 095.png
otg device模式测试
使用type usb线小的一头插入如下图所示的红色框所在接口,另一端连接电脑USB接口,typeC otg接口位置如下图所示:
otg device模式连接示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 096.png
开发板作为USB从设备,接到电脑上;电脑会把开发板识别为一个U盘。
先执行以下命令卸载正在运行的驱动程序:
	[root@roc-rk3399-pc:~]# rmmod g_mass_storage
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 097.png
此时在电脑的设备管理器中可以看到一个名为 linux File-Stor Gadget USB Device的磁盘设备,在windows资源管理器中也可以看到有新的可移动设备盘符弹出:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 027.png
测试完成后,在终端下执行“rmmod g_mass_storage ”卸载改模块驱动:
	[root@roc-rk3399-pc:~]# rmmod g_mass_storage
otg host模式
开发板作为usb主设备,其他USB设备通过otg转接头插入开发板,开发板即可识别出这些USB外设备。
otg转接头连接示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 096.png
下图是把U盘通过otg转接头插入开发板后,在串口打印的信息:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 098.png
通过打印的设备信息可知,系统为该usb存储设备创建的设备节点为 /dev/sda。一般来说/dev/sda对应整个U盘,/dev/sda1对应该U盘的第1个分区,/dev/sda2对应第2个分区。
有些U盘没有划分分区,它只有一个设备节点/dev/sda,而没有/dev/sda1等节点。对于这种情况,/dev/sda即代表整个U盘,也代表第1个分区。
我们可以挂载某个分区,挂载之前要先通过fdisk命令获取分区类型,如下所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 061.png
从上图可知/dev/sda2是FAT16格式,挂载是可以指定类型为“vfat”:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 062.png
测试完以后,通过umount卸载/mnt,才可拔下usb设备:
	[root@Roc-rk3399-pc:~]# umount  /mnt

RTC测试

此节演示通过使用date和hwclock命令设置系统时间、硬件时间,并测试当操作系统重启后,系统时钟与硬件时间是否同步。
一般的板子都会有一个名为RTC(实时时钟)的硬件,RTC使用钮扣电池供电,在系统关闭时用来维持时钟。RTC维持的时间,被称为硬件时间。
Linux系统启动之后,它会自己维持时间,这个时间被称为系统时间。系统时间的初始值来源有二:
① 如果没有RTC,系统时间初始值为1970年1月1日0点0分0秒
② 如果有RTC,Linux启动后,系统时间初始值从RTC读取
在实际使用过程中,要注意系统时间、硬件时间的同步问题:
③ 使用date命令查看、设置系统时间,在设置系统时间后,要使用“hwclock -w” 命令同步到RTC;
② 使用hwclock查看、设置硬件时间,在设置硬件时间后,要使用“hwclock -s”命令同步到系统时间。
注意:如果要使用RTC,要确保板子上已经安装了纽扣电池。

RTC位置示意图:

EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 099.png
以下命令是设置系统时间、并同步到RTC:
	[root@roc-rk3399-pc:~]# date -s "2019-06-18 12:00:00"
	[root@roc-rk3399-pc:~]# hwclock -w
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 100.png
一般不直接设置硬件时间,要设置硬件时间时,先使用date设置系统时间,再使用“hwclock -w”同步到RTC硬件。
你使用date、hwclock命令设置好时间后,可以关闭开发板并等待一会后重启,再用date命令查看时间是否正常。
对RTC硬件的操作使用hwclock命令,常见用法如下:
hwclock -r :显示硬件时钟与日期
hwclock -s :将系统时钟调整为与目前的硬件时钟一致。
hwclock -w :将硬件时钟调整为与目前的系统时钟一致。
下面是一个示例,读取硬件时间:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 101.png

按键测试

此节演示通过hexdump命令以及dmesg命令来查看按键是否有反应。
按键位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 102.png
执行下面命令之后,操作按键,如果一切正常会有打印信息:
	[root@roc-rk3399-pc:~]# hexdump  /dev/input/event2
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 078.png

LED灯测试

此节演示通过操作LED在/sys目录下的对应文件,以点亮、熄灭LED。
注意: led1/led2/led3灯已经被定义为系统状态灯,仍可在/sys目录中操作对应文件;led4留给用户用于其他目的。
led灯位置示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 103.png
首先,进入/sys/class/leds目录查看在多少个LED:
	[root@roc-rk3399-pc:~]# cd /sys/class/leds/
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 104.png
这些文件对应的LED是:
Led1 firefly:red:power 红色电源状态灯
Led2 firefly:yellow:heartbeat 系统心跳灯
Led3 firefly:yellow:user 用户灯
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 105.png
此时我们通过echo输入值到 brightness即可控制灯的亮灭,以下以firefly:yellow:heartbeat为示例
[root@roc-rk3399-pc:/sys/devices/platform/leds/leds/firefly:yellow:heartbeat]# echo 1 > brightness  //灯亮
[root@roc-rk3399-pc:/sys/devices/platform/leds/leds/firefly:yellow:heartbeat]# echo 0 > brightness  //灯灭

串口测试

此节演示使用linux-serial-test程序测试串口的可用性。
串口测试连接示意图:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 106.png
压力测试
这发送五秒钟并接收七秒钟,之后它将退出。如果接收的字节数与发送的字节数匹配且接收的模式正确,则退出代码将为零,因此可以将其用作自动测试脚本的一部分。
	[root@roc-rk3399-pc:~]# linux-serial-test -s -e -p /dev/ttyS1 -b 115200 -o 5 -i 7
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 044.png
全速压力测试
	[root@roc-rk3399-pc:~]# linux-serial-test -s -e -p /dev/ttyS1 -b 3000000
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 043.png
参数详解
-b, 串口波特率,115200等(默认为115200)
-p, port Port(/ dev / ttyS0等)(必须指定)
-s, stats每5秒转储串口数据
-e, dump-err显示错误
-o, tx-time要传输的秒数(默认为0,表示没有限制)
-i, rx-time要接收的秒数(默认为0,表示没有限制)

后续开发准备工作:准备交叉编译工具链、编译内核

当你想开发应用程序、内核、驱动程序时,需要先安装、设置交叉编译工具链。
当你想更新内核时,当你想进行驱动开发时,都需要编译内核。
对于各个开发板,可以观看本章中对应内容,也可以打开htttp://wiki.100ask.net,找到对应的开发板页面。

100ASK_AM335X开发板

获取源码

获取源码的方式有2种:本地拷贝、在线下载。建议使用后者,更加方便。
本地拷贝
拷贝资料光盘中的源码通过ftp工具上传到ubuntu系统中。
在线下载
100ask_am335x开发板所有代码通过repo进行管理,可以通过如下命令进行下载或同步。
① 配置repo
下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置:
			book@100ask$ git config --global user.email "you@example.com"
			book@100ask$ git config --global user.name "Your Name"
② 下载源码
通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用:
			book@100ask$ git clone  https://git.dev.tencent.com/codebug8/repo.git
			book@100ask:~$  mkdir -p 100ask_am335x && cd 100ask_am335x
			book@100ask:~/100ask_am335x$ ../repo/repo init -u https://dev.tencent.com/u/weidongshan/p/manifests/git -b linux-sdk -m ti335x/100ask-am335x_linux_release_v1.0.xml --no-repo-verify
			book@100ask:~/100ask_am335x$  ../repo/repo sync -j4
注意:repo在线下载的代码和资料光盘中的代码是一致的,后期方便同步更新。

配置交叉编译工具链

设置交叉编译工具链
交叉编译工具链主要是用于在ubuntu主机上编译并声称可以在其它平台上运行的系统。设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。
有3种方法设置这些环境变量。
① 永久生效
如需永久修改,请修改用户配置文件, Ubuntu系统下,修改如下:
			vim ~/.bashrc
在行尾添加或修改:
			export ARCH=arm
			export CROSS_COMPILE=arm-linux-gnueabihf-
			export PATH=$PATH:<WORKDIR>100ask_am335x/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
② 临时生效
执行完“export”命令后,该设置只对当前终端有效:
			book@100ask$ export PATH=$PATH:<WORKDIR>100ask_am335x/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
			book@100ask$ export ARCH=arm
			book@100ask$ export CROSS_COMPILE=arm-linux-gnueabihf-
③ 手动指定
make编译时指定ARCH架构 CROSS_COMPILE交叉编译工具链,这种方法效率最低:
				book@100ask$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- [命令]
测试交叉编译工具链
测试环境变量:
	book@100ask$ source ~/.bashrc
	book@100ask$ echo $ARCH
	arm
	book@100ask$ echo $CROSS_COMPILE
	arm-linux-gnueabihf-
测试交叉编译器:
	book@100ask$ arm-linux-gnueabihf-gcc -v
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 107.png

编译内核

5压kernel源码
如果是本地上传代码到Ubuntu,则进入Kernel目录,解压内核源码:
	book@100ask$ cd <WORKDIR>/Kernel
	book@100ask$ tar -zxvf linux-kernel.tar.gz
注意:如果你使用的是repo在线同步代码,则不需要上面的解压步骤
编译内核
注意:需要先安装交叉编译工具链,设置环境变量。
不同的开发板对应不同的配置文件,配置文件位linux-kernel/arch/arm/configs/目录,下面以100ask_am335x开发板为例,说明kernel的编译过程:
	book@100ask$ cd linux-kernel
	book@100ask:linux-kernel$ make mrproper
	book@100ask:linux-kernel$ make 100ask_am335x_defconfig
	book@100ask:linux-kernel$ make zImage
	book@100ask:linux-kernel$ make dtbs
编译完成后,在arch/arm/boot目录下生成zImage文件, 在arch/arm/boot/dts目录下生成设备树的二进制.dtb文件

Firefly-rk3288 开发板

获取源码

获取源码的方式有2种:本地拷贝、在线下载。建议使用后者,更加方便。
本地拷贝
拷贝资料光盘中的源码通过ftp工具上传到ubuntu系统中。
在线下载
Firefly-rk3288开发板所有代码通过repo进行管理,可以通过如下命令进行下载或同步。
① 配置repo
下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置:
			book@100ask$ git config --global user.email "you@example.com"
			book@100ask$ git config --global user.name "Your Name"
② 下载源码
通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用:
			book@100ask:~$  git clone  https://git.dev.tencent.com/codebug8/repo.git
			book@100ask:~$  mkdir -p 100ask_firefly-rk3288 && cd 100ask_firefly-rk3288
			book@100ask:~/100ask_firefly-rk3288$  ../repo/repo init -u https://dev.tencent.com/u/weidongshan/p/manifests/git -b linux-sdk -m rk3288/firefly-rk3288_linux_release.xml --no-repo-verify
			book@100ask:~/100ask_firefly-rk3288$  ../repo/repo sync -j4
注意:repo在线下载的代码和资料光盘中的代码是一致的,后期方便同步更新。
首次下载如果提示 Testing colorized output (for 'repo diff', 'repo status'): 此时输入 y 即可,继续执行 ../repo/repo sync -j4 命令即可开始同步源码。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 108.png
后期同步开发板最新源码只需要在当前所在目录执行如下命令即可同步更新

book@100ask:~/100ask_roc-rk3399-pc $ ../repo/repo sync -d

配置交叉编译工具链

设置交叉编译工具链
交叉编译工具链主要是用于在ubuntu主机上编译并声称可以在其它平台上运行的系统。设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。
有3种方法设置这些环境变量。
① 永久生效
如需永久修改,请修改用户配置文件, Ubuntu系统下,修改如下:
			vim ~/.bashrc
在行尾添加或修改:
			export ARCH=arm
			export CROSS_COMPILE=arm-linux-gnueabihf-
			export PATH=$PATH:/home/book/100ask_firefly-rk3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin


② 临时生效
执行完“export”命令后,该设置只对当前终端有效:
				book@100ask:~$ export PATH=$PATH:/home/book/100ask_firefly-rk3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
				book@100ask:~$ export ARCH=arm
				book@100ask:~$ export CROSS_COMPILE=arm-linux-gnueabihf-


③ 手动指定
make编译时指定ARCH架构 CROSS_COMPILE交叉编译工具链,这种方法效率最低:

book@100ask$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- [命令]

测试交叉编译工具链
测试环境变量:
	book@100ask$ source ~/.bashrc
	book@100ask$ echo $ARCH
	arm
	book@100ask$ echo $CROSS_COMPILE
	arm-linux-gnueabihf-
测试交叉编译器:
	book@100ask$ arm-linux-gnueabihf-gcc -v
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 109.png

编译内核

解压kernel源码
如果是本地上传代码到Ubuntu,则进入Kernel目录,解压内核源码:
	book@100ask:~$ cd /home/book/100ask_firefly-rk3288/
	book@100ask: ~/100ask_firefly-rk3288$ tar -zxvf linux-4.4.tar.gz
注意:如果你使用的是repo在线同步代码,则不需要上面的解压步骤
编译内核
注意:需要先安装交叉编译工具链,设置环境变量。
不同的开发板对应不同的配置文件,配置文件位linux-kernel/arch/arm/configs/目录,下面以firefly-rk3288开发板为例,说明kernel的编译过程:
	book@100ask:~/100ask_firefly-rk3288$ cd linux-kernel
	book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make mrproper
	book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make 100ask_firefly-rk3288_defconfig
	book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make zImage
	book@100ask:~/100ask_firefly-rk3288/linux-4.4$ make dtbs
编译完成后,在arch/arm/boot目录下生成zImage文件, 在arch/arm/boot/dts目录下生成rk3288-firefly.dtb设备树的二进制.dtb文件


Roc-rk3399-pc 开发板

获取源码

获取源码的方式有2种:本地拷贝、在线下载。建议使用后者,更加方便。
本地拷贝
拷贝资料光盘中的源码通过ftp工具上传到ubuntu系统中。
在线下载
Roc-rk3399-pc开发板所有代码通过repo进行管理,可以通过如下命令进行下载或同步。
① 配置repo
下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置:

book@100ask$ git config --global user.email "you@example.com" book@100ask$ git config --global user.name "Your Name"

② 下载源码
通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用:
			book@100ask:~$  git clone  https://git.dev.tencent.com/codebug8/repo.git
			book@100ask:~$  mkdir -p 100ask_roc-rk3399-pc && cd 100ask_roc-rk3399-pc
			book@100ask:~/100ask_roc-rk3399-pc $ ../repo/repo init -u https://dev.tencent.com/u/weidongshan/p/manifests/git -b linux-sdk -m rk3399/roc-rk3399-pc_linux_release.xml --no-repo-verify
			book@100ask:~/100ask_roc-rk3399-pc $  ../repo/repo sync -j4
注意:repo在线下载的代码和资料光盘中的代码是一致的,后期方便同步更新。
首次下载如果提示 Testing colorized output (for 'repo diff', 'repo status'): 此时输入 y 即可,继续执行 ../repo/repo sync -j4 命令即可开始同步源码。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 108.png
后期同步开发板最新源码只需要在当前所在目录执行如下命令即可同步更新

book@100ask:~/100ask_roc-rk3399-pc $ ../repo/repo sync -d

配置交叉编译工具链

设置交叉编译工具链
交叉编译工具链主要是用于在ubuntu主机上编译并声称可以在其它平台上运行的系统。设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。
有3种方法设置这些环境变量。
① 永久生效
如需永久修改,请修改用户配置文件, Ubuntu系统下,修改如下:
			vim ~/.bashrc
在行尾添加或修改:
			xport ARCH=arm64
			export CROSS_COMPILE=aarch64-linux-gnu-
			export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin

e

② 临时生效
执行完“export”命令后,该设置只对当前终端有效:
			book@100ask:~$ export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin
			book@100ask:~$ export ARCH=arm64
			book@100ask:~$ export CROSS_COMPILE=aarch64-linux-gnu-
③ 手动指定
make编译时指定ARCH架构 CROSS_COMPILE交叉编译工具链,这种方法效率最低:

book@100ask:~$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- [命令]

测试交叉编译工具链
测试环境变量:
	book@100ask$ source ~/.bashrc
	book@100ask$ echo $ARCH
	arm64
	book@100ask$ echo $CROSS_COMPILE
	aarch64-linux-gnu-
测试交叉编译器:
	book@100ask:~$ aarch64-linux-gnu-gcc  -v
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 110.png

编译内核

解压kernel源码
如果是本地上传代码到Ubuntu,则进入Kernel目录,解压内核源码:
	book@100ask:~$ cd /home/book/100ask_roc-rk3399-pc/
	book@100ask: ~/100ask_roc-rk3399-pc$ tar -zxvf linux-4.4.tar.gz
注意:如果你使用的是repo在线同步代码,则不需要上面的解压步骤
编译内核
注意:需要先安装交叉编译工具链,设置环境变量。
不同的开发板对应不同的配置文件,配置文件位linux-kernel/arch/arm/configs/目录,下面以roc-rk3399-pc开发板为例,说明kernel的编译过程:
	book@100ask:~/100ask_roc-rk3399-pc$ cd linux-4.4
	book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make mrproper
	book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make 100ask_roc-rk3399-pc_defconfig
	book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make Image
	book@100ask:~/100ask_roc-rk3399-pc/linux-4.4$ make dtbs
编译完成后,在arch/arm/boot目录下生成Image文件, 在arch/arm/boot/dts目录下生成rk3399-roc-pc.dtb设备树的二进制.dtb文件


IMX6ULL开发板

野火、正点原子用的内核版本是4.1.15,
我们用的内核版本是linux 4.9.88,
都是4.x版本,在学习上没有任何差别。
你拿到板子后,可以使用他们出厂的系统,
也可以根据我们提供的高级用户手册更改为我们的系统,高级手册都存放在WIKI中:打开http://wiki.100ask.net,查看左侧开发板,点击进去即可,如下图所示:
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 011.png
怎么下载内核、编译内核等等,都可以查看WIKI。
下面以百问网imx6ull-qemu虚拟开发板为例说明。

获取源码

获取源码的方式有2种:本地拷贝、在线下载。建议使用后者,更加方便。
本地拷贝
拷贝资料光盘中的源码通过ftp工具上传到ubuntu系统中。
在线下载
百问网imx6ull-qemu虚拟开发板所有代码通过repo进行管理,可以通过如下命令进行下载或同步。
① 配置repo
下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置:
			book@100ask$ git config --global user.email "you@example.com"
			book@100ask$ git config --global user.name "Your Name"
② 下载源码
通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用:
			book@100ask:~$  git clone  https://git.dev.tencent.com/codebug8/repo.git
			book@100ask:~$  mkdir -p 100ask_imx6ull-qemu && cd 100ask_imx6ull-qemu
			book@100ask:~/100ask_imx6ull-qemu$ ../repo/repo init -u https://dev.tencent.com/u/weidongshan/p/manifests/git -b linux-sdk -m imx6ull/100ask-imx6ull_qemu_release_v1.0.xml --no-repo-verify
			book@100ask:~/100ask_imx6ull-qemu$ ../repo/repo sync -j4
注意:repo在线下载的代码和资料光盘中的代码是一致的,后期方便同步更新。
首次下载如果提示 Testing colorized output (for 'repo diff', 'repo status'): 此时输入 y 即可,继续执行 ../repo/repo sync -j4 命令即可开始同步源码。
EmbeddedLinuxApplicationDevelopmentCompleteManualSecondEditionThirdChapter 108.png
后期同步开发板最新源码只需要在当前所在目录执行如下命令即可同步更新

book@100ask:~/100ask_imx6ull-qemu $ ../repo/repo sync -d

配置交叉编译工具链

设置交叉编译工具链
交叉编译工具链主要是用于在ubuntu主机上编译并声称可以在其它平台上运行的系统。设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。
有3种方法设置这些环境变量。
① 永久生效
如需永久修改,请修改用户配置文件, Ubuntu系统下,修改如下:
			vim ~/.bashrc
在行尾添加或修改:
			export ARCH=arm
			export CROSS_COMPILE=arm-linux-gnueabihf-
			export PATH=$PATH:/home/book/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
② 临时生效
执行完“export”命令后,该设置只对当前终端有效:
			book@100ask:~$ export ARCH=arm
			book@100ask:~$ export CROSS_COMPILE=arm-linux-gnueabihf-
			book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
③ 手动指定
make编译时指定ARCH架构 CROSS_COMPILE交叉编译工具链,这种方法效率最低:
			book@100ask:~$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  [命令]
测试交叉编译工具链
测试环境变量:
	book@100ask$ source ~/.bashrc
	book@100ask$ echo $ARCH
	arm
	book@100ask$ echo $CROSS_COMPILE
	arm-linux-gnueabihf-
测试交叉编译器:
	book@100ask:~$ arm-linux-gnueabihf-gcc  -v

编译内核

解压kernel源码
如果是本地上传代码到Ubuntu,则进入Kernel目录,解压内核源码:
	book@100ask:~$ cd /home/book/100ask_imx6ull-qemu/
	book@100ask: ~/100ask_imx6ull-qemu$ tar -zxvf  linux-4.9.88.tar.gz
注意:如果你使用的是repo在线同步代码,则不需要上面的解压步骤
编译内核
注意:需要先安装交叉编译工具链,设置环境变量。
不同的开发板对应不同的配置文件,配置文件位linux-kernel/arch/arm/configs/目录,下面以roc-rk3399-pc开发板为例,说明kernel的编译过程:
	book@100ask:~/100ask_imx6ull-qemu$ cd linux-4.9.88
	book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make mrproper
	book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make 100ask_imx6ull_qemu_defconfig
	book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make Image
	book@100ask:~/100ask_imx6ull-qemu/linux-4.9.88$ make dtbs
编译完成后,在arch/arm/boot目录下生成Image文件, 在arch/arm/boot/dts目录下生成100ask_imx6ull_qemu.dtb设备树的二进制.dtb文件