Difference between revisions of "NanoPi K2/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(在Linux Desktop下通过脚本制作)
(updated by API)
 
(88 intermediate revisions by 5 users not shown)
Line 5: Line 5:
 
[[File:NanoPi K2-2.jpg|thumb|300px]]
 
[[File:NanoPi K2-2.jpg|thumb|300px]]
 
[[File:NanoPi K2-3.jpg|thumb|300px]]
 
[[File:NanoPi K2-3.jpg|thumb|300px]]
* NanoPi K2是友善电子专门针对工业级、商业级用户以及创客、嵌入式爱好者、电子艺术家等群体推出的一款小巧但集成了WiFi蓝牙、千兆网口、eMMC的NanoPi板。
+
* NanoPi K2采用了Amlogic公司64位四核A53主控S905, 内置五核Mali450 GPU, 最高运行主频可达2GHz,支持众多视频格式,具备超强的视频解码能力。
* NanoPi K2采用 Amlogic 四核Cortex -A53架构的S905 64位处理器,GPU方面则是搭载五核的ARM Mali-450,内存为2GB DDR3.支持动态调频、调压以及睡眠唤醒功能。
+
* NanoPi K2配备2GB DDR3内存,集成WiFi蓝牙,带有千兆以太网,USB,HDMI,红外遥控等接口,支持TF卡启动运行系统,并可扩展eMMC模块,尺寸与树莓派3相同,接口与之兼容,可运行Android, Ubuntu, 等嵌入式操作系统。
* NanoPi K2配备了丰富的接口,包括HDMI 1080P完美输出,eMMC模块接口、千兆以太网口、 I2S、四个USB接口等。而且板载红外接收器,拥有独立的调试串口,丰富的GPIO口。解码能力上支持超高清4K@60fps硬件解码,支持H.265 10比特、H.264和AVS+等众多格式,能满足目前以视频播放为主的OTT的应用, 视频服务是OTT上最重要的功能,解码能力提高到了4K 10bit模式,支持Dolby,DTS,能提供4K,高保真音频的完美还原。
+
* 需要特别说明的是,NanoPi K2支持动态电压调频(DVFS),无需散热装置即可长时间稳定流畅播放高清视频。它非常适合客制化高清播放广告机,网络高清机顶盒等方面的应用,以及创客,爱好者们DIY制作家庭娱乐设备, 多媒体服务器,高速并行计算机等装置。
  
 
==资源特性==
 
==资源特性==
* CPU: S905,Quad-core Cortex-A53@1.5GHz  
+
* CPU: Amlogic S905, Quad-core ARM Cortex-A53@1.5GHz, DVFS
* DDR3 RAM: 2GB  
+
* GPU: Penta-core ARM Mali™-450
 +
* RAM: 2GB DDR3
 
* 以太网: 10/100/1000M (RTL8211F)
 
* 以太网: 10/100/1000M (RTL8211F)
 
* Wireless:802.11 b/g/n
 
* Wireless:802.11 b/g/n
Line 17: Line 18:
 
* 天线: Wi-Fi和蓝牙共用, 板载陶瓷天线, 同时提供IPX接口
 
* 天线: Wi-Fi和蓝牙共用, 板载陶瓷天线, 同时提供IPX接口
 
* 红外:板载红外接收模块
 
* 红外:板载红外接收模块
* 音频:Via HDMI/BT
+
* 音频:Via HDMI/蓝牙
* eMMC: 板载eMMC模块接口以及eMMC模块固定柱子
+
* eMMC: 板载eMMC模块接口
 
* I2S:板载I2S接口, 7Pin, 2.54mm排针
 
* I2S:板载I2S接口, 7Pin, 2.54mm排针
 
* SD: microSD卡槽一个
 
* SD: microSD卡槽一个
 
* USB Host: 4 x USB 2.0 Host, 标准A型接口
 
* USB Host: 4 x USB 2.0 Host, 标准A型接口
 
* Micro USB: 1 x USB 2.0, 有OTG功能, 可作为电源输入和数据传输
 
* Micro USB: 1 x USB 2.0, 有OTG功能, 可作为电源输入和数据传输
* HDMI: HDMI 1.4a, Type A型口,1080P高清显示
+
* HDMI: HDMI 2.0, Type-A型口, 支持4K显示
* GPIO扩展接口: 40 Pin,2.54mm排针  
+
* GPIO扩展接口: 40 Pin,2.54mm排针, 包含I2C, ADC, GPIO, UART, PWM, SPDIF, CVBS等
 
* 调试串口:4Pin,2.5mm单排针
 
* 调试串口:4Pin,2.5mm单排针
* 按键:K1(电源按键)
+
* 按键:电源按键一个
* LED:电源指示灯,系统状态指示灯
+
* LED:电源指示灯一个, 系统状态指示灯一个
 +
* 电源接口:DC电源接口, microUSB接口
 
* PCB Size:56x85mm,6层,沉金工艺
 
* PCB Size:56x85mm,6层,沉金工艺
 
* 供电: DC 5V/2A
 
* 供电: DC 5V/2A
Line 33: Line 35:
 
==接口布局和尺寸==
 
==接口布局和尺寸==
 
===接口布局===
 
===接口布局===
[[File:NanoPC-M2A-1610-IF-001.png |thumb|600px|NanoPi-M2A接口布局]]
+
[[File:NanoPi-K2-IF-001.png |thumb|600px|NanoPi-K2接口布局]]
  
 
* '''GPIO管脚定义'''
 
* '''GPIO管脚定义'''
Line 42: Line 44:
 
|1    || SYS_3.3V  ||2    || VDD_5V
 
|1    || SYS_3.3V  ||2    || VDD_5V
 
|-
 
|-
|3    || I2C0_SDA     ||4    || VDD_5V
+
|3    || GPIODV_24/I2C_SDA_A     ||4    || VDD_5V
 
|-  
 
|-  
|5    || I2C0_SCL     ||6    || DGND
+
|5    ||GPIODV_25/I2C_SCK_A     ||6    || GND
 
|-
 
|-
|7    || GPIOD8/PPM       ||8    || UART3_TXD/GPIOD21
+
|7    || GPIOY_0       ||8    || GPIOY_13/UART_TX_C
 
|-
 
|-
|9    || DGND          ||10    || UART3_RXD/GPIOD17 
+
|9    || DGND          ||10    || GPIOY_13/UART_RX_C
 
|-
 
|-
|11  || UART4_TX/GPIOB29       ||12    || GPIOD1/PWM0
+
|11  || GPIOY_1       ||12    || GPIOY_16/PWM_A
 
|-
 
|-
|13  || GPIOB30       ||14    || DGND
+
|13  || GPIOY_2       ||14    || GND
 
