Difference between revisions of "Smart4418/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(更多OS)
(Smart4418接USB摄像头使用OpenCV)
Line 709: Line 709:
  
 
你便可以看到opencv已经用起来。
 
你便可以看到opencv已经用起来。
 +
 +
==更多OS==
 +
===Ubuntu-Core with Qt-Embedded===
 +
Ubuntu Core with Qt-Embedded,是一个没有X-windows环境,使用Qt-Embedded作为图形界面的轻量级Ubuntu系统,基于官方的Ubuntu core系统开发而成,非常适合于企业用户用作产品的基础OS。
 +
 +
本系统除了保留Ubuntu core的特性以外,还包括以下特性:
 +
*支持电容和电阻触摸屏 (型号:S700, X710, S70)
 +
*支持WiFi连接
 +
*支持以太网连接
 +
*支持蓝牙,已预装bluez等相关软件包
 +
*支持音频播放
 +
*等等
 +
 +
请访问此处 [http://wiki.friendlyarm.com/wiki/index.php/Ubuntu_Core_with_Qt-Embedded Ubuntu Core with Qt-Embedded] 了解详情。
 +
 +
===Ubuntu-Mate===
 +
Ubuntu-Mate基于Ubuntu系统,使用的桌面环境是Mate-desktop,界面简洁易用,需配合LCD或者HDMI使用,可通过ssh登录。<br>
 +
仅提供给进阶爱好者交流使用,不对该系统提供专业技术支持。
 +
* 访问此处[http://pan.baidu.com/s/1boiCWWJ 下载地址]下载系统固件。
 +
* 将固件解压后,在Windows下使用友善官方提供 win32diskimager 工具烧写Ubuntu-Mate即可。
 +
* 烧写完成后,将SD卡插入NanoPi M2,上电即可体验Ubuntu-Mate。
 +
* 登录账号:root或fa ; 登录密码:fa
  
 
==资源链接==
 
==资源链接==

Revision as of 05:32, 19 April 2016

English

1 介绍

Smart4418.jpg
Smart44182.jpg
Smart44183.jpg
  • Smart4418是一款高集成的高性能四核Cortex-A9核心板,由广州友善之臂设计、生产和发行销售。作为Smart210核心板的兼容替代品,它采用三星S5P4418作为主处理器,运行主频可高达1.4Ghz,并标配1GB DDR3内存和8GB eMMC高速闪存。Smart4418核心板不仅集成AXP228电源管理单元,可实现软件开关机和硬件唤醒功能,而且集成千兆以太网卡和声卡芯片,非常方便企业用户进行快速产品设计和项目开发。
  • Smart4418核心板采用了2.0间距双排针(P1,P2,P4),尺寸为74x55mm,总共引出174Pin引脚。其中P1和P2排针为标配焊接(可兼容Smart210之P1,P2),它们已经包含了大部分常用功能;P4空焊,方便有需要的用户扩展开发使用。在布局安排上,我们尽量考虑把常用的LCD模块能够固定在底板上,比如3.5“、4.3“、5“、7“、10.1“LCD等。
  • 另外,若需要使用Smart4418的千兆以太网功能,请选用Smart4418/6818SDK底板。三星另一款芯片S5P6818,它基于八核Cortex-A53架构,运行主频可高达1.4Ghz,与S5P4418可pin to pin完全兼容,用户可以根据自己的产品项目需求,选择更高级的Smart6818(即将推出)。

2 资源特性

  • CPU: S5P4418, 动态运行主频400Mhz--1.4GHz
  • PMU 电源管理:AXP228,支持软件关机和睡眠唤醒等
  • DDR3 RAM: 1GB
  • 网络: 千兆以太网接口(RTL8211E), 板载唯一MAC地址芯片
  • eMMC:8GB
  • 音频:集成音频芯片, 支持麦克风输入和耳机输出
  • LED:一个电源指示LED, 两个GPIO控制的LED
  • 其他: 板载温控电阻
  • PCB Size: 74x55mm,6层,沉金工艺
  • 供电: DC 5V, up to 1.2A
  • OS/Software: u-boot, Android5.1, Debian8, ubuntu-core
  • 3个2.0mm排针, 共174针, 引出以下信号:
    • USB 2.0 - Host x1, OTG x1
    • 视频输出/显示 - RGB Parallel I/F (24-bit), LVDS 和HDMI 1.4a
    • 视频输入 - DVP Camera interface, ITU-R BT 601/656 8-bit 和 MIPI-CSI
    • 音频输入 - 麦克风输入
    • 音频输出 - 耳机输出(带插入检测)和HDMI
    • 网络 - 10/100/1000Mbps 以太网 x1
    • ADC - CPU自带ADC, 7通道, 12-bit, 输入范围0~1.8V
    • 外围接口 - SDIO/MMC x2, SPI x2, I2C x3, UART x5, PWM x3, GPIOs x24
    • 其他 - Power按键输入, RESET输入, RESET输出, RTC电池输入

3 管脚定义

P1 P2
Pin# Name Pin# Name Pin# Name Pin# Name
1 VDD_5V 2 DGND 1 UART0_TX 2 UART0_RX
3 RTC_BATT 4 GPIOB8 3 UART1_TX 4 UART1_RX
5 NRESETIN 6 GPIOC17 5 UART2_TX 6 UART2_RX
7 MMC0_CMD 8 MMC1_CMD 7 UART3_TX 8 UART3_RX
9 MMC0_CLK 10 MMC1_CLK 9 UART1_nCTS 10 UART1_nRTS
11 MMC0_D0 12 MMC1_D0 11 CAM0_D0 12 CAM0_D1
13 MMC0_D1 14 MMC1_D1 13 CAM0_D2 14 CAM0_D3
15 MMC0_D2 16 MMC1_D2 15 CAM0_D4 16 CAM0_D5
17 MMC0_D3 18 MMC1_D3 17 CAM0_D6 18 CAM0_D7
19 MMC0_CD 20 GPIOB24 19 CAM0_PCLK 20 CAM0_VSYNC
21 PWRKEY 22 SPI1_CS/GPIOC10 21 CAM0_HYNC 22 GPIOB14
23 GPIOB28/UART4_RX 24 SPI1_MISO/GPIOC11 23 GPIOB16 24 HDMI_TX1P
25 GPIOB29/UART4_TX 26 SPI1_MOSI/GPIOC12 25 HDMI_TX0P 26 HDMI_TX1N
27 GPIOB30 28 SPI1_CLK/GPIOC9 27 HDMI_TX0N 28 HDMI_TXCP
29 GPIOC15 30 GPIOC16 29 HDMI_TX2P 30 HDMI_TXCN
31 GPIOB31 32 GPIOB18 31 HDMI_TX2N 32 HDMI_HPD
33 GPIOD1/PWM0 34 I2C0_SCL 33 I2C1_SDA 34 I2C1_SCL
35 GPIOC13/PWM1 36 I2C0_SDA 35 USB_OTG_ID 36 SPI0_CS
37 USB_HOST_D- 38 I2C2_SCL 37 USB_OTG_D- 38 SPI0_MISO
39 USB_HOST_D+ 40 I2C2_SDA 39 USB_OTG_D+ 40 SPI0_MOSI
41 LCD_B0 42 LCD_B1 41 VBUS_5V 42 SPI0_CL
43 LCD_B2 44 LCD_B3 43 LVDS_CLKP 44 GPIOB25
45 LCD_B4 46 LCD_B5 45 LVDS_CLKM 46 DGND
47 LCD_B6 48 LCD_B7 47 LVDS_Y0P 48 LAN_MDI1_N
49 LCD_G0 50 LCD_G1 49 LVDS_Y0M 50 LAN_MDI1_P
51 LCD_G2 52 LCD_G3 51 LVDS_Y1P 52 LAN_MDI0_N
53 LCD_G4 54 LCD_G5 53 LVDS_Y1M 54 LAN_MDI0_P
55 LCD_G6 56 LCD_G7 55 LVDS_Y2P 56 LINK_LED
57 LCD_R0 58 LCD_R1 57 LVDS_Y2M 58 SPEED_LED
59 LCD_R2 60 LCD_R3 59 LVDS_Y3P 60 DGND
61 LCD_R4 62 LCD_R5 61 LVDS_Y3M 62 HP_DETECT
63 LCD_R6 64 LCD_R7 63 HP-R 64 HP-L
65 LCD_VSYNC 66 LCD_HSYNC 65 LAN_MDI2_P 66 LAN_MDI3_P
67 LCD_CLK 68 LCD_DE 67 LAN_MDI2_N 68 LAN_MDI3_N
69 DGND 70 BOOT_CS 69 Mic-P 70 Mic-N
P4
Pin# Name Pin# Name
1 MIPICSI_DP0 2 GPIOD8/PPM
3 MIPICSI_DN0 4 GPIOC7
5 MIPICSI_DP1 6 GPIOC8
7 MIPICSI_DN1 8 GPIOC24
9 MIPICSI_DP2 10 GPIOC28
11 MIPICSI_DN2 12 GPIOC0
13 MIPICSI_DP3 14 GPIOC1
15 MIPICSI_DN3 16 GPIOC2
17 MIPICSI_DPCLK 18 GPIOC3
19 MIPICSI_DNCLK 20 DGND
21 GPIOB9 22 ADC1
23 GPIOB26 24 ADC3
25 AliveGPIO5 26 ADC4
27 AliveGPIO3 28 ADC5
29 IO_REF_OUT,3.3V 30 ADC6
31 GPIOC14/PWM2 32 ADC7
33 NRESETOUT 34 DGND
说明
  1. VDD_5V:给核心板供电的电源输入脚,输入范围4.7-5.6V,推荐5V/1.2A(MAX), 通过降频降压, 可以有效降低功耗: 主频每降低200MHz, 功耗大概降低0.5W
  2. BOOT_CS: 启动模式选择,悬空或高电平为eMMC启动,低电平为SD启动
  3. NRESETIN:复位信号输入,低电平有效。此信号核心板的CPU提供复位信号,外部只需接一个按键就可以
  4. NRESETOUT: 复位信号输入,低电平有效。此信号核心板是的CPU输出的复位信号, 可以提供给外围电路使用
  5. RTC_BATT:RTC备份电池输入,直接接3V电池。核心板上电后由板子内部的3.3V给RTC供电,不上电时由备份电池供电,自动切换
  6. ADC1~7:CPU自带的12-Bit ADC输入,通道1~7,采集范围:0-1.8V
  7. 10/100M以太网模式: LAN_MDI1_N/P=RX-/+, LAN_MDI0_N/P=TX-/+, 也即只需4根信号线连接到带变压器的RJ45连接器
  8. 10/100/1000M以太网模式: LAN_MDI0_N/P~LAN_MDI3N/P, 也即需要把全部8根信号线连接到带变压器的RJ45连接器
  9. 具体外围及扩展电路请参考我们设计的底板Smart210/4418 SDK
  10. Smart4418原理图pdf

4 机械尺寸

Smart4418-dim.png
需要更详细的尺寸, 请下载dxf文件:Smart4418-1512-Dimension(dxf).zip

5 硬件设计注意事项

5.1 EEPROM

  • 因为Smart4418核心板上的集成了带MAC地址的EEPROM, 型号为24AA025E48T-I/OT, 接在I2C0上, 设备地址为0x51, 所以有些型号的EEPROM不能接在I2C0上, 否则会地址冲突.
  • 不能接在I2C0上的EEPROM: 24C04, 24C08, 24C16, 可以接在I2C0上的EEPROM:24C01, 24C02, 24C256
  • 关于EEPROM地址问题, 请看 http://www.onsemi.com/pub_link/Collateral/CAT24C01-D.PDF

6 参考开发底板

Smart210/4418 SDK

7 快速入门

7.1 准备工作

要开启你的Smart4418开发板,请先准备好以下硬件

  • Smart4418核心主板+Smart210 SDK底板
  • 大SD卡/: Class10或以上的 8GB SDHC卡
  • 一个DC接口的外接电源,要求输出为5V/2A
  • 一台支持HDMI输入的显示器或者电视(或选购LCD配件)
  • 一套USB键盘鼠标,同时连接还需要USB HUB (或选购串口转接板,要PC上进行操作)
  • 一台电脑,需要联网,建议使用Ubuntu 14.04 64位系统

7.2 制作一张带运行系统的SD卡

7.2.1 快速从SD卡启动 Smart4418

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

  • 您需要准备一张4G或以上容量的SDHC卡,该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
使用LCD或HDMI作来输出的用户,使用以下固件:
nanopi2-debian-sd4g.img.zip Debian系统固件
nanopi2-android-sd4g.img.zip Android系统固件
烧写工具:
win32diskimager.rar Windows平台下的烧写工具,Linux系统可以用dd命令
  • 将固件和烧写工具分别解压,在Windows下插入SD卡(限4G及以上的卡),以管理员身份运行 win32diskimager 工具, 在win32diskimager工具的界面上, 选择你的SD卡盘符,选择你要烧写的系统固件,点击 Write 按钮烧写即可。
  • 当制作完成 SD 卡后,拔出 SD 卡插入 Smart4418 的 BOOT 卡槽,并把开发板上S2开关设置为“SDBOOT”模式,开机后(注意,这里需要 5V/2A 的供电),你可以看到核心板板上PWR灯常亮,LED1 灯闪烁,LED2不亮,这时你已经成功启动Smart4418。

7.2.2 烧写系统到Smart4418的eMMC

  • 下载RAW Image

用于制作烧写eMMC的SD卡的RAW Image: nanopi2-eflasher-sd4g.img.zip。并且需要下载Windows下的烧写工具: win32diskimager.rar;

  • 烧写RAW Image

在Windows下插入SDHC卡(限4G及以上的卡),以管理员身份运行Win32DiskImager,选择 Image File,选择你的SD卡盘符,点 Write 即开始写Image到SD卡。

  • 准备好烧写到eMMC的ROM

到以下链接[1]相关Android或者Debian的Images(System-image-files-for-eMMC),下载完成后,在本地解压 .tgz 压缩包,然后将解压出来的文件(不包含目录)复制到SD卡对应的文件夹/目录。

OS Image Files Copy to...
Android 5.1 android-lollipop-images.tgz
android-lollipop-images.tgz.hash.md5
boot.img
system.img
userdata.img
cache.img
partmap.txt
images\android
Debian (Jessie) debian-jessie-images.tgz
debian-jessie-images.tgz.hash.md5
boot.img
rootfs.img
partmap.txt
images\debian
  • 指定需要烧写的OS

SD卡上配置文件 images\FriendlyARM.ini 缺省是将烧写 Android,如果要烧写Debian,则只需要编辑此文件:

OS = Debian

即可,其中配置文件中”#” 开始行的是注释。

  • 烧写到Smart4418的eMMC

将制作好的SD卡插入Smart4418,连接HDMI或LCD, 把S2开关拨动到“SDBOOT”一端,拨动电源开关,板子则会自动开始烧写,你可以通过HDMI或LCD上的显示来查看烧写状态,如果看到以下内容即表示成功,否则失败。

Android is fused successfully. 
All done.

烧写成功完成后,必须按复位键或重新加电, 即可从eMMC启动。

你可以根据LED来确定烧写状态,以下是状态检查表
LED闪烁状态 系统状态
LED1心跳模式闪 (连续快闪2次)
LED2灭
加电后正常启动的状态
如果没有进行烧写则会保存为此状态
LED1和LED2交替闪烁 (0.3s) 正在烧写系统
LED1和LED2交替的呼吸效果 (1.2s) 烧写成功
LED1和LED2同时快闪 烧写失败

7.2.3 在Linux Desktop下通过脚本制作

  • 1) 将SD卡插入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

7.2.4 关于LCD/HDMI分辨率

系统启动时uboot会自动识别LCD,成功则会设置为该LCD的显示分辨率,失败则缺省会设置为HDMI 720P模式。
如果要修改LCD的显示分辨率,可以直接修改内核中的文件 arch/arm/plat-s5p4418/nanopi2/lcds.c , 然后重新编译内核并更新即可。
对于HDMI的显示模式,Android则是会通过EDID获得HDMI设备如电视机所支持的显示模式,然后自动选择一个合适的分辨率。如果使用的是Debian,则缺省是720P,可通过修改内核配置来切换为1080P。

7.3 在电脑上修改SD卡上的系统

如果你想在运行系统之前,先对系统做一些修改,可以参看本节内容,否则可以跳过本节。
将制作好SD卡插入一台运行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。

7.4 运行Android或Debian

  • 将制作好SD卡插入Smart4418,连接HDMI,拨动S2开关到“SDBOOT”一侧,最后接电源(5V 2A)拨动开关,Smart4418会从SD卡启动。你可以看到板上PWR灯常亮,LED1灯闪烁,这说明系统已经开始启动了,同时电视上也将能看到系统启动的画面。

1)要在电视上进行操作,你需要连接USB鼠标和键盘;如果你选购了LCD配件,则可以直接使用LCD上面的触摸屏进行操作。
2)如果您需要进行内核开发,你最好选购一个串口配件,连接了串口,则可以通过终端对Smart4418进行操作。

  • 以下是串口的接法。接上串口,即可调试:

