NanoPi 2/zh
1 介绍
- NanoPi 2 是友善之臂专门为创客和物联网设计的高性能硬件开发平台,采用Cortex-A9架构的四核S5P4418处理器(主频1.4GHz),内存为1G DDR3,同时板上集成了802.11 b/g/n无线网卡及蓝牙4.0模块,可支持Android与Debian双系统,支持HDMI和LCD同步输出,并拥有丰富的扩展接口,兼容树莓派GPIO,PCB尺寸只有40*75mm。
2 资源特性
- CPU: S5P4418, 运行主频1.4GHz
- RAM: 1GB DDR3
- 集成SDIO WiFi蓝牙模块
- USB 2.0 Type A x1
- 调试串口 x1
- microSD Slot x2
- microUSB x1: 支持供电和数据传输,可模拟为串口和以太网
- LCD接口: 0.5mm间距贴片FPC座,支持全彩LCD (RGB:8-8-8)
- HDMI: 符合1.4a规范, Type-A连接器, 1080P60输出
- DVP Camera接口:0.5mm间距竖直贴片FPC座,包含ITU-R BT 601/656 8-bit,I2C和IO
- GPIO1: 2.54mm间距,40pin, 兼容RPi的GPIO,含UART, SPI, I2C, IO等管脚资源
- 按键: 用户按键一个, 复位按键一个
- LED: 电源LED一个, 用户LED一个
- PCB 尺寸: 75 x 40mm
- 供电: DC 5V/2A
- 软件支持: 安卓, Debian
3 接口布局和尺寸
3.1 接口布局
- GPIO1管脚定义
Pin# Name Pin# Name 1 VDD_SYS_3.3V 2 VDD_5V 3 I2C0_SDA 4 VDD_5V 5 I2C0_SCL 6 DGND 7 GPIOB28 8 UART3_TXD 9 DGND 10 UART3_RXD 11 GPIOB29 12 GPIOB26 13 GPIOB30 14 DGND 15 GPIOB31 16 PWM2 17 VDD_SYS_3.3V 18 GPIOB27 19 SPI0_MOSI 20 DGND 21 SPI0_MISO 22 PWM0 23 SPI0_CLK 24 SPI0_CS 25 DGND 26 PWM1 27 I2C1_SDA 28 I2C1_SCL 29 GPIOC8 30 DGND 31 SPI2_CLK 32 GPIOC28 33 SPI2_CS 34 DGND 35 SPI2_MOSI 36 GPIOC7 37 SPI2_MISO 38 ALIVEGPIO2 39 DGND 40 ALIVEGPIO3
- Debug Port CON1(UART0)
Pin# Name 1 DGND 2 VDD_5V 3 TXD0 4 RXD0
- DVP Camera IF 管脚定义
Pin# Name 1, 2 VDD_SYS_3.3V 7,9,13,15,24 DGND 3 SCL0 4 SDA0 5 GPIOB14 6 GPIOB16 8,10 NC 11 VSYNC 12 HREF 14 PCLK 16-23 Data bit7-0
- RGB LCD IF 管脚定义
Pin# Name 1, 2 VDD_5V 11,20,29, 37,38,39,40, 45 DGND 3-10 Blue LSB to MSB 12-19 Green LSB to MSB 21-28 Red LSB to MSB 30 GPIOB25 31 GPIOC15 32 XnRSTOUT Form CPU 33 VDEN 34 VSYNC 35 HSYNC 36 LCDCLK 41 SCL2 42 SDA2 43 GPIOC16 44 NC
- 说明
- VDD_SYS_3.3V: 3.3V电源输出
- VDD_5V: 5V电源输入/输出。当电压大于MicroUSB时,向板子供电,否则板子从MicroUSB取电。输入范围:4.7~5.6V。
- 更详细的信息请查看原理图:NanoPi-2-1507-Schematic.pdf
3.2 机械尺寸
4 快速入门
4.1 准备工作
要开启你的NanoPi2新玩具,请先准备好以下硬件
- NanoPi 2 主板
- microSD卡/TF卡: Class10或以上的 8GB SDHC卡
- 一个microUSB接口的外接电源,要求输出为5V/2A(可使用同规格的手机充电器)
- 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
- 一套USB键盘鼠标,同时连接还需要USB HUB (或选购串口转接板,要PC上进行操作)
- 一台电脑,需要联网,建议使用Ubuntu 14.04 64位系统
4.2 制作一张带运行系统的microSD卡
4.2.1 简易方法制作
首先访问此处的下载地址下载需要的固件文件:
使用LCD或HDMI作来输出的用户,使用以下固件: nanopi2-debian-sd4g.img.zip Debian系统固件 nanopi2-android-sd4g.img.zip Android系统固件 单板运行的用户,使用以下固件: nanopi2-debian-sd4g-wifiap.img.zip Debian系统固件(默认开启无线热点,可用VNC或SSH登录) 烧写工具: win32diskimager.rar Windows平台下的烧写工具,Linux系统可以用dd命令
将固件和烧写工具分别解压,在Windows下插入SD卡(限4G及以上的卡),通过管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
4.2.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_nanopi2.git cd sd-fuse_nanopi2
- 3) 以下是制作启动Android的SD卡的方法
su ./fusing.sh /dev/sdx
(注:/dev/sdx请替换为实际的SD卡设备文件名)
制作包中未包含Android和Debian的烧写文件,第一次使用时会提示需要下载,输入Y下载,N或10秒未输入则取消。
- 4) 以下是制作启动Debian的SD卡的方法
./fusing.sh /dev/sdx debian
4.3 在电脑上修改SD卡上的系统
如果你想在运行系统之前,先对系统做一些修改,可以参看本节内容,否则可以跳过本节。
将制作好microSD卡插入一台运行Linux的电脑,可以挂载SD卡上的boot和rootfs等分区,对分区内容进行修改,通过在以下情况下你需要进行这些操作:
1) 你想更改Kernel Command Line参数,则可以通过sd-fuse_nanopi2/tools目录下的fw_setenv工具来操作。
查看当前的Command Line:
cd sd-fuse_nanopi2/tools ./fw_printenv /dev/sdc | grep bootargs
目前的Android 5.1.1_r6启用了SELinux,缺省模式是enforcing,你可以通过Command Line来修改它,例如:
./fw_setenv /dev/sdc bootargs XXX androidboot.selinux=permissive
即可修改为permissive模式,其中上面的XXX需要替换成原来的bootargs值。
2) 更新内核
新版本的uboot在启动时会如果识别到LCD,将读取SD卡boot分区的uImage,否则将读取uImage.hdmi。
对于Android来说是同一个文件,因此直接使用新编译的uImage来替换SD卡boot分区下的文件即可。
对于Debian来说,这2个文件是不相同的,使用新编译的支持LCD的uImage直接替换SD卡boot分区的文件,如果是支持HDMI的内核,则替换uImage.hdmi。
[以下内容只适应于旧版本的固件,即将删除。]
3) 你选配了LCD配件,想将Debian系统的图像输出到LCD,就需要更改boot分区中的uImage软链接来完成,假设boot分区mount到/media/boot目录,则命令如下:
cd /media/boot rm uImage ln -s uImage.lcd uImage
注意在使用Android系统时无需执行上面的步骤,默认就支持LCD输出。
4) 你想更改Kernel Command Line参数,则可以通过sd-fuse_nanopi2/tools目录下的fw_setenv工具来操作,例如,你选配的LCD配件为HD101,以下命令将该LCD配置加入到Kernel Command Line中:
先查看当前的Command Line:
cd sd-fuse_nanopi2/tools ./fw_printenv /dev/sdc | grep bootargs
在配置的后面加入 lcd=HD101,然后用fw_setenv写入新配置:
./fw_setenv /dev/sdc bootargs XXX lcd=HD101
上面的XXX需要替换成原来的bootargs值。
5) 使用LCD配件S700
如果您选配了LCD配件S700,则需要修改Kernel Command Line,指定LCD型号和DPI,具体如下:
./fw_setenv /dev/sdc bootargs XXX lcd=S70,128dpi
上述参数中",128dpi"用于指定Android的属性"ro.sf.lcd_density",Debian会忽略它。如果不指定,则缺省是160。
需要特别注意的是,有些值可能会导致Android出错,请谨慎修改。
以下是不同LCD的建议配置:
LCD# 参数 S700 lcd=S70,128dpi HD101 lcd=HD101 HD700 lcd=HD700,213dpi
4.4 运行Android或Debian
将制作好microSD卡插入NanoPi2,连接HDMI,最后连接电源(5V 2A),NanoPi2会上电自动开机,看到板上的蓝色LED亮,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。
要在电视上进行操作,你需要连接USB鼠标和键盘,如果你选购了LCD配件,则可以直接使用LCD上面的触摸屏进行操作。
如果您需要进行内核开发,你最好选购一个串口配件,连接了串口,则可以通过终端对NanoPi2进行操作。
如果提示输入密码,Debian的root用户的默认密码是两个字母fa。
4.5 通过VNC和ssh登录Debian
如果你是祼板运行系统(既没有连接LCD也没有连接HDMI),并且烧写了带 -wifiap.img 后辍的固件,你可以使用手机,或者有无线网卡的电脑连接到NanoPi2开放的 nanopi2-wifiap 无线热点(默认密码是123456789),连接成功后,无论是手机还是电脑,你可以到这里下载并安装一个名为VNC Viewer的软件,用VNC连接到NanoPi2,NanoPi2在使用VNC时的连接地址和端口为:192.168.8.1:5901,默认密码为:fa123456,以下是在iPhone上用VNC登录NanoPi2的画面:
你也可以通过 ssh -l root 192.168.8.1 命令在终端上登录,默认的root用户密码是 fa。
为了保证ssh的流畅,我们用以下命令关闭wifi的省电模式:
iwconfig wlan0 power off
5 Debian系统的使用
5.1 连接无线网络
在Debian的图形界面上,点击右下角的网络图标,程序会自动搜索到附近的WiFi热点,找到你需要连接的热点,点击旁边的Properties按钮,输入WiFi密码后保存退出,再点击Connect按钮即可。
- 以下内容仅适用于祼板运行的用户(使用 -wifiap.img 后辍的固件)
-
系统默认处于无线热点模式,因此无法搜索和连接到无线路由器,需要先退出无线执点模式才可以,请按照如下步骤操作:
第一步:我们先把要连接的无线路由器配置好,方法如下:
使用ssh连接NanoPi2,输入以下命令查询一下WiFi的网络接口,wlan开头的就是WiFi:
ifconfig -a
默认情况下是wlan0,你需要在/etc/network/interfaces.d/目录下新建一个与网络接口同名的配置文件 ,以wlan0为例,用vi命令新建以下文件:
vi /etc/network/interfaces.d/wlan0
wlan0文件的内容如下:
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-ssid YourWiFiESSID
wpa-ap-scan 1
wpa-proto RSN
wpa-pairwise CCMP
wpa-group CCMP
wpa-key-mgmt WPA-PSK
wpa-psk YourWiFiPassword
其中,YourWiFiESSID和YourWiFiPassword请替换成你要连接的无线AP名称和密码。
最后一步,使用以下命令退出无线热点模式,需要使用root用户操作,turn-wifi-into-apmode在执行后会重启设备,重启后,会根据上面的配置,自动连接WIFI:
su
turn-wifi-into-apmode no
5.2 配置Wi-Fi无线热点
可以通过以下命令,将Wi-Fi切换至无线热点模式:
turn-wifi-into-apmode yes
按提示重启即可,默认的热点名称为 nanopi2-wifiap,密码为123456789。
现在,你可以在电脑上搜索并连接nanopi2-wifiap这个无线热点,连接成功后,可以通过ssh到192.168.8.1这个地址来登录NanoPi2:
ssh root@192.168.8.1
在提示输入密码时,输入预设的密码fa,即可登入。
为了保证ssh的流畅,我们用以下命令关闭wifi的省电模式:
iwconfig wlan0 power off
WiFi工作模式可通过以下命令查询:
cat /sys/module/bcmdhd/parameters/op_mode
输出为数字2则表示当前处于无线热点模式,要切换回普通的Station模式,输入如下命令:
turn-wifi-into-apmode no
5.3 使用蓝牙传输
点击右下角的蓝牙图标,会弹出一个操作菜单,其中,
Make discoverable菜单项是打开NanoPi2蓝牙的可发现属性,这样其他设备(例如手机)就可以搜索到NanoPi2并进行配对了;
Devices... 菜单项可以打开搜索界面,主动搜索周边的蓝牙设备(注:需要这个设备先打开可发现属性);
Send Files to Device...菜单项则可以通过蓝牙发送文件到已配对的指定设备上。
5.4 安装Debian软件包
我们提供的是标准的Debian jessie系统,你可以使用apt-get等命令来安装软件包,如果板子是首次运行,需要先用以下命令更新软件包列表:
apt-get update
然后就可以安装软件包了,例如要安装ftp服务器,使用以下命令:
apt-get install vsftpd
如果软件包下载速度不理想,你可以编辑 /etc/apt/sources.list 更换一个更快的源服务器,这个网址[1]有一份完整的源镜像服务器列表,注意要选用一个带armhf架构的。
6 如何编译系统
6.1 安装交叉编译器
首先下载并解压编译器:
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)
6.2 编译U-Boot
下载U-Boot源代码并编译,注意分支是nanopi2-lollipop-mr1:
git clone https://github.com/friendlyarm/uboot_nanopi2.git cd uboot_nanopi2 git checkout nanopi2-lollipop-mr1 make s5p4418_nanopi2_config make CROSS_COMPILE=arm-linux-
编译成功结束后您将获得u-boot.bin,您可以通过fastboot来更新正在运行的NanoPi2板上SD的U-Boot,方法如下:
1) 在电脑上先用命令 sudo apt-get install android-tools-fastboot 安装 fastboot 工具;
2) 用串口配件连接NanoPi2和电脑,在上电启动的2秒内,在串口终端上按下回车,进入 u-boot 的命令行模式;
3) 在u-boot 命令行模式下输入命令 fastboot 回车,进入 fastboot 模式;
4) 用microUSB线连接NanoPi2和电脑,在电脑上输入以下命令烧写u-boot.bin:
fastboot flash bootloader u-boot.bin
注意:您不能直接使用dd来更新SD卡,否则有可能会导致无法正常启动。
6.3 准备mkimage
编译内核需要用到U-Boot中的工具mkimage,因此,在编译内核uImage前,您需要保证您的主机环境可以成功运行它。
你可以直接使用命令 sudo apt-get install u-boot-tools 来安装,也可以自己编译并安装:
cd uboot_nanopi2 make CROSS_COMPILE=arm-linux- tools sudo mkdir -p /usr/local/sbin && sudo cp -v tools/mkimage /usr/local/sbin
6.4 编译Linux kernel
6.4.1 编译内核
- 下载内核源代码
git clone https://github.com/friendlyarm/linux-3.4.y.git cd linux-3.4.y git checkout nanopi2-lollipop-mr1
NanoPi2内核所属的分支是nanopi2-lollipop-mr1,在开始编译前先切换分支。
- 编译Android内核
make nanopi2_android_defconfig touch .scmversion make uImage
- 编译Debian内核
make nanopi2_linux_defconfig touch .scmversion make uImage
编译成功结束后,新生成的内核烧写文件为 arch/arm/boot/uImage,此内核支持HDMI输出,用于替换掉SD卡boot分区下的uImage.hdmi。
如果要编译支持LCD显示的内核,则需要修改内核配置:
touch .scmversion make nanopi2_linux_defconfig make menuconfig Device Drivers --> Graphics support --> Nexell Graphics --> [*] LCD [ ] HDMI make uImage
启用LCD,同时取消HDMI,然后退出并保存配置,编译后即可获得支持LCD显示的uImage,用于替换SD卡boot分区下的uImage。
6.4.2 编译内核模块
Android包含内核模块,位于system分区的 /lib/modules/ 下,如果您有新的内核模块或者内核配置有变化,则需要重新编译。
首先编译内核源代码中的模块:
cd linux-3.4.y make CROSS_COMPILE=arm-linux- modules
另外有2个内核模块的源代码位于Android源代码中,可使用以下命令来编译:
cd /opt/FriendlyARM/s5p4418/android ./vendor/friendly-arm/build/common/build-modules.sh
其中 “/opt/FriendlyARM/s5p4418/android” 是指Android源代码的TOP目录,使用参数“-h”可查看帮助。
编译成功结束后,会显示生成的内核模块。
6.5 编译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 。
- 下载源代码
Android源代码的下载需要使用repo,其安装和使用请查看 https://source.android.com/source/downloading.html 。
mkdir android && cd android repo init -u https://github.com/friendlyarm/android_manifest.git -b nanopi2-lollipop-mr1 repo sync
其中“android”是指工作目录。
- 编译系统
source build/envsetup.sh lunch aosp_nanopi2-userdebug make -j8
编译成功完成后,目录 out/target/product/nanopi2/ 下包含可用于烧写的image文件。
7 资源链接
- 系统固件
- Schematic (NanoPi-2-1507-Schematic.pdf)
- Dimensions (NanoPi-2-1507-Dimesions(dxf).zip)
- S5P4418 User Manual (S5P4418_Users_Manual_Preliminary_Ver.0.10.pdf)
- AP6212 Datasheet (AP6212_V1.1_09022014.pdf)
- 模块介绍以及开发文档:
8 更新日志
8.1 2015-12-01
- 推出新的Android 5.1.1_r6,源代码已推送到 https://github.com/friendlyarm 。
- 4.2.1 简易方法制作: 新的固件已支持LCD检测,因此LCD和HDMI合并为一个固件。
- 6 如何编译系统: 编译时源代码分支更新为 nanopi2-lollipop-mr1。
- 6.4.2 编译内核模块: 增加了如何编译支持LCD显示的启动Debian的uImage。