|-
 
|-
|15  || GPIOB31     ||16    || GPIOC14/PWM2
+
|15  || GPIOY_3     ||16    || GPIOY_15/PWM_F
 
|-
 
|-
|17  || SYS_3.3V ||18    || GPIOB27
+
|17  || SYS_3.3V ||18    || GPIOY_4
 
|-
 
|-
|19  || SPI0_MOSI/GPIOC31    ||20    || DGND
+
|19  || GPIOY_5    ||20    || GND
 
|-
 
|-
|21  || SPI0_MISO/GPIOD0     ||22    || UART4_RX/GPIOB28
+
|21  || GPIOY_7     ||22    || GPIOY_6
 
|-
 
|-
|23  || SPI0_CLK/GPIOC29     ||24    || SPI0_CS/GPIOC30
+
|23  || GPIOY_9     ||24    || GPIOY_8
 
|-
 
|-
|25  || DGND          ||26    || GPIOB26
+
|25  || DGND          ||26    || GPIOY_10
 
|-
 
|-
|27  || I2C1_SDA     ||28    || I2C1_SCL
+
|27  || GPIODV_26/I2C_SDA_B     ||28    || GPIODV_27/I2C_SCK_B
 
|-
 
|-
|29  || GPIOC8       ||30    || DGND
+
|29  || GPIOY_11/SPDIF_IN       ||30    || GND
 
|-
 
|-
|31  || GPIOC7      ||32    || GPIOC28
+
|31  || GPIOAO_5    ||32    || GPIOY_12/SPDIF_OUT
 
|-
 
|-
|33  || GPIOC13/PWM1       ||34    || DGND
+
|33  || GPIOH_3       ||34    || GND
 
|-
 
|-
|35  || SPI2_MISO/GPIOC11   ||36    || SPI2_CS/GPIOC10
+
|35  || GPIOCLK_1   ||36    || CVBS
 
|-
 
|-
|37  || AliveGPIO3    ||38    || SPI2_MOSI/GPIOC12
+
|37  || AIN1    ||38    || 1.8V Vref Out
 
|-
 
|-
|39  || DGND         ||40    || SPI2_CLK/GPIOC9
+
|39  || GND         ||40    || AIN0
 
|}
 
|}
 +
 +
* '''eMMC接口管脚定义'''
 +
::{| class="wikitable"
 +
|-
 +
|Pin# || Name          ||Pin#  || Name   
 +
|-
 +
|1    || eMMC_D0 ||2    || eMMC_D1
 +
|-
 +
|3    || eMMC_D2    ||4    || eMMC_D3
 +
|-
 +
|5    || eMMC_D4      ||6    || eMMC_D5
 +
|-
 +
|7    || eMMC_D6      ||8    || eMMC_D7
 +
|-
 +
|9    || eMMC_DS          ||10    || GND
 +
|-
 +
|11  || eMMC_CMD      ||12    || eMMC_CLK
 +
|-
 +
|13  || NC      ||14    || GND
 +
|-
 +
|15  || NC      ||16    || 1.8V OUT
 +
|-
 +
|17  || eMMC_RST ||18    || 3.3V OUT
 +
|-
 +
|19  || GPIOY_5    ||20    || GND
 +
|}
 +
 
* '''Debug Port(UART0)'''
 
* '''Debug Port(UART0)'''
 
::{| class="wikitable"
 
::{| class="wikitable"
Line 85: Line 114:
 
|Pin# || Name       
 
|Pin# || Name       
 
|-
 
|-
|1    || DGND    
+
|1    || GND    
 
|-
 
|-
 
|2    || VDD_5V     
 
|2    || VDD_5V     
 
|-  
 
|-  
|3    || UART_TXD0    
+
|3    || UART_TX_AO_A    
 
|-
 
|-
|4    || UART_RXD0
+
|4    || UART_RX_AO_A
 
|}
 
|}
 
* '''7Pin I2S接口定义'''
 
* '''7Pin I2S接口定义'''
Line 98: Line 127:
 
|Pin# || Name       
 
|Pin# || Name       
 
|-
 
|-
|1    || DGND    
+
|1    || GND    
 
|-
 
|-
|2    || VDD_3.3V  
+
|2    || SYS_3.3V    
 
|-  
 
|-  
|3    || I2S_BCK1   
+
|3    || I2S_SCLK 
 
|-
 
|-
|4    || I2S_LRCK1
+
|4    || I2S_LRCLK
 
|-     
 
|-     
|5    || I2S_SDOUT1
+
|5    || I2S_DATA_OUT
 
|-
 
|-
|6    || I2S_SDIN1
+
|6    || I2S_DATA_IN
 
|-
 
|-
|7    || I2S_MCLK1
+
|7    || I2S_MCLK
 
|}
 
|}
  
 
:'''说明'''
 
:'''说明'''
 
::#SYS_3.3V: 3.3V电源输出
 
::#SYS_3.3V: 3.3V电源输出
::#VDD_5V: 5V电源输入/输出。当电压大于MicroUSB时,向板子供电,否则板子从MicroUSB取电。输入范围:4.7~5.6V
+
::#VDD_5V: 5V电源输入/输出。输入范围:4.7~5.6V
::#全部信号引脚均为3.3V电平,输出电流为5mA,可以带动小负荷模块,io都不能带负载
+
::#全部信号引脚均为3.3V电平
::#更详细的信息请查看原理图:[]
+
::#更详细的信息请查看原理图:[http://wiki.friendlyelec.com/wiki/images/d/d1/NanoPi-K2-1701-Schematic.pdf NanoPi-K2-1701-Schematic.pdf]
  
 
===机械尺寸===
 
===机械尺寸===
[[File:NanoPi K2 Dimensions.png|frameless|500px|NanoPi K2 Dimensions]]
+
[[File:NanoPi-K2-1701-Dim.png|frameless|500px|NanoPi K2 Dimensions]]
  