PSU-ONECOM03

  • 如果提示输入密码,Debian的root用户的默认密码是两个字母fa。

7.5 通过VNC和ssh登录Debian

如果你是祼板运行系统(既没有连接LCD也没有连接HDMI),并且烧写了带 -wifiap.img 后辍的固件,你可以使用手机,或者有无线网卡的电脑连接到Smart4418开放的 nanopi2-wifiap 无线热点(默认密码是123456789),连接成功后,无论是手机还是电脑,你可以到这里下载并安装一个名为VNC Viewer的软件,用VNC连接到Smart4418,Smart4418在使用VNC时的连接地址和端口为:192.168.8.1:5901,默认密码为:fa123456,以下是在iPhone上用VNC登录Smart4418的画面:
VNC to NanoPi2
你也可以通过 ssh -l root 192.168.8.1 命令在终端上登录,默认的root用户密码是 fa。

为了保证ssh的流畅,我们用以下命令关闭wifi的省电模式:

iwconfig wlan0 power off

8 Smart4418 扩展TF卡分区

8.1 Smart4418 Debian系统扩展TF卡分区

  • Debian扩展分区,要在pc上执行下列操作:
sudo umount /dev/sdx?
sudo parted /dev/sdx unit % resizepart 2 100 unit MB print
sudo resize2fs -f /dev/sdx2
  • Android扩展分区,要在pc上执行下列操作:
sudo umount /dev/sdx?
sudo parted /dev/sdx unit % resizepart 4 100 resizepart 7 100 unit MB print
sudo resize2fs -f /dev/sdx7

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

9 Debian系统的使用

9.1 连接无线网络

以下针对接了HDMI 或者LCD屏的用户:

在Debian的图形界面上,点击右下角的网络图标,程序会自动搜索到附近的WiFi热点,找到你需要连接的热点,点击旁边的Properties按钮,输入WiFi密码后保存退出,再点击Connect按钮即可。

以下内容仅适用于祼板运行的用户,即没有接LCD屏也没有接HDMI(使用 -wifiap.img 后辍的固件)

系统默认处于无线热点模式,因此无法搜索和连接到无线路由器,需要先退出无线执点模式才可以,请按照如下步骤操作:

第一步:我们先把要连接的无线路由器配置好,方法如下:
使用ssh连接NanoPi2,输入以下命令查询一下WiFi的网络接口,wlan开头的就是WiFi:

ifconfig -a

默认情况下是wlan0,你需要在/etc/network/interfaces.d/目录下新建一个与网络接口同名的配置文件 ,以wlan0为例,用vi命令新建以下文件:

vi /etc/network/interfaces.d/wlan0

wlan0文件的内容如下:

auto wlan0
iface wlan0 inet dhcp
wpa-driver nl80211
wpa-ssid YourWiFiESSID
wpa-ap-scan 1
wpa-psk YourWiFiPassword

