Difference between revisions of "NanoPi K2"
Line 1: | Line 1: | ||
[[NanoPi K2/zh|查看中文]] | [[NanoPi K2/zh|查看中文]] | ||
+ | |||
+ | ==介绍== | ||
+ | [[File:NanoPi K2-1.jpg|thumb|300px]] | ||
+ | [[File:NanoPi K2-2.jpg|thumb|300px]] | ||
+ | [[File:NanoPi K2-3.jpg|thumb|300px]] | ||
+ | * 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制作家庭娱乐设备, 多媒体服务器,高速并行计算机等装置。 | ||
+ | |||
+ | ==资源特性== | ||
+ | * 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 | ||
+ | |||
+ | ==接口布局和尺寸== | ||
+ | ===接口布局=== | ||
+ | [[File:NanoPi-K2-IF-001.png |thumb|600px|NanoPi-K2接口布局]] | ||
+ | |||
+ | * '''GPIO管脚定义''' | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |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接口管脚定义''' | ||
+ | ::{| 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)''' | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |Pin# || Name | ||
+ | |- | ||
+ | |1 || GND | ||
+ | |- | ||
+ | |2 || VDD_5V | ||
+ | |- | ||
+ | |3 || UART_TX_AO_A | ||
+ | |- | ||
+ | |4 || UART_RX_AO_A | ||
+ | |} | ||
+ | * '''7Pin I2S接口定义''' | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |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 | ||
+ | |} | ||
+ | |||
+ | :'''说明''' | ||
+ | ::#SYS_3.3V: 3.3V电源输出 | ||
+ | ::#VDD_5V: 5V电源输入/输出。输入范围:4.7~5.6V | ||
+ | ::#全部信号引脚均为3.3V电平 | ||
+ | ::#更详细的信息请查看原理图:[http://wiki.friendlyarm.com/wiki/images/d/d1/NanoPi-K2-1701-Schematic.pdf NanoPi-K2-1701-Schematic.pdf] | ||
+ | |||
+ | ===机械尺寸=== | ||
+ | [[File:NanoPi-K2-1701-Dim.png|frameless|500px|NanoPi K2 Dimensions]] | ||
+ | |||
+ | ::详细尺寸:[http://wiki.friendlyarm.com/wiki/images/2/26/NanoPi-K2-1701-dxf.zip NanoPi-K2-1701-dxf.zip] | ||
+ | |||
+ | ==快速入门== | ||
+ | ===准备工作=== | ||
+ | 启动NanoPi K2前,请先准备好以下硬件 | ||
+ | * NanoPi K2主板 | ||
+ | * TF卡: Class10或以上的 8GB SDHC卡 | ||
+ | * 一个DC接口的外接电源,要求输出为5V/2A | ||
+ | * 一台支持HDMI输入的显示器或者电视 | ||
+ | * 一套USB键盘鼠标 | ||
+ | * 一台电脑,需要联网,建议使用Ubuntu 14.04 64位系统 | ||
+ | |||
+ | ===经测试使用的TF卡=== | ||
+ | 制作启动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卡启动NanoPi K2==== | ||
+ | 首先访问[http://pan.baidu.com/s/1c2MQ1P2 下载地址1]下载需要的固件文件:<br /> | ||
+ | * 您需要准备一张4G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。 | ||
+ | |||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |colspan=2|固件文件列表: | ||
+ | |- | ||
+ | |s905-android-sd4g-YYYYMMDD.img.zip || Android5.1系统固件 | ||
+ | |- | ||
+ | |colspan=2|烧写工具: | ||
+ | |- | ||
+ | |win32diskimager.rar || Windows平台下的烧写工具,Linux系统可以用dd命令 | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | *将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。 | ||
+ | *当制作完成 SD 卡后,拔出 SD 卡插入 NanoPi K2 的 BOOT 卡槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。<br /> | ||
+ | |||
+ | ====在Linux Desktop下通过脚本制作==== | ||
+ | * 1) 将microSD插入Ubuntu的电脑,用以下命令查看你的SD卡设备名 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | dmesg | tail | ||
+ | </syntaxhighlight> | ||
+ | 当dmesg输出类拟信息 sdc: sdc1 sdc2时,则表示SD卡对应的设备名为 /dev/sdc,也通过用命令cat /proc/partitions来查看。 | ||
+ | |||
+ | *2) 下载Linux下的制作脚本 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone https://github.com/friendlyarm/sd-fuse_amlogic.git | ||
+ | cd sd-fuse_amlogic | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *3) 以下是制作启动Android的SD卡的方法 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | su | ||
+ | ./fusing.sh /dev/sdx | ||
+ | </syntaxhighlight> | ||
+ | (注:/dev/sdx请替换为实际的SD卡设备文件名) <br /> | ||
+ | 制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。 | ||
+ | |||
+ | ====NanoPi K2 扩展TF卡分区==== | ||
+ | * Android扩展分区,要在pc上执行下列操作: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo umount /dev/sdx? | ||
+ | sudo parted /dev/sdx unit % resizepart 4 100 unit MB print | ||
+ | sudo resize2fs -f /dev/sdx4 | ||
+ | </syntaxhighlight> | ||
+ | (注:/dev/sdx请替换为实际的SD卡设备文件名) | ||
+ | |||
+ | ====关于HDMI分辨率==== | ||
+ | 对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。 | ||
+ | |||
+ | ===运行Android=== | ||
+ | * 将制作好SD卡插入NanoPi K2,连接HDMI,最后接电源,NanoPi K2会从SD卡启动。你可以看到板上PWR灯以及蓝灯常亮,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。<br /> | ||
+ | [[File:NanoPi-K2-4.jpg|frameless|NanoPi K2 Android5.1]] | ||
+ | * 如同所有PC, 正确的关机对NanoPi K2而言很重要,否则可能会损坏安装在MicroSD卡中的系统文件,导致下次无法顺利启动运行,如要关机,直接按PWR按键即可。 | ||
+ | |||
+ | ==如何编译系统== | ||
+ | |||
+ | ===安装交叉编译器=== | ||
+ | * 安装ARMv7交叉编译器 | ||
+ | 编译U-Boot需要ARMv7的交叉编译器,首先下载并解压编译器: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | 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> | ||
+ | |||
+ | 然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin:$PATH | ||
+ | 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/uboot.git | ||
+ | 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> | ||
+ | |||
+ | 您也可以通过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> | ||
+ | |||
+ | ===编译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"> | ||
+ | make ARCH=arm64 nanopi-k2_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分区下对应的文件。 | ||
+ | |||
+ | ====如何使用新编译的内核==== | ||
+ | * 更新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 14.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> |
Revision as of 02:17, 13 April 2017
Contents
1 介绍
- 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 接口布局
- 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
- 说明
- SYS_3.3V: 3.3V电源输出
- VDD_5V: 5V电源输入/输出。输入范围:4.7~5.6V
- 全部信号引脚均为3.3V电平
- 更详细的信息请查看原理图:NanoPi-K2-1701-Schematic.pdf
3.2 机械尺寸
4 快速入门
4.1 准备工作
启动NanoPi K2前,请先准备好以下硬件
- NanoPi K2主板
- TF卡: Class10或以上的 8GB SDHC卡
- 一个DC接口的外接电源,要求输出为5V/2A
- 一台支持HDMI输入的显示器或者电视
- 一套USB键盘鼠标
- 一台电脑,需要联网,建议使用Ubuntu 14.04 64位系统
4.2 经测试使用的TF卡
制作启动NanoPi K2的TF卡时,建议Class10或以上的 8GB SDHC卡。以下是经友善之臂测试验证过的高速TF卡:
- SanDisk闪迪 TF 8G Class10 Micro/SD 高速 TF卡:
- SanDisk闪迪 TF128G 至尊高速MicroSDXC TF 128G Class10 48MB/S:
- 川宇 8G手机内存卡 8GTF卡存储卡 C10高速class10 micro SD卡:
4.3 制作一张带运行系统的SD卡
4.3.1 快速从SD卡启动NanoPi K2
首先访问下载地址1下载需要的固件文件:
- 您需要准备一张4G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
固件文件列表: s905-android-sd4g-YYYYMMDD.img.zip Android5.1系统固件 烧写工具: win32diskimager.rar Windows平台下的烧写工具,Linux系统可以用dd命令
- 将固件和烧写工具分别解压,在Windows下插入SD卡(限8G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
- 当制作完成 SD 卡后,拔出 SD 卡插入 NanoPi K2 的 BOOT 卡槽,上电启动(注意,这里需要 5V/2A 的供电),你可以看到绿灯以及蓝灯长亮,这时你已经成功启动 NanoPi K2。
4.3.2 在Linux Desktop下通过脚本制作
- 1) 将microSD插入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
(注:/dev/sdx请替换为实际的SD卡设备文件名)
制作包中未包含Android烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。
4.3.3 NanoPi K2 扩展TF卡分区
- Android扩展分区,要在pc上执行下列操作:
sudo umount /dev/sdx? sudo parted /dev/sdx unit % resizepart 4 100 unit MB print sudo resize2fs -f /dev/sdx4
(注:/dev/sdx请替换为实际的SD卡设备文件名)
4.3.4 关于HDMI分辨率
对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。
4.4 运行Android
- 将制作好SD卡插入NanoPi K2,连接HDMI,最后接电源,NanoPi K2会从SD卡启动。你可以看到板上PWR灯以及蓝灯常亮,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。
- 如同所有PC, 正确的关机对NanoPi K2而言很重要,否则可能会损坏安装在MicroSD卡中的系统文件,导致下次无法顺利启动运行,如要关机,直接按PWR按键即可。
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/uboot.git cd uboot git checkout nanopi-k2-v2015.01 make nanopi-k2_defconfig make
编译成功结束后您将获得fip/gxb/u-boot.bin,可使用以下命令直接更新SD卡:
sudo ./fusing.sh /dev/sdc
您也可以通过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
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内核
make ARCH=arm64 nanopi-k2_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分区下对应的文件。
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 14.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