::详细尺寸:[]
+
::详细尺寸:[http://wiki.friendlyelec.com/wiki/images/2/26/NanoPi-K2-1701-dxf.zip NanoPi-K2-1701-dxf.zip]
  
 
==快速入门==
 
==快速入门==
Line 130: Line 159:
 
* TF卡: Class10或以上的 8GB SDHC卡
 
* TF卡: Class10或以上的 8GB SDHC卡
 
* 一个DC接口的外接电源,要求输出为5V/2A
 
* 一个DC接口的外接电源,要求输出为5V/2A
* 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
+
* 一台支持HDMI输入的显示器或者电视
* 一套USB键盘鼠标,同时连接还需要USB HUB (或选购串口转接板,要PC上进行操作)
+
* 一套USB键盘鼠标
* 一台电脑,需要联网,建议使用Ubuntu 14.04 64位系统
+
* 一台电脑,需要联网,建议使用Ubuntu 18.04 64位系统
  
===经测试使用的TF卡===
+
{{TFCardsWeTested/zh}}
制作启动NanoPi K2的TF卡时,建议Class10或以上的 8GB SDHC卡。以下是经友善之臂测试验证过的高速TF卡:
+
*SanDisk闪迪 TF 8G Class10 Micro/SD 高速 TF卡:
+
[[File:SanDisk MicroSD.png|frameless|100px|SanDisk MicroSD 8G]]
+
*SanDisk闪迪 TF128G 至尊高速MicroSDXC TF 128G Class10 48MB/S:
+
[[File:SanDisk MicroSD-01.png|frameless|100px|SanDisk MicroSD 128G]]
+
*川宇 8G手机内存卡 8GTF卡存储卡 C10高速class10 micro SD卡:
+
[[File:SanDisk MicroSD-02.png|frameless|100px|chuanyu MicroSD 8G]]
+
  
===制作一张带运行系统的SD卡===
+
===制作带运行系统的SD卡/eMMC模块===
====快速从SD卡启动NanoPi K2====
+
====快速从SD卡/eMMC模块启动NanoPi K2====
首先访问[此处的下载地址]下载需要的固件文件:<br />
+
首先访问[http://dl.friendlyelec.com/nanopik2 下载地址]下载需要的固件文件:<br />
* 您需要准备一张4G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
+
  
 
::{| class="wikitable"
 
::{| class="wikitable"
Line 152: Line 173:
 
|colspan=2|固件文件列表:
 
|colspan=2|固件文件列表:
 
|-
 
|-
|s905-android-sd4g-xxx.img.zip    || Android5.1系统固件                
+
|nanopi-k2_android_5.1.1-YYYYMMDD.img.zip    || 烧写到SD卡的Android5.1系统固件
 +
|-
 +
|nanopi-k2_ubuntu_core_xenial-YYYYMMDD.img.zip    || 烧写到SD卡的Ubuntu-Core with Qt-Embedded系统固件
 +
|-
 +
|nanopi-k2_android_5.1.1-emmc-YYYYMMDD.img.zip    || 烧写到eMMC模块的Android5.1系统固件
 +
|-
 +
|nanopi-k2_ubuntu_core_xenial-emmc-YYYYMMDD.img.zip    || 烧写到eMMC模块的Ubuntu-Core with Qt-Embedded系统固件
 
|-
 
|-
 
|colspan=2|烧写工具:   
 
|colspan=2|烧写工具:   
Line 159: Line 186:
 
|-  
 
|-  
 
|}
 
|}
 
+
=====烧写系统到SD卡=====
 
*将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
 
*将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
*当制作完成 SD 卡后,拔出 SD 卡插入 NanoPi K2 的 BOOT 卡槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到红灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。<br />
+
*当制作完成 SD 卡后,拔出 SD 卡插入 NanoPi K2 的 BOOT 卡槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。
 +
 
 +
=====烧写系统到eMMC模块=====
 +
*将固件和烧写工具分别解压,在 Windows 下插入 eMMC(需使用MicroSD转eMMC模块适配器),以管理员身份运行 win32diskimager 工具, 在 win32diskimager 工具的界面上, 选择你的 SD 卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
 +
[[File:EMMC_module_1.jpg|400px]][[File:EMMC_module_4.jpg|400px]]
 +
*当烧写完成后,弹出MicroSD转eMMC模块适配器,将 eMMC 模块插入 NanoPi K2 的 eMMC 插槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。<br />
 +
[[File:Emmc_k2.jpg|400px]]
 +
*当K2同时接了 SD 卡和 eMMC 模块时,系统总是会从 eMMC 启动。只有不接 eMMC 模块时,才能从 SD 卡启动系统。
  
 
====在Linux Desktop下通过脚本制作====
 
====在Linux Desktop下通过脚本制作====
* 1) 将microSD插入Ubuntu的电脑,用以下命令查看你的SD卡设备名
+
* 1) 将microSD/带eMMC的MicroSD转eMMC模块适配器插入Ubuntu的电脑,用以下命令查看你的SD卡设备名
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
dmesg | tail
 
dmesg | tail
Line 179: Line 213:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
su
 
su
./fusing.sh /dev/sdx
+
./fusing.sh /dev/sdx android
 
</syntaxhighlight>
 
</syntaxhighlight>
 
(注:/dev/sdx请替换为实际的SD卡设备文件名) <br />
 
(注:/dev/sdx请替换为实际的SD卡设备文件名) <br />
 
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。
 
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。
  
*4) 以下是制作启动Debian的SD卡的方法
+
*4) 以下是制作启动Android的eMMC模块的方法
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./fusing.sh /dev/sdx Android
+
su
 +
./fusing.sh /dev/sdx android emmc
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
(注:/dev/sdx请替换为实际的eMMC模块设备文件名) <br />
 +
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。
  
====NanoPi M2A 扩展TF卡分区====
+
====NanoPi K2 扩展TF/eMMC模块分区====
* Debian/Ubuntu系统在启动的时候,会自动扩展SD卡分区,第一次开机时自动扩展分区和根文件系统。
+
* Android扩展分区,要在pc上执行下列操作, Ubuntu系统会自动扩展,无需进行此操作:
* Android扩展分区,要在pc上执行下列操作:
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo umount /dev/sdx?
 
sudo umount /dev/sdx?
sudo parted /dev/sdx unit % resizepart 4 100 resizepart 7 100 unit MB print
+
sudo parted /dev/sdx unit % resizepart 4 100 unit MB print
sudo resize2fs -f /dev/sdx7
+
sudo resize2fs -f /dev/sdx4
 
</syntaxhighlight>
 
</syntaxhighlight>
(注:/dev/sdx请替换为实际的SD卡设备文件名)
+
(注:/dev/sdx请替换为实际的SD卡/eMMC模块设备文件名)
  
====关于LCD/HDMI分辨率====
+
====关于HDMI分辨率====
系统启动时uboot会自动识别LCD,成功则会设置为该LCD的显示分辨率,失败则缺省会设置为HDMI 720P模式。<br />
+
对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。
如果要修改LCD的显示分辨率,可以直接修改内核中的文件 arch/arm/plat-s5p4418/nanopi2/lcds.c , 然后重新编译内核并更新即可。<br />
+
对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。如果使用的是Debian,则缺省是720P,可通过修改内核配置来切换为1080P。
+
  