其中,YourWiFiESSID和YourWiFiPassword请替换成你要连接的无线AP名称和密码。

如果你的WiFi密码中有特殊字符,或者你不希望明文存放密码,你可以使用wpa_passphrase命令为WiFi密码生成一个密钥(psk),用密钥来代替密码 ,在NanoPi2命令行下,可输入以下命令生成密钥:

wpa_passphrase YourWiFiESSID

在提示输入密码时,输入你的WiFi密码,然后就会得到类拟以下的内容,其中psk=后面的一串字符就是WiFi的密钥:

network={
        ssid="YourWiFiESSID"
        #psk="YourWiFiPassword"
        psk=1b66ca678d6f439f7360686ff5eeb7519cdc44b76a40d96515e4eb807a6d408b
}

最后,我们将上个步骤中生成的密钥替换掉wlan0文件中的密码,如下所示:

auto wlan0
iface wlan0 inet dhcp
wpa-driver nl80211
wpa-ssid YourWiFiESSID
wpa-ap-scan 1
wpa-psk 1b66ca678d6f439f7360686ff5eeb7519cdc44b76a40d96515e4eb807a6d408b

最后一步,使用以下命令退出无线热点模式,需要使用root用户操作,turn-wifi-into-apmode在执行后会重启设备,重启后,会根据上面的配置,自动连接WIFI:

su
turn-wifi-into-apmode no

9.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

9.3 使用蓝牙传输

点击右下角的蓝牙图标,会弹出一个操作菜单,其中,
Make discoverable菜单项是打开NanoPi2蓝牙的可发现属性,这样其他设备(例如手机)就可以搜索到NanoPi2并进行配对了;
Devices... 菜单项可以打开搜索界面,主动搜索周边的蓝牙设备(注:需要这个设备先打开可发现属性);
Send Files to Device...菜单项则可以通过蓝牙发送文件到已配对的指定设备上。

9.4 安装Debian软件包

我们提供的是标准的Debian jessie系统,你可以使用apt-get等命令来安装软件包,如果板子是首次运行,需要先用以下命令更新软件包列表:

apt-get update

然后就可以安装软件包了,例如要安装ftp服务器,使用以下命令:

apt-get install vsftpd

如果软件包下载速度不理想,你可以编辑 /etc/apt/sources.list 更换一个更快的源服务器,这个网址[2]有一份完整的源镜像服务器列表,注意要选用一个带armhf架构的。


10 如何编译系统

10.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)

10.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卡,否则有可能会导致无法正常启动。

10.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

10.4 编译Linux kernel

10.4.1 编译内核

  • 下载内核源代码
git clone https://github.com/friendlyarm/linux-3.4.y.git
cd linux-3.4.y
git checkout nanopi2-lollipop-mr1