===在电脑上修改SD卡上的系统===
+
===运行Android===
如果你想在运行系统之前,先对系统做一些修改,可以参看本节内容,否则可以跳过本节。<br />
+
* 将制作好SD卡插入NanoPi K2,连接HDMI,最后接电源,NanoPi K2会从SD卡启动。你可以看到板上PWR灯以及蓝灯常亮,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。<br />
将制作好microSD卡插入一台运行Linux的电脑,可以挂载SD卡上的boot和rootfs等分区,对分区内容进行修改,通过在以下情况下你需要进行这些操作:<br />
+
[[File:NanoPi-K2-4.jpg|frameless|NanoPi K2 Android5.1]]
1) 你想更改Kernel Command Line参数,则可以通过sd-fuse_nanopi2/tools目录下的fw_setenv工具来操作。<br />
+
* 如同所有PC, 正确的关机对NanoPi K2而言很重要,否则可能会损坏安装在MicroSD卡中的系统文件,导致下次无法顺利启动运行,如要关机,直接按PWR按键即可。
查看当前的Command Line:
+
 
 +
====运行多媒体播放器Kodi====
 +
 
 +
Android系统中已经预装了Kodi, 支持硬解播放,通过首页上的Kodi图标即可进入,运行界面如下所示:<br />
 +
[[File:Kodi-Homepage.png|frameless|Kodi-Homepage]] <br />
 +
将存放有视频的U盘插入NanoPi K2的USB口,在Kodi的界面上选择Videos -> udisk0,可加载并播放U盘里的视频,非常方便:<br />
 +
[[File:Kodi-Playing.png|frameless|Kodi-Playing]] <br />
 +
 
 +
===运行Ubuntu core系统===
 +
====Ubuntu core系统介绍====
 +
Ubuntu Core with Qt-Embedded,是一个没有X-windows环境,使用Qt-Embedded作为图形界面的轻量级Ubuntu系统,系统特性如下:<br />
 +
* 支持HDMI输出
 +
* 支持WiFi连接
 +
* 支持千兆以太网
 +
* 支持蓝牙传输
 +
* 内建Qt-Embedded
 +
得益于A53架构处理器强大的性能,2G内存以及千兆以太网,NanoPi-K2搭配Ubuntu系统非常适合作为IoT服务端,或DIY各类轻量级的服务器,如Nas等。
 +
====Ubuntu core系统的使用====
 +
将烧写了Ubuntu系统的SD卡插入NanoPi-K2并上电,在电视或者串口终端上均能看到如下所示的终端画面:<br />
 +
[[File:K2-ubuntu.png|frameless|500px|K2-ubuntu]]<br />
 +
 
 +
要显示Qt-Embedded界面,在命令行执行:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd sd-fuse_nanopi2/tools
+
$ sudo /opt/QtE-Demo/run.sh
./fw_printenv /dev/sdc | grep bootargs
+
 
</syntaxhighlight>
 
</syntaxhighlight>
目前的Android 5.1.1_r6启用了SELinux,缺省模式是enforcing,你可以通过Command Line来修改它,例如:
+
在电视屏幕上可以看到如下画面,这是一个开源的Qt Demo程序:<br />
 +
[[File:K2-QtE.png|frameless|500px|K2-QtE]]<br />
 +
 
 +
关于Ubuntu Core的详细使用指南,请查看此链接: [http://wiki.friendlyelec.com/wiki/index.php/Ubuntu_Core_with_Qt-Embedded/zh Ubuntu Core with Qt-Embedded]
 +
 
 +
==如何编译系统==
 +
 
 +
===安装交叉编译器===
 +
* 安装ARMv7交叉编译器
 +
编译U-Boot需要ARMv7的交叉编译器,首先下载并解压编译器:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
./fw_setenv /dev/sdc bootargs XXX androidboot.selinux=permissive
+
git clone https://github.com/friendlyarm/prebuilts.git
 +
sudo mkdir -p /opt/FriendlyARM/toolchain
 +
sudo tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/
 
</syntaxhighlight>
 
</syntaxhighlight>
即可修改为permissive模式,其中上面的XXX需要替换成原来的bootargs值。<br />
 
  
2) 更新内核 <br />
+
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
新版本的uboot在启动时如果识别到LCD,将读取SD卡boot分区的uImage,否则将读取uImage.hdmi。<br />
+
<syntaxhighlight lang="bash">
对于Android来说是同一个文件,因此直接使用新编译的uImage来替换SD卡boot分区下的文件即可。<br />
+
export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
对于Debian来说,这2个文件是不相同的,使用新编译的支持LCD的uImage直接替换SD卡boot分区的文件,如果是支持HDMI的内核,则替换uImage.hdmi。<br />
+
export GCC_COLORS=auto
 +
</syntaxhighlight>
 +
 
 +
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
 +
<syntaxhighlight lang="bash">
 +
. ~/.bashrc
 +
</syntaxhighlight>
 +
 
 +
这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:
 +
<syntaxhighlight lang="bash">
 +
arm-linux-gcc -v
 +
Using built-in specs.
 +
COLLECT_GCC=arm-linux-gcc
 +
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/4.9.3/libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper
 +
Target: arm-cortexa9-linux-gnueabihf
 +
Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu
 +
--host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3
 +
--with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++
 +
--with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard
 +
...
 +
Thread model: posix
 +
gcc version 4.9.3 (ctng-1.21.0-229g-FA)
 +
</syntaxhighlight>
 +
 
 +
* 安装AArch64交叉编译器
 +
编译U-Boot和Linux需要AArch64的交叉编译器,可使用linaro toolchain:
 +
<syntaxhighlight lang="bash">
 +
wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
 +
tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
 +
export PATH=~/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin:$PATH
 +
</syntaxhighlight>
 +
可以修改 ~/.bashrc 将编译器的路径加入到PATH中。
 +
 
 +
===编译U-Boot===
 +
下载U-Boot源代码并编译,注意分支是nanopi-k2-v2015.01:
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/u-boot.git uboot
 +
cd uboot
 +
git checkout nanopi-k2-v2015.01
 +
make nanopi-k2_defconfig
 +
make
 +
</syntaxhighlight>
 +
 
 +
编译成功结束后您将获得fip/gxb/u-boot.bin,可使用以下命令直接更新SD卡:
 +
<syntaxhighlight lang="bash">
 +
sudo ./fusing.sh /dev/sdc
 +
</syntaxhighlight>
 +
 
 +
使用以下命令直接更新SD卡
 +
<syntaxhighlight lang="bash">
 +
sudo ./fusing.sh /dev/sdc emmc
 +
</syntaxhighlight>
 +
 
 +
您也可以通过fastboot来更新正在运行的NanoPi K2板上SD的U-Boot,方法如下:<br />
 +
1) 在电脑上先用命令 sudo apt-get install android-tools-fastboot 安装 fastboot 工具;<br />
 +
2) 用串口配件连接NanoPi K2和电脑,在上电启动的2秒内,在串口终端上按下回车,进入 u-boot 的命令行模式;<br />
 +
3) 在u-boot 命令行模式下输入命令 fastboot usb 回车,进入 fastboot 模式;<br />
 +
4) 用microUSB线连接NanoPi K2和电脑,在电脑上输入以下命令烧写u-boot.bin:<br />
 +
<syntaxhighlight lang="bash">
 +
fastboot flash bootloader fip/gxb/u-boot.bin
 +
</syntaxhighlight>
 +
暂时无法通过fastboot更新eMMC模块上的U-boot。
 +
 
 +
===编译Linux kernel===
 +
====编译内核====
 +
* 下载内核源代码
 +
<syntaxhighlight lang="bash">
 +
git clone https://github.com/friendlyarm/linux.git
 +
cd linux
 +
git checkout nanopi-k2-3.14.y
 +
</syntaxhighlight>
 +
NanoPi K2内核所属的分支是nanopi-k2-3.14.y,在开始编译前先切换分支。
 +
* 编译Android内核
 +
<syntaxhighlight lang="bash">
 +
touch .scmversion
 +
make ARCH=arm64 nanopi-k2_android_defconfig
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image nanopi-k2.dtb
 +
</syntaxhighlight>
 +
编译成功结束后,即会生成新的 arch/arm64/boot/dts/amlogic/nanopi-k2.dtb 和 arch/arm64/boot/Image ,用于替换掉SD卡boot分区下对应的文件。
 +
* 编译Ubuntu内核
 +
<syntaxhighlight lang="bash">
 +
touch .scmversion
 +
make ARCH=arm64 nanopi-k2_ubuntu_defconfig
 +
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image nanopi-k2.dtb
 +
</syntaxhighlight>
 +
 
 +
====如何使用新编译的内核====
 +
* 更新SD卡上的内核
 +
如果您是使用SD卡启动Android,则在PC上复制为Android编译的Image 和nanopi-k2.dtb 到SD卡的boot分区(即分区1,设备是/dev/sdX1)即可。<br />
 +
 
 +
* 通过adb直接更新
 +
如果想直接更新正在运行中的板子,可通过adb将新的文件push到板子上,然后reboot即可,具体如下:
 +
<syntaxhighlight lang="bash">
 +
adb shell mount -t ext4 /dev/block/mmcblk0p1 /storage/sdcard1/
 +
adb push arch/arm64/boot/Image /storage/sdcard1/
 +
adb push arch/arm64/boot/dts/amlogic/nanopi-k2.dtb /storage/sdcard1/
 +
adb reboot
 +
</syntaxhighlight>
 +
 
 +
* 更新Android中预先编译的文件
 +
如果想要生成新的Android boot.img,则需要使用新生成的文件替换Android源代码目录device/friendly-arm/nanopi-k2-kernel 下对应的文件,然后编译Android即可。
 +
 
 +
===编译Android===
 +
* 搭建编译环境
 +
搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。
 +
<syntaxhighlight lang="bash">
 +
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
 +
sudo apt-get install flex libncurses5-dev zlib1g-dev gawk minicom
 +
</syntaxhighlight>
 +
更多说明可查看 https://source.android.com/source/initializing.html 。
 +
 
 +
* 下载Android5.1源代码
 +
Android源代码的下载需要使用repo,其安装和使用请查看 https://source.android.com/source/downloading.html 。
 +
<syntaxhighlight lang="bash">
 +
mkdir android && cd android
 +
repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi-k2-lollipop
 +
repo sync
 +
</syntaxhighlight>
 +
其中“android”是指工作目录。<br />
 +
 
 +
* 编译系统
 +
<syntaxhighlight lang="bash">
 +
source build/envsetup.sh
 +
lunch nanopi_k2-userdebug
 +
make -j8
 +
</syntaxhighlight>
 +
编译成功完成后,目录 out/target/product/nanopi-k2 下包含可用于烧写的image文件。
 +
::{| class="wikitable"
 +
|-
 +
|filename    || partition || Description 
 +
|-
 +
|u-boot.bin  || bootloader|| -
 +
|-
 +
|boot.img    || boot      || -
 +
|-
 +
|cache.img    || cache    || -
 +
|-
 +
|userdata.img || userdata  || -
 +
|-
 +
|system.img  || system    || -
 +
|-
 +
|partmap.txt  || -        || 分区描述文件
 +
|-
 +
|}
 +
 
 +
* 烧写到SD卡
 +
如果是采用SD卡启动Android,可复制编译生成的image文件到sd-fuse_amlogic/android/ 下,使用脚本即可烧到到SD卡,具体请查看[[#在Linux Desktop下通过脚本制作]]。
 +
 
 +
* 使用fastboot更新
 +
板子启动后通过串口快速按任意键进入uboot命令行模式,输入命令fastboot usb即可更新Android。<br />
 +
连接USB线,然后PC端输入以下命令:
 +
<syntaxhighlight lang="bash">
 +
cd out/target/product/nanopi-k2
 +
sudo fastboot flash boot boot.img
 +
sudo fastboot flash cache cache.img
 +
sudo fastboot flash userdata userdata.img
 +
sudo fastboot flash system system.img
 +
sudo fastboot reboot
 +
</syntaxhighlight>
 +
 
 +
{{MoreOS/zh}}
 +
 
 +
==更新日志==
 +
===2017-10-07===
 +
添加烧写系统到emmc模块的说明。
 +
 
 +
===2017-09-08===
 +
修改内核编译部分。
 +
 
 +
===2017-07-19===
 +
为NanoPi-K2增加Ubuntu Core系统,内含Qt-Embedded图形界面库,系统特性如下:
 +
* 支持HDMI输出
 +
* 支持WiFi连接
 +
* 支持千兆以太网
 +
* 支持蓝牙传输
 +
* 内建Qt-Embedded
 +
 
 +
得益于A53架构处理器强大的性能,2G内存以及千兆以太网,NanoPi-K2搭配Ubuntu系统非常适合作为IoT服务端,或DIY各类轻量级的服务器,如Nas等。
 +
 
 +
===2017-05-27===
 +
在Android系统中预装Kodi。
  
===运行Android或Debian===
 
* 将制作好SD卡插入NanoPi M2A,连接HDMI,最后接电源(5V 3A)拨动开关,NanoPi M2A会从SD卡启动。你可以看到板上PWR灯常亮,LED1灯闪烁,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。<br />
 
1)要在电视上进行操作,你需要连接USB鼠标和键盘;如果你选购了LCD配件,则可以直接使用LCD上面的触摸屏进行操作。<br />
 
2)如果您需要进行内核开发,你最好选购一个串口配件,连接了串口,则可以通过终端对NanoPi M2A进行操作。<br />
 