Smart4418内核所属的分支是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 720p输出,用于替换掉SD卡boot分区下的uImage.hdmi。
如果要支持HDMI 1080p,则需要修改内核配置:

touch .scmversion
make nanopi2_linux_defconfig
make menuconfig
  Device Drivers -->
    Graphics support -->
      Nexell Graphics -->
        [ ] LCD
        [*] HDMI
        (0)   Display In  [0=Display 0, 1=Display 1]
              Resolution (1920 * 1080p)  --->
make uImage

启用LCD,同时取消HDMI,然后退出并保存配置,编译后即可获得支持LCD显示的uImage,用于替换SD卡boot分区下的uImage。

10.4.2 如何使用新编译的内核

  • 更新SD卡上的内核

如果您是使用SD卡启动Android,则在PC上复制为Android编译的uImage到SD卡的boot分区(即分区1,设备是/dev/sdX1)即可。
如果您是使用SD卡启动Debian系统,则需要编译好用于HDMI的uImage后替换SD卡boot分区下的uImage.hdmi,然后编译用于LCD的uImage并替换SD卡boot分区下的uImage。

  • 更新eMMC上Android的内核

如果只想单独更新eMMC上的内核来测试,则需要先正常启动板,然后mount eMMC的boot分区,使用新编译的uImage来替换原有文件,完成后reboot即可。
从eMMC启动时可通过以下方法来更新内核:
1) 启动完成后,需要手动mount eMMC的boot分区(设备是/dev/mmcblk0p1), 可通过串口在板上操作:

su
mount -t ext4 /dev/block/mmcblk0p1 /mnt/media_rw/sdcard1/

2) 连接USB,在PC端Ubuntu下使用adb push命令复制新编译的uImage到已mount的boot分区下;

adb push uImage /mnt/media_rw/sdcard1/

3) 也可以将编译好的内核复制到SD卡或U盘,然后在板上复制到boot分区下;
4) 更新完成后,输入 reboot 命令重启即可,注意不要直接断电或按Reset键,否则可能会损坏文件。

  • 更新eMMC上Debian的内核

从eMMC启动时可通过以下方法来更新内核:
1) 启动完成后,系统通常会自动mount eMMC的boot分区(设备是/dev/mmcblk0p1), 可输入命令mount来查看;
2) 连接网络,使用scp/ftp等方式复制新编译的uImage并替换boot分区下的文件,如果是用于HDMI的内核,则替换uImage.hdmi;
3) 也可以将编译好的内核复制到SD卡或U盘,然后在板止复制到boot分区下;
4) 更新完成后,输入 reboot 命令重启即可,注意不要直接断电或按Reset键,否则可能会损坏文件.

  • 使用新的内核来生成boot.img

如果要生成直接烧写eMMC的文件,则需要使用新编译的内核来生成boot.img,然后复制到烧写用的SD卡即可直接烧写到eMMC.
对于Android,将新的uImage复制Android源码的device/friendly-arm/nanopi2/boot/ 下,然后编译Android即可获得新的boot.img .
对于Debian, 则需要使用按以下方法来生成boot.img :
1) 下载debian_nanopi2

git clone https://github.com/friendlyarm/debian_nanopi2.git

2) 复制用于HDMI的uImage到debian_nanopi2/boot/uImage.hdmi, 复制用于LCD的 uImage到debian_nanopi2/boot/uImage ;
3) 生成Debian的 boot.img

cd debian_nanopi2
mkdir rootfs
./build.sh

新的 boot.img 在 debian_nanopi2/sd-fuse_nanopi2/debian 下.
其中命令"mkdir rootfs"只是创建一个空的目录使得build.sh可以运行,因此生成的其它文件比如rootfs.img不能使用。

10.4.3 编译内核模块

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”可查看帮助。
编译成功结束后,会显示生成的内核模块。

10.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文件。

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

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

  • 烧写到eMMC

成功编译Android后,可过2种方式烧写到eMMC,分别如下:
1) fastboot: 板子从eMMC启动后通过串口快速按任意键进入uboot命令行模式,输入命令fastboot即可启动此方式。
连接USB线,然后PC端输入以下命令:

cd out/target/product/nanopi2
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

2) 使用SD卡烧写
复制out/target/product/nanopi2下的boot.img, cache.img, userdata.img, system.img, partmap.txt到烧写用SD卡的images/android下,再次烧写即可。

11 扩展连接

11.1 Smart4418连接USB(FA-CAM202)200万摄像头模块

  • Smart4418使用Debian系统,假设你已接好LCD屏或者HDMI,进入系统后,点击左下角的菜单键“Other”-->xawtv9,打开USB Camera软件。进入“welcome to xawtv!”,选择OK即可进行拍照。

USB camera USB camera-01

11.2 Smart4418连接CMOS 500万摄像头模块

  • Smart4418使用Android5.1系统,假设你已经接好LCD屏或者HDMI,进入系统后,直接点击“camera”图标,即可打开摄像头进行拍照。

CMOS camera

11.3 Smart4418接USB摄像头使用OpenCV

  • OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。
  • Smart4418跑Debian系统时,接USB Camera,可直接使用官方的OpenCV。

1、以下介绍的是Smart4418用C++使用的OpenCV:

  • 首先需要保证你的Smart4418能连外网,假如你有串口,直接串口登陆超级终端(或者ssh登陆)。进入系统后,输入用户名(root),密码(fa)登陆;
  • 以下命令在超级终端执行:


apt-get update
apt-get install libcv-dev libopencv-dev

2、Smart4418烧写Debian系统启动后,接上USB Camera,使用Debian系统自带的摄像头软件测试,确定摄像头能正常使用。
3、通过终端执行命令,查看你的摄像头设备:

ls /dev/video*
  • 注:video9 是你的USB摄像头设备(注:video0到8均被其它设备占用了)

4、opencv的测试代码(官方C++示例代码)在 /home/fa/Documents/opencv-demo, 使用以下命令即可编译:

cd /home/fa/Documents/opencv-demo
make

编译成功后,得到可执行文件demo

5、这里特别说明:目前Smart4418的内核注册了9个video设备,而opencv的官方源码定义了最多只能使用8个Camera,所以这里需要删掉一个暂时没用到的video,我们把video0设备删掉:

rm /dev/video0
mv /dev/video9 /dev/video0

6、以下步骤需要在Smart4418上接上键盘执行:

./demo

你便可以看到opencv已经用起来。

12 更多OS

12.1 Ubuntu-Core with Qt-Embedded

Ubuntu Core with Qt-Embedded,是一个没有X-windows环境,使用Qt-Embedded作为图形界面的轻量级Ubuntu系统,基于官方的Ubuntu core系统开发而成,非常适合于企业用户用作产品的基础OS。

本系统除了保留Ubuntu core的特性以外,还包括以下特性:

  • 支持电容和电阻触摸屏 (型号:S700, X710, S70)
  • 支持WiFi连接
  • 支持以太网连接
  • 支持蓝牙,已预装bluez等相关软件包
  • 支持音频播放
  • 等等

请访问此处 Ubuntu Core with Qt-Embedded 了解详情。

12.2 Ubuntu-Mate

Ubuntu-Mate基于Ubuntu系统,使用的桌面环境是Mate-desktop,界面简洁易用,需配合LCD或者HDMI使用,可通过ssh登录。
仅提供给进阶爱好者交流使用,不对该系统提供专业技术支持。

  • 访问此处下载地址下载系统固件。
  • 将固件解压后,在Windows下使用友善官方提供 win32diskimager 工具烧写Ubuntu-Mate即可。
  • 烧写完成后,将SD卡插入NanoPi M2,上电即可体验Ubuntu-Mate。
  • 登录账号:root或fa ; 登录密码:fa

13 资源链接

Smart4418原理图PDF
尺寸(Smart4418-1512-Dimension(dxf).zip)