*以下是串口的接法。接上串口,即可调试:
 
[[File:PSU-ONECOM02-M3.png|frameless|400px|PSU-ONECOM02-M3]]
 
* 如果提示输入密码,Debian的root用户的默认密码是两个字母fa。
 
  
===通过VNC和ssh登录Debian===
+
===2017-04-12===
如果你是祼板运行系统(既没有连接LCD也没有连接HDMI),你可以使用手机或电脑到[http://www.realvnc.com/download/ 这里]下载并安装一个名为VNC Viewer的软件,用VNC连接到NanoPi M2A,默认密码为:fa123456 。<br />
+
首次创建并发布。
以下是在iPhone上用VNC登录NanoPi M2A的画面:<br />
+
[[File:iphone6-vnc-nanopi2.png|frameless|400px|VNC to NanoPi2]]
+
<br />
+
你也可以通过 ssh -l root 192.168.8.1 命令在终端上登录,默认的root用户密码是 fa 。<br />
+
<br />
+

Latest revision as of 07:18, 21 February 2022

English

1 介绍

NanoPi K2-1.jpg
NanoPi K2-2.jpg
NanoPi K2-3.jpg
  • NanoPi K2采用了Amlogic公司64位四核A53主控S905, 内置五核Mali450 GPU, 最高运行主频可达2GHz,支持众多视频格式,具备超强的视频解码能力。
  • NanoPi K2配备2GB DDR3内存,集成WiFi蓝牙,带有千兆以太网,USB,HDMI,红外遥控等接口,支持TF卡启动运行系统,并可扩展eMMC模块,尺寸与树莓派3相同,接口与之兼容,可运行Android, Ubuntu, 等嵌入式操作系统。
  • 需要特别说明的是,NanoPi K2支持动态电压调频(DVFS),无需散热装置即可长时间稳定流畅播放高清视频。它非常适合客制化高清播放广告机,网络高清机顶盒等方面的应用,以及创客,爱好者们DIY制作家庭娱乐设备, 多媒体服务器,高速并行计算机等装置。

2 资源特性

  • CPU: Amlogic S905, Quad-core ARM Cortex-A53@1.5GHz, DVFS
  • GPU: Penta-core ARM Mali™-450
  • RAM: 2GB DDR3
  • 以太网: 10/100/1000M (RTL8211F)
  • Wireless:802.11 b/g/n
  • Bluetooth:4.0 dual mode
  • 天线: Wi-Fi和蓝牙共用, 板载陶瓷天线, 同时提供IPX接口
  • 红外:板载红外接收模块
  • 音频:Via HDMI/蓝牙
  • eMMC: 板载eMMC模块接口
  • I2S:板载I2S接口, 7Pin, 2.54mm排针
  • SD: microSD卡槽一个
  • USB Host: 4 x USB 2.0 Host, 标准A型接口
  • Micro USB: 1 x USB 2.0, 有OTG功能, 可作为电源输入和数据传输
  • HDMI: HDMI 2.0, Type-A型口, 支持4K显示
  • GPIO扩展接口: 40 Pin,2.54mm排针, 包含I2C, ADC, GPIO, UART, PWM, SPDIF, CVBS等
  • 调试串口:4Pin,2.5mm单排针
  • 按键:电源按键一个
  • LED:电源指示灯一个, 系统状态指示灯一个
  • 电源接口:DC电源接口, microUSB接口
  • PCB Size:56x85mm,6层,沉金工艺
  • 供电: DC 5V/2A

3 接口布局和尺寸

3.1 接口布局

NanoPi-K2接口布局
  • GPIO管脚定义
Pin# Name Pin# Name
1 SYS_3.3V 2 VDD_5V
3 GPIODV_24/I2C_SDA_A 4 VDD_5V
5 GPIODV_25/I2C_SCK_A 6 GND
7 GPIOY_0 8 GPIOY_13/UART_TX_C
9 DGND 10 GPIOY_13/UART_RX_C
11 GPIOY_1 12 GPIOY_16/PWM_A
13 GPIOY_2 14 GND
15 GPIOY_3 16 GPIOY_15/PWM_F
17 SYS_3.3V 18 GPIOY_4
19 GPIOY_5 20 GND
21 GPIOY_7 22 GPIOY_6
23 GPIOY_9 24 GPIOY_8
25 DGND 26 GPIOY_10
27 GPIODV_26/I2C_SDA_B 28 GPIODV_27/I2C_SCK_B
29 GPIOY_11/SPDIF_IN 30 GND
31 GPIOAO_5 32 GPIOY_12/SPDIF_OUT
33 GPIOH_3 34 GND
35 GPIOCLK_1 36 CVBS
37 AIN1 38 1.8V Vref Out
39 GND 40 AIN0
  • eMMC接口管脚定义
Pin# Name Pin# Name
1 eMMC_D0 2 eMMC_D1
3 eMMC_D2 4 eMMC_D3
5 eMMC_D4 6 eMMC_D5
7 eMMC_D6 8 eMMC_D7
9 eMMC_DS 10 GND
11 eMMC_CMD 12 eMMC_CLK
13 NC 14 GND
15 NC 16 1.8V OUT
17 eMMC_RST 18 3.3V OUT
19 GPIOY_5 20 GND
  • Debug Port(UART0)
Pin# Name
1 GND
2 VDD_5V
3 UART_TX_AO_A
4 UART_RX_AO_A
  • 7Pin I2S接口定义
Pin# Name
1 GND
2 SYS_3.3V
3 I2S_SCLK
4 I2S_LRCLK
5 I2S_DATA_OUT
6 I2S_DATA_IN
7 I2S_MCLK
说明
  1. SYS_3.3V: 3.3V电源输出
  2. VDD_5V: 5V电源输入/输出。输入范围:4.7~5.6V
  3. 全部信号引脚均为3.3V电平
  4. 更详细的信息请查看原理图:NanoPi-K2-1701-Schematic.pdf

3.2 机械尺寸

NanoPi K2 Dimensions

详细尺寸:NanoPi-K2-1701-dxf.zip

4 快速入门

4.1 准备工作

启动NanoPi K2前,请先准备好以下硬件

  • NanoPi K2主板
  • TF卡: Class10或以上的 8GB SDHC卡
  • 一个DC接口的外接电源,要求输出为5V/2A
  • 一台支持HDMI输入的显示器或者电视
  • 一套USB键盘鼠标
  • 一台电脑,需要联网,建议使用Ubuntu 18.04 64位系统

4.2 经测试可选用的TF卡

制作启动TF卡时,建议Class10或以上的 8GB SDHC卡。以下是经友善电子测试验证过的高速TF卡:

  • SanDisk闪迪 32GB TF(MicroSD)存储卡 U3 C10 A1 V30 4K 至尊超极速移动版内存卡 (开发者推荐)

SanDiskExtremePro

  • SanDisk闪迪32GB TF(MicroSD)存储卡 行车记录仪&安防监控专用内存卡 (长时间运行推荐)

SanDiskHighEndurance

  • SanDisk闪迪 TF 8G Class10 microSD 高速 TF卡:

SanDisk microSD 8G

  • SanDisk闪迪 TF 128G 至尊高速 Class10 microSDXC TF 128G 48MB/S:

SanDisk microSD 128G

  • 川宇 8G手机内存卡 TF 8G 卡存储卡 C10 高速 Class10 microSD卡:

chuanyu microSD 8G

4.3 制作带运行系统的SD卡/eMMC模块

4.3.1 快速从SD卡/eMMC模块启动NanoPi K2

首先访问下载地址下载需要的固件文件:

固件文件列表:
nanopi-k2_android_5.1.1-YYYYMMDD.img.zip 烧写到SD卡的Android5.1系统固件
nanopi-k2_ubuntu_core_xenial-YYYYMMDD.img.zip 烧写到SD卡的Ubuntu-Core with Qt-Embedded系统固件
nanopi-k2_android_5.1.1-emmc-YYYYMMDD.img.zip 烧写到eMMC模块的Android5.1系统固件
nanopi-k2_ubuntu_core_xenial-emmc-YYYYMMDD.img.zip 烧写到eMMC模块的Ubuntu-Core with Qt-Embedded系统固件
烧写工具:
win32diskimager.rar Windows平台下的烧写工具,Linux系统可以用dd命令
4.3.1.1 烧写系统到SD卡
  • 将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
  • 当制作完成 SD 卡后,拔出 SD 卡插入 NanoPi K2 的 BOOT 卡槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。
4.3.1.2 烧写系统到eMMC模块
  • 将固件和烧写工具分别解压,在 Windows 下插入 eMMC(需使用MicroSD转eMMC模块适配器),以管理员身份运行 win32diskimager 工具, 在 win32diskimager 工具的界面上, 选择你的 SD 卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。

EMMC module 1.jpgEMMC module 4.jpg

  • 当烧写完成后,弹出MicroSD转eMMC模块适配器,将 eMMC 模块插入 NanoPi K2 的 eMMC 插槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。

Emmc k2.jpg

  • 当K2同时接了 SD 卡和 eMMC 模块时,系统总是会从 eMMC 启动。只有不接 eMMC 模块时,才能从 SD 卡启动系统。

4.3.2 在Linux Desktop下通过脚本制作

  • 1) 将microSD/带eMMC的MicroSD转eMMC模块适配器插入Ubuntu的电脑,用以下命令查看你的SD卡设备名
dmesg | tail

当dmesg输出类拟信息 sdc: sdc1 sdc2时,则表示SD卡对应的设备名为 /dev/sdc,也通过用命令cat /proc/partitions来查看。

  • 2) 下载Linux下的制作脚本
git clone https://github.com/friendlyarm/sd-fuse_amlogic.git
cd sd-fuse_amlogic
  • 3) 以下是制作启动Android的SD卡的方法
su
./fusing.sh /dev/sdx android

(注:/dev/sdx请替换为实际的SD卡设备文件名)
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。

  • 4) 以下是制作启动Android的eMMC模块的方法
su
./fusing.sh /dev/sdx android emmc

(注:/dev/sdx请替换为实际的eMMC模块设备文件名)
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。

4.3.3 NanoPi K2 扩展TF/eMMC模块分区

  • Android扩展分区,要在pc上执行下列操作, Ubuntu系统会自动扩展,无需进行此操作:
sudo umount /dev/sdx?
sudo parted /dev/sdx unit % resizepart 4 100 unit MB print
sudo resize2fs -f /dev/sdx4

(注:/dev/sdx请替换为实际的SD卡/eMMC模块设备文件名)

4.3.4 关于HDMI分辨率

对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。

4.4 运行Android

  • 将制作好SD卡插入NanoPi K2,连接HDMI,最后接电源,NanoPi K2会从SD卡启动。你可以看到板上PWR灯以及蓝灯常亮,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。

NanoPi K2 Android5.1

  • 如同所有PC, 正确的关机对NanoPi K2而言很重要,否则可能会损坏安装在MicroSD卡中的系统文件,导致下次无法顺利启动运行,如要关机,直接按PWR按键即可。

4.4.1 运行多媒体播放器Kodi

Android系统中已经预装了Kodi, 支持硬解播放,通过首页上的Kodi图标即可进入,运行界面如下所示:
Kodi-Homepage
将存放有视频的U盘插入NanoPi K2的USB口,在Kodi的界面上选择Videos -> udisk0,可加载并播放U盘里的视频,非常方便:
Kodi-Playing

4.5 运行Ubuntu core系统

4.5.1 Ubuntu core系统介绍

Ubuntu Core with Qt-Embedded,是一个没有X-windows环境,使用Qt-Embedded作为图形界面的轻量级Ubuntu系统,系统特性如下:

  • 支持HDMI输出
  • 支持WiFi连接
  • 支持千兆以太网
  • 支持蓝牙传输
  • 内建Qt-Embedded

得益于A53架构处理器强大的性能,2G内存以及千兆以太网,NanoPi-K2搭配Ubuntu系统非常适合作为IoT服务端,或DIY各类轻量级的服务器,如Nas等。

4.5.2 Ubuntu core系统的使用

将烧写了Ubuntu系统的SD卡插入NanoPi-K2并上电,在电视或者串口终端上均能看到如下所示的终端画面:
K2-ubuntu

要显示Qt-Embedded界面,在命令行执行:

$ sudo /opt/QtE-Demo/run.sh

在电视屏幕上可以看到如下画面,这是一个开源的Qt Demo程序:
K2-QtE

关于Ubuntu Core的详细使用指南,请查看此链接: Ubuntu Core with Qt-Embedded

5 如何编译系统

5.1 安装交叉编译器

  • 安装ARMv7交叉编译器

编译U-Boot需要ARMv7的交叉编译器,首先下载并解压编译器:

git clone https://github.com/friendlyarm/prebuilts.git
sudo mkdir -p /opt/FriendlyARM/toolchain
sudo tar xf prebuilts/gcc-x64/arm-cortexa9-linux-gnueabihf-4.9.3.tar.xz -C /opt/FriendlyARM/toolchain/

然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:

export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH
export GCC_COLORS=auto

执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:

. ~/.bashrc

这个编译器是64位的,不能在32位的Linux系统上运行,安装完成后,你可以快速的验证是否安装成功:

arm-linux-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gcc
COLLECT_LTO_WRAPPER=/opt/FriendlyARM/toolchain/4.9.3/libexec/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/lto-wrapper
Target: arm-cortexa9-linux-gnueabihf
Configured with: /work/toolchain/build/src/gcc-4.9.3/configure --build=x86_64-build_pc-linux-gnu
--host=x86_64-build_pc-linux-gnu --target=arm-cortexa9-linux-gnueabihf --prefix=/opt/FriendlyARM/toolchain/4.9.3
--with-sysroot=/opt/FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root --enable-languages=c,c++
--with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3 --with-float=hard
...
Thread model: posix
gcc version 4.9.3 (ctng-1.21.0-229g-FA)
  • 安装AArch64交叉编译器

编译U-Boot和Linux需要AArch64的交叉编译器,可使用linaro toolchain:

wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
export PATH=~/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin:$PATH

可以修改 ~/.bashrc 将编译器的路径加入到PATH中。

5.2 编译U-Boot

下载U-Boot源代码并编译,注意分支是nanopi-k2-v2015.01:

git clone https://github.com/friendlyarm/u-boot.git uboot
cd uboot
git checkout nanopi-k2-v2015.01
make nanopi-k2_defconfig
make

编译成功结束后您将获得fip/gxb/u-boot.bin,可使用以下命令直接更新SD卡:

sudo ./fusing.sh /dev/sdc

使用以下命令直接更新SD卡

sudo ./fusing.sh /dev/sdc emmc

您也可以通过fastboot来更新正在运行的NanoPi K2板上SD的U-Boot,方法如下:
1) 在电脑上先用命令 sudo apt-get install android-tools-fastboot 安装 fastboot 工具;
2) 用串口配件连接NanoPi K2和电脑,在上电启动的2秒内,在串口终端上按下回车,进入 u-boot 的命令行模式;
3) 在u-boot 命令行模式下输入命令 fastboot usb 回车,进入 fastboot 模式;
4) 用microUSB线连接NanoPi K2和电脑,在电脑上输入以下命令烧写u-boot.bin:

fastboot flash bootloader fip/gxb/u-boot.bin

暂时无法通过fastboot更新eMMC模块上的U-boot。

5.3 编译Linux kernel

5.3.1 编译内核

  • 下载内核源代码
git clone https://github.com/friendlyarm/linux.git
cd linux
git checkout nanopi-k2-3.14.y

NanoPi K2内核所属的分支是nanopi-k2-3.14.y,在开始编译前先切换分支。

  • 编译Android内核
touch .scmversion
make ARCH=arm64 nanopi-k2_android_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image nanopi-k2.dtb

编译成功结束后,即会生成新的 arch/arm64/boot/dts/amlogic/nanopi-k2.dtb 和 arch/arm64/boot/Image ,用于替换掉SD卡boot分区下对应的文件。

  • 编译Ubuntu内核
touch .scmversion
make ARCH=arm64 nanopi-k2_ubuntu_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image nanopi-k2.dtb

5.3.2 如何使用新编译的内核

  • 更新SD卡上的内核

如果您是使用SD卡启动Android,则在PC上复制为Android编译的Image 和nanopi-k2.dtb 到SD卡的boot分区(即分区1,设备是/dev/sdX1)即可。

  • 通过adb直接更新

如果想直接更新正在运行中的板子,可通过adb将新的文件push到板子上,然后reboot即可,具体如下:

adb shell mount -t ext4 /dev/block/mmcblk0p1 /storage/sdcard1/
adb push arch/arm64/boot/Image /storage/sdcard1/
adb push arch/arm64/boot/dts/amlogic/nanopi-k2.dtb /storage/sdcard1/
adb reboot
  • 更新Android中预先编译的文件

如果想要生成新的Android boot.img,则需要使用新生成的文件替换Android源代码目录device/friendly-arm/nanopi-k2-kernel 下对应的文件,然后编译Android即可。

5.4 编译Android

  • 搭建编译环境

搭建编译Android的环境建议使用64位的Ubuntu 16.04,安装需要的包即可。

sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zip
sudo apt-get install flex libncurses5-dev zlib1g-dev gawk minicom

更多说明可查看 https://source.android.com/source/initializing.html

  • 下载Android5.1源代码

Android源代码的下载需要使用repo,其安装和使用请查看 https://source.android.com/source/downloading.html

mkdir android && cd android
repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi-k2-lollipop
repo sync

其中“android”是指工作目录。

  • 编译系统
source build/envsetup.sh
lunch nanopi_k2-userdebug
make -j8

编译成功完成后,目录 out/target/product/nanopi-k2 下包含可用于烧写的image文件。

filename partition Description
u-boot.bin bootloader -
boot.img boot -
cache.img cache -
userdata.img userdata -
system.img system -
partmap.txt - 分区描述文件
  • 烧写到SD卡

如果是采用SD卡启动Android,可复制编译生成的image文件到sd-fuse_amlogic/android/ 下,使用脚本即可烧到到SD卡,具体请查看#在Linux Desktop下通过脚本制作

  • 使用fastboot更新

板子启动后通过串口快速按任意键进入uboot命令行模式,输入命令fastboot usb即可更新Android。
连接USB线,然后PC端输入以下命令:

cd out/target/product/nanopi-k2
sudo fastboot flash boot boot.img
sudo fastboot flash cache cache.img
sudo fastboot flash userdata userdata.img
sudo fastboot flash system system.img
sudo fastboot reboot

6 更多OS

6.1 DietPi

Dietpi-logo.png
DietPi is a highly optimised & minimal Debian-based Linux distribution. DietPi is extremely lightweight at its core, and also extremely easy to install and use.
Setting up a single board computer (SBC) or even a computer, for both regular or server use, takes time and skill. DietPi provides an easy way to install and run favourite software you choose.
For more information, please visit this link https://dietpi.com/docs/.

DietPi supports many of the NanoPi board series, you may download the image file from here:

7 更新日志

7.1 2017-10-07

添加烧写系统到emmc模块的说明。

7.2 2017-09-08

修改内核编译部分。

7.3 2017-07-19

为NanoPi-K2增加Ubuntu Core系统,内含Qt-Embedded图形界面库,系统特性如下:

  • 支持HDMI输出
  • 支持WiFi连接
  • 支持千兆以太网
  • 支持蓝牙传输
  • 内建Qt-Embedded

得益于A53架构处理器强大的性能,2G内存以及千兆以太网,NanoPi-K2搭配Ubuntu系统非常适合作为IoT服务端,或DIY各类轻量级的服务器,如Nas等。

7.4 2017-05-27

在Android系统中预装Kodi。


7.5 2017-04-12

首次创建并发布。