• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Mini6410+++º +¦ß-20101121
 

Mini6410+++º +¦ß-20101121

on

  • 1,112 views

 

Statistics

Views

Total Views
1,112
Views on SlideShare
1,111
Embed Views
1

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 1

http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Mini6410+++º +¦ß-20101121 Mini6410+++º +¦ß-20101121 Document Transcript

    • Mini6410 用 户 手 册 版本:2010-11-21 (本手册正在不断更新中,建议您到网站下载最新版本) copyright@2010 第 -1- 页
    • 版 权 声 明 本手册版权归属广州友善之臂计算机科技有限公司(以下简称“友善之臂” )所有, 并保留一切权力。非经友善之臂同意(书面形式),任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其法律责任。 敬告: 在售开发板的手册会经常更新,请在 http://www.arm9.net网站查看最近更新,并下载最新手册,不再另行通知。 第 -2- 页
    • 更新说明:日期 说明201-11-21 更新简介: 1. 升级内核为 Linux-2.6.36,并带齐全的 BSP 驱动程序,包含多媒体驱动 2. 升级交叉编译器为 4.5.1,默认采用 armv6 指令集,支持硬浮点运算 3. 修正了命令行 cmos 摄像头测试程序 4. Linux 中集成了 USB WiFi Kits 工具集,可以支持 1000 多种型号的 USB 无线 网卡,使用 scan-wifi, star-wifi,stop-wifi 即可轻松设置使用 USB 无线网卡 5. 4.3”和 7”LCD 驱动板增加了一线精准触摸驱动,可以支持 4.3”-21”等大尺寸 的四线电阻触摸屏,支持 Android/Linux/WinCE/Ubuntu 6. 修正了触摸屏校正程序,实现了不准确就循环校正的功能,适用于 Linux/Android/Ubuntu 系统 7. 4.3”和 7”LCD 驱动板中,增加了背光调节功能,支持 Android/Linux/WinCE 8. Android 中增加了 3G 无线上网拨号程序,支持 100 多种 USB 上网卡,涵盖 WCDMA, CDMA2000, TD-SCDMA 等多种 3G 网络制式 9. Android 中增加了优盘,USB 蓝牙即插即用的功能 10. Android 中增加了图形界面的有线以太网设置程序,可以手工指定 IP 地址, 也可以自动分配 IP 11. WinCE 中实现了 USB WiFi 即插即用功能,调整了无线网络设置程序界面, 可以在 480x272 中轻易设置无线网络,而不会被遮住 12. WinCE 中添加了 USB 蓝牙即插即用组件2010-10-07 更新简介: 1- 增加了 Linux 版本的硬解码播放器,使用方法见 4.1.3 2- 增加了 Qt-Extended-4.4.3, 也就是 Qtopia4, 至此实现了 3 种 Qt 图形系统共存, 并且可以不重启,通过图形界面切换运行 3- Linux 下增加了 3G 无线上网功能,可使用 WCDMA/CDMA2000/TD-SCDMA 三种制式,拨号程序支持自动检测上百种 USB 无线上网卡,因数量太多,我 们暂时测试了以下几种: HUAWEI E1750 (中国联通 WCDMA) ZTE AC581 (中国电信 CDMA2000) HUAWEI EC169 (中国电信 CDMA2000) ZTE MU351 (中国移动 TD-SCDMA) ZTE AC710 (中国电信 CDMA2000)2010-09-23 主要更新简介: 1- Mini6410 升级内存至 256M(今后作为标配), 同时售价增加 30 元 2- Superboot 升级: 可以自动探测 128M/256M 内存,可以烧写超过内存大小的 image 文件, 比如你可以把 ubuntu 制作成 ubi 格式的映像烧写到 Nand Flash 中运行,运行效果比在 SD 卡 中要好很多 3- u-boot 升级: 根据不同的情况,根目录下分别有如下四种配置,你可以使用这些配置编 译出你所需要的 U-boot.bin 第 -3- 页
    • - mini6410_sd_config-ram128 : 支持从 SD 卡启动,适用于 RAM 为 128M 的 Mini6410 - mini6410_nand_config-ram128 : 支持从 Nand Flash 启动,适用于 RAM 为 128M 的 Mini6410 - mini6410_sd_config-ram256 : 支持从 SD 卡启动,适用于 RAM 为 256M 的 Mini6410 - mini6410_nand_config-ram128 : 支持从 Nand Flash 启动,适用于 RAM 为 256M 的 Mini6410 4- Nboot 升级: 根据不同的内存版本,有两个源代码包(分别带 ram128 或 ram256 尾缀)。 5- WinCE 中增加了 TCPMP 播放器,支持 Mpeg4/H.263/H.264 硬解码,效果流畅,完美发 挥 6410 的多媒体 MFC 特性。 6- WINCE 中增加了 SD WiFi 的使用方法(5.1.16 章节) 7- 增加了串口触摸屏控制器配件及相应的驱动和使用说明,可以在大尺寸触摸屏上实现精 准触摸,支持 Linux/WinCE/Android/Ubuntu 8- 首家移植提供 QtE-4.7.0,内含一键式移植脚本 build 和 mktarget (Nokia 于 2010-9-21 日正式发布 Qt-4.7.0)2010-09-03 本次更新简介: - 增加了 GPRS Modem 拨号上网,及短信单发、群发实用程序,基于 Qtopia-2.2.0 - 修正了接 LCD2VGA 模块时,无法输出 800x600 和 640x480 的 bug 使用 GPRS Modem 拨号上网和发送短信的说明分别见 4.1.17 和 4.1.18 章节2010-08-14 本次更新简介: - 升级到 Android 2.1 - 增加 Android 系统中 CMOS 摄像头驱动及使用说明 - 增加 Android 系统中 SD-WiFi 驱动及使用说明 - Superboot 升级为 1031 版本,增加了[i]选项中 Nand Flash 实际容量显示2010-08-04 本次更新简介: - U-boot 中加入了关闭了背光处理,这样开机时就不会在 LCD 上出现彩条了 - Linux 内核中完善了 4 个串口驱动,现在可以使用 Qtopia 的串口助手进行测试了 - 采用了最新的 QtE-4.6.3 - 修正了无法通过 NFS 启动 Linux 的问题 - WindowsCE6 中增加了 OpenGL 示例(只有可执行程序,且运行于 800x480 分辨率的 LCD) - WindowsCE6 增加了英文,简体中文,繁体中文示例工程,imagesWindowsCE6 目录中有 相应的映像文件2010-06-29 本手册第一次发布 第 -4- 页
    • 第 -5- 页
    • 目 录Mini6410 用 户 手 册....................................................................................................................................- 1 - 第一章 Mini6410 开发板介绍...........................................................................................................................- 13 -  1.1 Mini6410 开发板简介...........................................................................................................................- 13 -  1.1.1 Mini6410 开发板外观................................................................................................................- 14 -  1.1.2 Mini6410 开发板硬件资源特性................................................................................................- 14 -  1.1.3 机械尺寸图 ...............................................................................................................................- 16 -  1.1.4 Linux系统资源特性...................................................................................................................- 16 -  1.1.5 WindowsCE 6.0 系统资源特性 .................................................................................................- 18 -  1.1.6 Android系统资源特性 ...............................................................................................................- 19 -  1.1.7 Ubuntu系统特性 ........................................................................................................................- 20 -  1.2 布局及跳线 ...........................................................................................................................................- 20 -  1.2.1 跳线说明 ...................................................................................................................................- 20 -  1.2.2 接口布局 ...................................................................................................................................- 20 -  1.3 接口定义及资源说明 ..........................................................................................................................- 21 -  1.3.1 系统内存分配图 .......................................................................................................................- 21 -  1.3.2 电源接口和插座 .......................................................................................................................- 22 -  1.3.3 串口 ...........................................................................................................................................- 22 -  1.3.4 USB接口 ....................................................................................................................................- 23 -  1.3.5 网络接口 ...................................................................................................................................- 24 -  1.3.6 音频接口 ...................................................................................................................................- 24 -  1.3.7 电视输出口 ...............................................................................................................................- 25 -  1.3.8 JTAG接口...................................................................................................................................- 25 -  1.3.9 用户LED....................................................................................................................................- 26 -  1.3.10 用户按键 .................................................................................................................................- 26 -  1.3.11 双LCD接口 .............................................................................................................................- 27 -  1.3.12 ADC输入 ..................................................................................................................................- 28 -  1.3.13 PWM控制蜂鸣器.....................................................................................................................- 28 -  1.3.14 红外接收 .................................................................................................................................- 29 -  1.3.15 I2C-EEPROM...........................................................................................................................- 29 -  1.3.16 SD卡 .........................................................................................................................................- 29 -  1.3.17 SDIO-II/SD-WiFi接口 .............................................................................................................- 30 -  1.3.18 CMOS CAMERA接口 .............................................................................................................- 30 -  1.3.19 GPIO接口 .................................................................................................................................- 31 -  1.3.20 系统总线接口 .........................................................................................................................- 32 - 第二章 Mini6410 快速上手体验.......................................................................................................................- 34 -  2.1 开发板设置及连接 ..............................................................................................................................- 34 -  2.1.1 启动模式选择 ...........................................................................................................................- 34 -  2.1.2 外部接口连接 ...........................................................................................................................- 35 -  2.1.3 设置超级终端 ...........................................................................................................................- 35 -  第 -6- 页
    • 2.2 烧写BIOS到SD卡 ................................................................................................................................- 38 -  2.2.1 BIOS简介 ...................................................................................................................................- 39 -  2.2.1 基于WindowsXP烧写BIOS ......................................................................................................- 41 -  2.2.2 基于Windows7 烧写BIOS ........................................................................................................- 43 -  2.3 体验快速安装、更新、恢复和运行系统...........................................................................................- 47 -  2.3.1 快速安装WindowsCE系统 .......................................................................................................- 47 -  2.3.2 快速更新为Android系统 ..........................................................................................................- 48 -  2.3.3 快速恢复为Linux系统..............................................................................................................- 49 -  2.3.4 在SD卡中直接运行Ubuntu系统(500M) ..................................................................................- 49 -  2.3.5 关于配置文件FriendlyARM.ini................................................................................................- 49 -  2.4 BIOS菜单功能介绍 ..............................................................................................................................- 53 -  2.2.1 安装USB下载驱动....................................................................................................................- 54 -  2.2.2 功能主菜单说明 .......................................................................................................................- 59 - 第三章 安装和更新或运行系统 .......................................................................................................................- 60 -  3.1 使用USB一键安装系统.......................................................................................................................- 60 -  3.1.1 一键安装Linux系统(yaffs2 或UBIFS格式) .............................................................................- 61 -  3.1.2 一键安装WinCE系统................................................................................................................- 67 -  3.1.3 一键安装Android(yaffs2 或UBIFS格式).................................................................................- 72 -  3.2 使用SD卡脱机快速安装系统 .............................................................................................................- 78 -  3.2.1 快速安装Linux(yaffs2 格式)....................................................................................................- 78 -  3.2.2 快速安装Linux(UBIFS格式).....................................................................................................- 79 -  3.2.3 快速安装WindowsCE6 .............................................................................................................- 80 -  3.2.4 快速安装Android(yaffs格式)...................................................................................................- 80 -  3.2.5 快速安装Android(UBIFS格式) ...............................................................................................- 81 -  3.2.6 快速安装Ubuntu(UBIFS格式).................................................................................................- 81 -  3.3 从SD卡直接运行各个系统 .................................................................................................................- 82 -  3.3.1 直接运行SD卡中的Linux.........................................................................................................- 82 -  3.3.2 直接运行SD卡中的WindowsCE ..............................................................................................- 82 -  3.3.3 直接运行SD卡中的Android .....................................................................................................- 83 -  3.3.4 直接运行SD卡中的Ubuntu ......................................................................................................- 83 - 第四章 Linux开发指南......................................................................................................................................- 84 -  4.1 初试Linux之图形界面Qtopia-2.2.0,Qtopia4 和QtE-4.7.0 系统 ......................................................- 84 -  4.1.1 触摸屏校正 ...............................................................................................................................- 85 -  4.1.2 主要界面说明 ...........................................................................................................................- 86 -  4.1.3 硬解码播放器SMPlayer ...........................................................................................................- 87 -  4.1.4 播放Mp3....................................................................................................................................- 89 -  4.1.5 播放视频 ...................................................................................................................................- 90 -  4.1.6 图片浏览 ...................................................................................................................................- 90 -  4.1.7 自动装载SD卡和优盘 ..............................................................................................................- 91 -  4.1.8 计算器 .......................................................................................................................................- 92 -  4.1.9 命令终端 ...................................................................................................................................- 92 -  第 -7- 页
    • 4.1.10 文件浏览器 .............................................................................................................................- 93 -  4.1.11 网络设置 .................................................................................................................................- 93 -  4.1.12 Ping测试 ...................................................................................................................................- 94 -  4.1.13 浏览器 .....................................................................................................................................- 95 -  4.1.14 LED测试...................................................................................................................................- 95 -  4.1.15 EEPROM读写测试 ..................................................................................................................- 96 -  4.1.16 PWM控制蜂鸣器.....................................................................................................................- 96 -  4.1.17 串口助手 .................................................................................................................................- 97 -  4.1.18 使用GPRS Modem拨号上网 ..................................................................................................- 99 -  4.1.19 使用GPRS Modem单发和群发短信 ....................................................................................- 102 -  4.1.20 使用 3G上网卡拨号上网......................................................................................................- 104 -  4.1.21 录音 .......................................................................................................................................- 105 -  4.1.22 使用USB摄像头拍照............................................................................................................- 107 -  4.1.23 CMOS摄像头预览拍照 .........................................................................................................- 108 -  4.1.24 LCD测试 ................................................................................................................................- 108 -  4.1.25 调节背光 ...............................................................................................................................- 109 -  4.1.26 A/D转换..................................................................................................................................- 109 -  4.1.27 按键测试 ...............................................................................................................................- 110 -  4.1.28 触摸笔测试 ........................................................................................................................... - 111 -  4.1.29 条码扫描 ............................................................................................................................... - 111 -  4.1.30 语言设置 ...............................................................................................................................- 112 -  4.1.31 设置时区-日期-时间-闹钟 ...................................................................................................- 113 -  4.1.32 屏幕旋转 ...............................................................................................................................- 114 -  4.1.33 设置开机自动运行程序 .......................................................................................................- 115 -  4.1.34 关于关机 ...............................................................................................................................- 116 -  4.1.35 看门狗 ...................................................................................................................................- 117 -  4.1.36 启动QtE-4.7.0........................................................................................................................- 118 -  4.1.37 启动Qtopia4 ..........................................................................................................................- 119 -  4.1.38 选择哪个版本的Qt进行开发 ...............................................................................................- 121 - 4.2 通过串口终端操作开发板 ................................................................................................................- 122 -  4.2.1 播放mp3 ...................................................................................................................................- 122 -  4.2.2 如何中止程序的运行 .............................................................................................................- 123 -  4.2.3 使用优盘/移动硬盘 ...............................................................................................................- 123 -  4.2.4 使用SD卡 ................................................................................................................................- 125 -  4.2.5 如何通过串口与PC互相传送文件.........................................................................................- 126 -  4.2.6 控制板上的LED......................................................................................................................- 128 -  4.2.7 测试板上的按键 ......................................................................................................................- 129 -  4.2.8 串口测试 .................................................................................................................................- 130 -  4.2.9 测试蜂鸣器 .............................................................................................................................- 131 -  4.2.10 调节控制LCD背光 ...............................................................................................................- 132 -  4.2.11 测试I2C-EEPROM .............................................................................................................- 132 -  第 -8- 页
    • 4.2.12 AD转换测试...........................................................................................................................- 133 -  4.2.13 测试TV-OUT.........................................................................................................................- 134 -  4.2.14 测试多媒体播放 ...................................................................................................................- 135 -  4.2.15 使用USB无线网卡或SD WiFi..............................................................................................- 135 -  4.2.16 CMOS摄像头动态预览 .........................................................................................................- 143 -  4.2.17 使用telnet上bbs......................................................................................................................- 143 -  4.2.18 如何设置网络以访问互联网 ...............................................................................................- 144 -  4.2.19 如何设置MAC地址 ..............................................................................................................- 146 -  4.2.20 如何使用Telnet登录开发板..................................................................................................- 148 -  4.2.21 使用ftp传递文件...................................................................................................................- 149 -  4.2.22 通过网页控制板上的LED....................................................................................................- 149 -  4.2.23 如何挂接使用网络文件系统NFS ........................................................................................- 150 -  4.2.24 设置并保存系统实时时钟 ....................................................................................................- 151 -  4.2.25 如何掉电保存数据到Flash...................................................................................................- 151 -  4.2.26 设置开机自动运行程序 ........................................................................................................- 152 -  4.2.27 如何使用命令进行屏幕截图 ...............................................................................................- 153 -  4.2.28 查看开发板内存信息 ...........................................................................................................- 153 - 4.3 安装并设置Fedora9 ...........................................................................................................................- 155 -  4.3.1 图解安装Fedora 9.0 ................................................................................................................- 156 -  4.3.2 添加新用户 .............................................................................................................................- 169 -  4.3.3 访问Windows系统中的文件 ..................................................................................................- 172 -  4.3.4 配置网络文件系统NFS服务 ..................................................................................................- 177 -  4.3.5 建立交叉编译环境 .................................................................................................................- 180 - 4.4 解压安装源代码及其他工具 ............................................................................................................- 182 -  4.4.1 解压安装源代码 .....................................................................................................................- 182 -  4.4.2 解压创建目标文件系统 .........................................................................................................- 185 -  4.4.3 解压安装文件系统映像工具 .................................................................................................- 185 -  4.4.4 解压安装LogoMaker ...............................................................................................................- 186 - 4.5 配置和编译U-boot .............................................................................................................................- 188 -  4.5.1 配置编译支持NAND启动的U-boot.......................................................................................- 188 -  4.5.2 配置编译支持SD卡启动的U-boot .........................................................................................- 188 -  4.5.3 U-boot使用说明 .......................................................................................................................- 189 - 4.6 配置和编译内核 ................................................................................................................................- 189 - 4.7 配置和编译busybox...........................................................................................................................- 190 - 4.8 制作目标板文件系统映象 ................................................................................................................- 191 -  4.8.1 制作yaffs2 文件系统映像 ......................................................................................................- 191 -  4.8.2 制作ubifs文件系统映像 .........................................................................................................- 192 -  4.8.3 制作ext3 文件系统映像..........................................................................................................- 192 - 4.9 嵌入式Linux应用程序示例...............................................................................................................- 192 -  4.9.1 Hello,World! .............................................................................................................................- 193 -  4.9.2 LED测试程序...........................................................................................................................- 196 -  第 -9- 页
    • 4.9.3 测试按键 .................................................................................................................................- 198 -  4.9.4 PWM控制蜂鸣器编程示例.....................................................................................................- 199 -  4.9.5 I2C-EEPROM编程示例...........................................................................................................- 203 -  4.9.6 串口编程示例 .........................................................................................................................- 206 -  4.9.7 UDP网络编程 ..........................................................................................................................- 212 -  4.9.8 数学函数库调用示例 .............................................................................................................- 217 -  4.9.9 线程编程示例 .........................................................................................................................- 218 -  4.9.10 管道应用编程示例-网页控制LED ......................................................................................- 220 -  4.9.11 基于C++的Hello,World.........................................................................................................- 225 -  4.10 嵌入式Linux驱动程序示例..............................................................................................................- 226 -  4.10.1 Hello,Module-最简单的嵌入式Linux驱动程序模块 ...........................................................- 226 -  4.10.2 LED驱动程序.........................................................................................................................- 230 -  4.10.3 按键驱动程序 .......................................................................................................................- 233 -  4.11 编译Qtopia-2.2.0 ..............................................................................................................................- 239 -  4.11.1 解压安装源代码....................................................................................................................- 239 -  4.11.2 编译和运行x86 版本的Qtopia-2.2.0 ....................................................................................- 239 -  4.11.3 编译和运行arm版本的Qtopia-2.2.0 .....................................................................................- 240 -  4.12 编译QtE-4.7.0 ..................................................................................................................................- 241 -  4.12.1 解压安装源代码 ...................................................................................................................- 241 -  4.12.2 编译和运行arm版本的QtE-4.7.0..........................................................................................- 242 -  4.13 编译Qtopia4(Qt-Extended-4.4.3) .....................................................................................................- 243 -  4.13.1 解压安装源代码 ...................................................................................................................- 243 -  4.13.2 编译和运行x86 版本的Qt-Extended-4.4.3...........................................................................- 243 -  4.13.3 编译和运行arm版本的Qt-Extended-4.4.3............................................................................- 244 - 第五章 WindowsCE 6.0 开发指南 ..................................................................................................................- 246 -  5.1 体验WindowsCE6 ..............................................................................................................................- 246 -  5.1.1 触摸屏校正 .............................................................................................................................- 246 -  5.1.2 触摸屏书写效果验证 .............................................................................................................- 247 -  5.1.3 查看系统信息 .........................................................................................................................- 247 -  5.1.4 设置实时时钟并保存 .............................................................................................................- 248 -  5.1.5 用户存储空间 .........................................................................................................................- 248 -  5.1.6 使用优盘和SD卡 ....................................................................................................................- 249 -  5.1.7 播放mp3 ..................................................................................................................................- 249 -  5.1.8 测试LED..................................................................................................................................- 249 -  5.1.9 测试按键 .................................................................................................................................- 250 -  5.1.10 测试PWM控制蜂鸣器..........................................................................................................- 250 -  5.1.11 录音测试 ...............................................................................................................................- 251 -  5.1.12 串口助手 ................................................................................................................................- 251 -  5.1.13 CMOS摄像头预览拍照 ......................................................................................................- 253 -  5.1.14 硬解码播放器 .......................................................................................................................- 253 -  5.1.15 TV-OUT测试..........................................................................................................................- 254 -  第 - 10 - 页
    • 5.1.16 设置网络参数以连接互联网 ...............................................................................................- 255 -  5.1.17 使用SD无线网卡 ..................................................................................................................- 256 -  5.1.18 使用USB无线网卡................................................................................................................- 258 -  5.1.19 使用USB蓝牙 .........................................................................................................................- 258 -  5.1.20 背光调节控制 .......................................................................................................................- 260 -  5.1.21 与PC同步(基于Windows7)...................................................................................................- 261 -  5.2 建立WindowsCE 6.0 开发环境 .........................................................................................................- 265 -  5.2.1 安装Visual Studio 2005 及补丁..............................................................................................- 266 -  5.2.2 安装Windows CE 6.0 及补丁 .................................................................................................- 281 -  5.2.3 安装第三方软件腾讯QQ........................................................................................................- 303 -  5.2.4 安装BSP及内核工程示例 ......................................................................................................- 310 -  5.3 配置和编译WindowsCE 6.0 内核及Bootloader................................................................................- 313 -  5.3.1 编译缺省内核示例工程 .........................................................................................................- 314 -  5.3.2 在BSP中修改LCD类型及串口输出功能 ..............................................................................- 318 -  5.3.3 在BSP中配置使用一线精准触摸屏 ......................................................................................- 319 -  5.3.4 关于BootLoader ......................................................................................................................- 320 -  5.3.5 创建SDK .................................................................................................................................- 322 -  5.3.6 安装SDK .................................................................................................................................- 324 - 第六章 Android开发指南 ................................................................................................................................- 328 -  6.1 安装和使用Android ...........................................................................................................................- 328 -  6.1.1 安装Android ............................................................................................................................- 328 -  6.1.2 触摸屏校准 .............................................................................................................................- 330 -  6.1.3 旋转屏幕显示 .........................................................................................................................- 330 -  6.1.4 播放mp3 ..................................................................................................................................- 331 -  6.1.5 使用SD-WiFi上网...................................................................................................................- 332 -  6.1.6 使用CMOS摄像头 ..................................................................................................................- 335 -  6.1.7 图形界面的有线网络设置 .....................................................................................................- 337 -  6.1.8 使用 3G上网卡拨号上网.........................................................................................................- 341 -  6.1.9 使用USB蓝牙...........................................................................................................................- 344 -  6.1.10 使用优盘 ................................................................................................................................- 346 -  6.2 建立Android开发环境 .......................................................................................................................- 349 -  6.2.1 关于开发平台和交叉编译器 .................................................................................................- 349 -  6.2.2 解压安装源代码 .....................................................................................................................- 349 -  6.3 配置和编译U-boot .............................................................................................................................- 350 -  6.4 配置和编译Linux内核.......................................................................................................................- 351 -  6.5 从源代码开始创建Android ...............................................................................................................- 351 -  6.6 制作安装或运行文件系统映像 ........................................................................................................- 352 -  6.6.1 制作yaffs2 格式的文件系统映像...........................................................................................- 352 -  6.6.2 制作UBIFS格式文件系统映像 ..............................................................................................- 353 -  6.6.3 制作ext3 格式的文件系统映像..............................................................................................- 353 - 第七章 嵌入式Ubuntu安装及使用说明 .........................................................................................................- 354 -  第 - 11 - 页
    • 7.1 安装运行Ubuntu ................................................................................................................................- 354 -  7.1.1 把Ubuntu安装到开发板中运行 .............................................................................................- 354 -  7.1.2 使用SD卡运行Ubuntu ............................................................................................................- 354 - 7.2 建立Ubuntu开发环境 ........................................................................................................................- 356 -  7.2.1 关于开发平台和交叉编译器 .................................................................................................- 356 -  7.2.2 解压安装内核源代码 .............................................................................................................- 356 - 7.3 制作安装或运行文件系统映像 ........................................................................................................- 357 -  7.3.1 制作UBIFS格式文件系统映像 ..............................................................................................- 357 -  7.3.2 创建EXT3 格式的Ubuntu系统映像文件...............................................................................- 358 - 7.4 更多信息 ............................................................................................................................................- 358 -  第 - 12 - 页
    • 第一章 Mini6410 开发板介绍1.1 Mini6410 开发板简介 Mini6410 是一款十分精致的低价高品质一体化 ARM11 开发板, 由广州友善之臂设计、生产和发行销售。它采用三星 S3C6410 作为主处理器,在设计上承袭了 Mini2440“精于心,简于形”的风格,而且布局更加合理,接口更加丰富,十分适用于开发 MID、汽车电子、工业控制、导航系统、媒体播放等终端设备;也可适用于 高校教学、嵌入式培训、个人研究学习和 DIY 等。 具体而言,Mini6410 具有双 LCD 接口、4 线电阻触摸屏接口、100M 标准网络接口、标准 DB9 五线串口、Mini USB 2.0-OTG 接口、USB Host 1.1、3.5mm 音频输出口、在板麦克风、标准 TV-OUT 接口、弹出式 SD 卡座、红外接收等常用接口;另外还引出 4 路 TTL 串口、CMOS Camera 接口、40pin 总线接口、30pin GPIO 接口(可复用为 SPI、I2C、中断等,另含 3路 ADC、1 路 DAC)、SDIO2 接口(可接 SD WiFi)、10pin Jtag 接口等;在板的还有蜂鸣器、I2C-EEPROM、备份电池、AD 可调电阻、8 按键(可引出)、4LED 等;所有这些,都极大地方便了开发者的评估和使用, 再加上我们按照 Mini6410 尺寸专门定制的 4.3"LCD 模块, 真正做到让您“一手掌握所有”! 我们还充分地发挥了 6410 支持 SD 卡启动这一特性, 使用我们精心研制的 Superboot,无需连接电脑,只要把目标文件拷贝到 SD 卡中(可支持高达 32G 的高速大容量卡),你就可以 在 开 发 板 上 极 快 极 简 单 地 自 动 安 装 各 种 嵌 入 式 系 统(WindowsCE6/Linux/Android/Ubuntu/uCos2 等);甚至无需烧写,就可以在 SD 卡上直接运行它们,这一切,简直太酷了! 用户可以到我们网站浏览最新通知及下载更新最新的手册和系统网址:http://www.arm9.net 第 - 13 - 页
    • 1.1.1 Mini6410 开发板外观1.1.2 Mini6410 开发板硬件资源特性CPU 处理器- Samsung S3C6410A,ARM1176JZF-S 核,主频 533MHz,最高 667MhzDDR RAM 内存- 在板标配 256M DDR RAM(可选 128M)- 32bit 数据总线FLASH 存储- 在板 128M/256M/1GB Nand Flash, 掉电非易失LCD 显示- 板上集成 4 线电阻式触摸屏接口,可以直接连接四线电阻触摸屏 第 - 14 - 页
    • - 支持黑白、4 级灰度、16 级灰度、256 色、4096 色 STN 液晶屏,尺寸从 3.5 寸到 12.1 寸, 屏幕分辨率可以达到 1024x768 象素;- 支持黑白、4 级灰度、16 级灰度、256 色、64K 色、真彩色 TFT 液晶屏,尺寸从 3.5 寸到 12.1 寸,屏幕分辨率可以达到 1024x768 象素;- 标准配置为 4.3” 真彩 LCD,分别率 480x272,带触摸屏;标准接口资源- 1 个 100M 以太网 RJ45 接口(采用 DM9000 网卡芯片)- 1 个 DB9 式 RS232 五线串口(另有 4 个 TTL 电平串口,见下)- 1 个 mini USB Slave-OTG 2.0 接口- 1 路 3.5mm 立体声音频输出接口,1 路在板麦克风输入- 1 路 TV-OUT 输出接口- 1 路 USB Host 1.1 接口- 1 个标准 SD 卡座- 1 路红外接收头- 5V 直流电压输入在板即用资源- 1 个 I2C-EEPROM 芯片(256byte),主要用于测试 I2C 总线- 4 个 用户 LED(绿色)- 8 个侧立按键(中断式资源引脚,带引出座)- 1 个可调电阻,用于 ADC 转换测试- 1 个 PWM 控制蜂鸣器- 板载实时时钟备份电池外扩接口资源- 4 个串口座(TTL 电平, 2.0mm 间距,直插式卡座)- 10pin 2.0mm 间距 JTAG 接口- 双 LCD 接口(41pin 迷你座,可兼容 mini2440 LCD 接口,和 40pin 2.0mm 双排座)- 20pin 2.0mm 间距 SDIO 接口(可接 SD WiFi,其中还包含 1 路 SPI 和 I2C 接口)- 20pin 2.0mm 间距 CMOS 摄像头接口- 30pin 2.0mm 间距 GPIO 接口- 40pin 2.0mm 间距系统总线接口 第 - 15 - 页
    • - 10pin 2.0mm 间距贴片按键引出座(含 8 路中断式按键引脚,电源和地)PCB 规格尺寸- 6 层高密度电路板,采用沉金工艺生产- 110 x 110(mm)操作系统支持- Linux2.6.28.6 + Qtopia-2.2.0 + QtE-4.7.0- WindowsCE.NET 6.0(R3)- Android 2.1- Ubuntu-09101.1.3 机械尺寸图如下图为 Mini6410 的定位孔坐标图,单位为 mm1.1.4 Linux 系统资源特性内核版本 第 - 16 - 页
    • - Linux 2.6.36引导程序(BootLoader)- U-boot-1.6.1: 提供完整的源代码,根据配置文件不同,分为 Nand 和 SD 启动两个版本- Superboot: 不提供源代码,仅烧写在 SD 卡中运行使用支持的文件系统- yaffs2 : 可读写的文件系统,推荐使用- UBIFS: 可读写的文件系统,推荐使用- cramfs: 压缩的只读文件系统,不在线更新数据时推荐使用- Ext2/3: 标准 PC Linux 所采用的文件系统- Fat32: 支持长文件名- NFS: Linux 系统专有的网络文件系统,开发驱动程序及应用程序时方便使用- UBIFS: 专门针对 Flash 设备而发展的一种文件系统,主要提供了卷管理的功能驱动程序(以下驱动均以源代码方式提供)- 4 串口标准驱动- DM9000 驱动程序- 音频驱动(WM9714)- RTC 驱动(可掉电保存时间)- 4 个用户 LED 灯驱动- USB Host 驱动- LCD 驱 动 ( 支 持 3.5”, 4.3”, 7” , 8”, LCD2VGA1024x768, LCD2VGA800x600, LCD2VGA640x480, EZVGA800x600 等显示驱动)- 四线触摸屏驱动- 免驱的万能 USB 摄像头驱动- USB 键盘和鼠标驱动、优盘、移动硬盘- SD 卡驱动,可支持高速 SD 卡, 最大容量可达 32G- I2C-EEPROM- ADC 驱动- LCD 背光驱动- 看门狗驱动(看门狗复位相当于冷复位)- 多媒体驱动(包括 Jpeg,fimc,MFC, 2D/3D 加速,TVENC,TVSCALER 等)- CMOS Camera 驱动- 一线精准触摸,适合于 4.3”-21”等各种大尺寸触摸屏- 背光调节,可 127 级可调,炫酷渐熄效果- Spi 驱动基本应用及服务测试程序- busybox1.17(Linux 工具集,包含常用 Linux 命令等)- Telnet、Ftp、inetd(网络远程登录工具及服务)- boa(web server)- madplay(基于控制台的 mp3 播放器)- snapshot(基于控制台的抓图软件)- ifconfig、ping、route 等(常用网络工具命令) 第 - 17 - 页
    • 图形系统- Qtopia-2.2.0 : 提供平台源代码,分为 x86 和 arm 两个版本- QtE-4.7.0 : 提供平台源代码,为 arm 版本- Qt-extended -4.4.3: 手机版本的 Qtopia,也可称为 Qtopia4,提供平台源代码实用的 Qtopia 程序 说明:以下图形界面程序均为友善之臂独立自主开发,不提供源代码- ADC 转换测试- LED 控制- Buttons 按键测试- I2C-EEPROM 读写测试- LCD 测试- Ping 测试- 万能免驱 USB 摄像头动态预览并拍照- 录音机- Web 浏览器- 看门狗测试- 网络设置(可保存参数)- 背光控制- 语言设置:可设置中英文- 随手写:主要用于测试触摸笔的准确性- MMC/SD 卡和优盘自动挂载和卸载- Qt4 切换器- Qtopia4 切换器- 硬解码播放器 SMPlayer交叉编译器- arm-none-linux -4.5.1-v6-vfp1.1.5 WindowsCE 6.0 系统资源特性版本- WindowsCE Embedded 6.0BSP 特性- 支持快速开机启动(15 秒以内)- 通过 USB 可以烧写普通的 bmp 文件作为开机画面- 通过修改 Nboot 头文件可以方便的自定义进度条的颜色、位置、长宽,以及开机图片的 位置、背景- CMOS 摄像头驱动- LED 驱动- 8 按键驱动- PWM 控制蜂鸣器驱动 第 - 18 - 页
    • - LCD 驱 动 ( 支 持 3.5”, 4.3”, 7” , 8”, LCD2VGA1024x768, LCD2VGA800x600, LCD2VGA640x480, EZVGA800x600 等显示驱动,修改方法十分简单)- RTC 驱动- DM9000 网卡驱动- 大容量高速 SD 卡驱动- 触摸屏驱动- 音频输入与输出驱动:基于 WM9714 芯片- 优盘、USB 键盘、USB 鼠标等驱动- 串口驱动: 目前仅有 COM2,3,4 经过测试- 多媒体驱动(包括 Jpeg,fimc,2D/3D 加速,MFC, TVENC,TVSCALER 等)- USB WiFi 即插即用- USB 蓝牙即插即用- 一线精准触摸,适合于 4.3”-21”等各种大尺寸触摸屏- 背光调节,127 级可调,炫酷渐熄效果应用软件特性- 超级播放器 TCPMP,完美支持硬解码,可流畅播放 H.264/263, MPEG4 视频- 方便使用的串口助手- 按键测试程序- LED 测试程序- PWM 测试程序- 录音测试程序- OpenGL 测试程序- 小画笔:可用来测试触摸屏的准确性- 开机自动运行设置程序:可十分方便的把用户程序设置为开机自动运行- Painter: 用以测试触摸屏的准确性- 记事本1.1.6 Android 系统资源特性所用 Linux 内核版本- Linux-2.6.28.6Bootloader- U-boot-1.6支持的文件系统- FAT32: 支持 FAT32/FAT 格式的优盘和 SD 卡,SDHC 卡- YAFFS2: 支持通过 USB 下载或 SD 卡安装 YAFFS2 文件系统映像- UBIFS: 支持通过 USB 下载或 SD 卡安装 UBIFS 文件系统映像- EXT2/3: 支持从 SD 卡运行 EXT3 文件系统映像Android 系统版本及特性- Android 2.1 第 - 19 - 页
    • - 支持 SD-WiFi 无线上网- 支持 GPS 定位- 支持 CMOS 摄像头- 支持 3G 无线上网,支持 100 多种 USB 上网卡,涵盖 WCDMA, CDMA2000, TD-SCDMA 等多种 3G 网络制式- 支持优盘即插即用,最大可支持 32G- 支持 USB 蓝牙即插即用- 支持一线精准触摸- 支持背光 127 级可调,实现炫酷渐熄效果- 支持有线以太网图形界面设置,可自动分配 IP,也可以自动分配 IP1.1.7 Ubuntu 系统特性所用 Linux 内核版本- Linux-2.6.28.6Bootloader- Superboot: 支持从 SD 卡直接加载内核和文件系统运行支持的文件系统- FAT32: 支持 FAT32/FAT 格式的优盘和 SD 卡,SDHC 卡- EXT2/3: 支持从 SD 卡运行 EXT3 文件系统映像- UBIFS: 支持 SD 卡安装 UBIFS 文件系统映像1.2 布局及跳线1.2.1 跳线说明 本开发板上没有任何跳线选择,这样的设计更加易于方便使用。1.2.2 接口布局 Mini6410 接口布局如下图所示,它在十分紧凑的 110 x 110mm 面积上精致安排了开发者常用的各种常用接口,并且还引出了供开发测试需要的富余的 IO 口和总线接口。 说明:下图中带有橙色原点的位置均为相应接口座的第一脚位置。 第 - 20 - 页
    • 1.3 接口定义及资源说明 本小节详细介绍了开发板上每个接口或模块的引脚定义和占用的 CPU 资源,光盘中另有本开发板的完整原理图和封装库(分为 pdf 格式和 Protel99SE 格式),以供参考使用。1.3.1 系统内存分配图以下表格摘自 S3C6410 数据手册 2.2 Address Size(MB) Description0x0000_0000 0x07FF_FFFF 128MB 启动镜像区0x0800_0000 0x0BFF_FFFF 64MB 内部 ROM 第 - 21 - 页
    • 0x0C00_0000 0x0FFF_FFFF 128MB Stepping Stone(8KB)0x1000_0000 0x17FF_FFFF 128MB0x1800_0000 0x1FFF_FFFF 128MB DM9000AEP0x2000_0000 0x27FF_FFFF 128MB0x2800_0000 0x2FFF_FFFF 128MB0x3000_0000 0x37FF_FFFF 128MB0x3800_0000 0x3FFF_FFFF 128MB0x4000_0000 0x47FF_FFFF 128MB0x4800_0000 0x4FFF_FFFF 128MB0x5000_0000 0x5FFF_FFFF 256MB 128M DDR RAM0x6000_0000 0x6FFF_FFFF 256MB1.3.2 电源接口和插座 本开发板采用 5V 直流电源供电,提供了 2 个电源输入口,CN1 为附带的 5V 电源适配器插座,白色的 CON8 为 4Pin 插座,方便板子放入封闭机箱时连接电源。 CON5 引脚定义 1 VDD5V 2 GND 3 GND 4 VDDIN说明:此种接法方便当采用引线连接时,电源开关 S1 也是有效的。1.3.3 串口 S3C6410 本身总共有 4 个串口 UART0、 2、 其中 UART0 和 1 为五线功能串口, 1、 3, ,其他两个为三线串口。 在本开发板上,五线的 UART0 已经经过 RS232 电平转换,它对应于 COM0,你可以通过附带的交叉串口线和 PC 互相通讯。 为了方便开发,我们把这 4 个串口通过 CON1-4 分别从 CPU 直接引出,其中 UART1为五线引出。 CON1,CON2,CON3, CON4 在开发板上的位置和原理图中的连接定义对应关系如下图所示。 第 - 22 - 页
    • CON1,3,4 引脚定义(TTL) CON2 引脚定义(TTL) COM0 引脚定义(RS232)1 TXD 1 RTSn 1 NC2 RXD 2 CTSn 2 RSRXD3 5V 3 TXD 3 RSTXD4 GND 4 RXD 4 NC 5 5V 5 GND GND 6 NC 7 RSCTSn 8 RSRTSn 9 NC说明:NC 代表悬空1.3.4 USB 接口 本开发板具有两种 USB 接口,一个是 USB Host(1.1),它和普通 PC 的 USB 接口是一样的,可以接 USB 摄像头、USB 键盘、USB 鼠标、优盘等常见的 USB 外设;另外一种是miniUSB(2.0),它同时具备 OTG 功能,我们一般使用它来下载程序到目标板,当开发板装载了 WinCE 系统时,它可以通过 ActiveSync 软件和 Windows 系统进行同步,当开发板装载了Linux 系统时,目前尚无相应的驱动和应用。 miniUSB 的接口定义如下: miniUSB 引脚定义 5 GND 4 OTGID 3 D+ 2 D- 1 Vbus USB Host 的接口定义如下: 第 - 23 - 页
    • USB Host 引脚定义 1 5V 2 D- 3 D+ 4 GND1.3.5 网络接口 本开发板采用了 DM9000 网卡芯片,它可以自适应 10/100M 网络,RJ45 连接头内部已经包含了耦合线圈,因此不必另接网络变压器,使用普通的网线即可连接本开发板至你的路由器或者交换机。1.3.6 音频接口 S3C6410 支持 I2S/PCM/AC97 等音频接口,本开发板采用的是 AC97 接口,它外接了WM9714 作为 CODEC 解码芯片。 音频系统的输出为开发板上的常用 3.5mm 绿色孔径插座,为方便学习开发使用,我们直接在板上提供了麦克风输入,注意:本开发板并非专业的录音设备,音频输入的处理电路佷简单,录音时尽量把音源靠近麦克风。 第 - 24 - 页
    • 1.3.7 电视输出口 S3C6410 带有 2 路电视输出接口,本开发板把其中一路 DACOUT0 经过放大输出,你可以直接使用 AV 线把它接到普通电视上使用, 另一路则直接从 CPU 引出到 CON6 的第 30脚。 注意:当使用 DACOUT0 时,需要把电视机设置为 CVBS 输入模式1.3.8 JTAG 接口 当开发板从贴片厂下线,里面是没有任何程序的,这时我们一般可以通过 JTAG 接口烧写第一个程序,但 S3C6410 可以支持 SD 卡启动,也就是说可以把 Bootloader 烧写到 SD卡中启动系统,从这个意义上来讲,JTAG 已经变得无从重要。 JTAG 接口在开发中另一个最常见的用途是单步调试, 不管是市面上常见的 JLINK 还是 ULINK,以及其他的仿真调试器,最终都是通过 JTAG 接口连接的。标准的 JTAG 接口是4 线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线,加上电源和地,一般总共 6 条线就够了;为了方便调试,大部分仿真器还提供了一个复位信号。 因此,标准的 JTAG 接口是指是否具有上面所说的 JTAG 信号线,并不是 20Pin 或者10Pin 等这些形式上的定义表现。这就如同 USB 接口,可以是方的,也可以扁的,还可以是其他形式的,只要这些接口中包含了完整的 JTAG 信号线,都可以称为标准的 JTAG 接口。本开发板提供了包含完整 JTAG 标准信号的 10 Pin JTAG 接口,各引脚定义如图。 说明:对于打算致力于 Linux 或者 WinCE 开发的初学者而言,JTAG 接口基本是没有任何意义和用途的,因为大部分开发板都已经提供了完善的 BSP,这包括最常用的串口和网络以及 USB 通讯口,当系统装载了可以运行的 Linux 或者 WinCE 系统,用户完全可以通过这些高级操作系统本身所具备的功能进行各种调试,这时是不需要 JTAG 接口的;即使你可以进行跟踪,但鉴于操作系统本身结构复杂,接口繁多,单步调试犹如大海捞针,毫无意义可言。想一想你手头使用的 PC 机就知道了,或许你从没有见过甚至听过有谁会在 PC 主板上插一个仿真器,来调试 PCI 这样接口的 WindowsXP 或者 Linux 驱动。这就是为什么你经常见到或者听到那么多人在讲驱动“移植” ,因为大部分人都是参考前辈的实现来做驱动的。 第 - 25 - 页
    • JTAG 接口定义 2 4 6 8 10 3.3V nRESET TDO GND GND 1 3 5 7 9 3.3V nTRST TDI TMS TCK1.3.9 用户 LED LED 是开发中最常用的状态指示设备,本开发板具有 4 个用户可编程 LED,它们直接与 CPU 的 GPIO 相连接,低电平有效(点亮),详细的资源占用如下表。 LED4 LED3 LED2 LED1 GPIO GPK7 GPK6 GPK5 GPK41.3.10 用户按键 本开发板总共有 8 个用户测试用按键,它们均从 CPU 中断引脚直接引出,属于低电平触发,这些引脚也可以复用为 GPIO 和特殊功能口,为了方便用户把它们引出作为其他用途,这 8 个引脚也通过 CON12 引出,8 个按键和 CON12 的定义如下: CON12 1 2 3 4 5 6 7 8 按键 K1 K2 K4 K4 K5 K6 K7 K8 第 - 26 - 页
    • 对应的中断 EINT0 EINT1 EINT2 EINT3 EINT4 EINT5 EINT19 EINT20 可复用为 GPN0 GPN1 GPN2 GPN3 GPN4 GPN5 GPL11 GPL12 GPIO说明:CON12.9 为电源(3.3V),CON12.10 为地(GND)1.3.11 双 LCD 接口 为了方便用户使用,本开发板带有 2 个 LCD 接口座:LCD2 和 LCD3。其中,LCD2是 0.5mm 间距的 41Pin 座,它和 Mini2440 的 LCD 接口座兼容;LCD3 为 2.0mm 间距的 40Pin插针座,因为 LCD2.41 为 GND,所以 LCD3 虽然缺少一个脚,但并不会影响使用。 LCD 接口座中包含了常见 LCD 所用的大部分控制信号(行场扫描、时钟和使能等),和完整的 RGB 数据信号(RGB 输出为 8:8:8,即最高可支持 1600 万色的 LCD);为了用户方便试验,还引出了 PWM 输出,和复位信号(nRESET),其中 LCD_PWR 是背光开关控制信号。 另外,37、38、39、40 为四线触摸屏接口,它们可以直接连接普通的四线电阻触摸屏使用,如图。 LCD2 & LCD3 引脚说明 LCD2 & LCD3 引脚说明 1 5V 2 5V 3 VD0 4 VD1 5 VD2 6 VD3 7 VD4 8 VD5 9 VD6 10 VD7 11 GND 12 VD8 13 VD9 14 VD10 15 VD11 16 VD12 17 VD13 18 VD14 19 VD15 20 GND 21 VD16 22 VD17 23 VD18 24 VD19 25 VD20 26 VD21 27 VD22 28 VD23 第 - 27 - 页
    • 29 GND 30 GPE0/LCD_PWR 31 PWM1/GPF15 32 nRESET 33 VDEN/VM 34 VSYNC 35 HSYNC 36 VCLK 37 TSXM 38 TSXP 39 TSYM 40 TSYP 41 GND1.3.12 ADC 输入 本开发板总共引出 4 路 A/D(模数转换)转换通道,其中 AIN0 连接到了开发板上的可调电阻 W1;AIN1,2,3 则通过 CON6 接口座的 27, 28, 29 引脚引出(见 1.3.19 一节)。S3C6410的 AD 转换可以配置为 10-bit/12-bit,详见数据手册第 39 章。 为了方便操作,W1 特意放置在靠近电路板边缘的地方,但使用 4.3”LCD 的时候,即使上面加了屏,也不会被遮住,如图。1.3.13 PWM 控制蜂鸣器 本开发板的蜂鸣器 Buzzer 是通过 PWM 控制的,原理图如下所示,其中 PWM0 对应GPF14,该引脚可通过软件设置为 PWM 输出,也可以作为普通的 GPIO 使用。 第 - 28 - 页
    • 1.3.14 红外接收 本开发板带有一个红外遥控接收头,采用了接收头型号为 IRM3638(或兼容),它连接使用了 EINT12 作为接收引脚,如图。1.3.15 I2C-EEPROM 本开发板具有一个直接连接 CPU 之 I2C 信号引脚的 EEPROM 芯片 AT24C08,它的容量有 256 byte,在此主要是为了供用户测试 I2C 总线而用,它并没有存储特定的参数。1.3.16 SD 卡 S3C6410 带有 2 路 SDIO 接口,其中 SDIO0 通常被用作普通 SD 卡使用,本开发板通过 CON7 把它引出为标准的弹出式 SD 卡座,如图,该接口可以支持 SDHC,也就是高速大容量卡。 第 - 29 - 页
    • 1.3.17 SDIO-II/SD-WiFi 接口 S3C6410 的另一路 SDIO 接口通过 CON9 座引出,它是一个 2.0 间距的 20Pin 插针座,为了配合 SDIO 使用,该接口中还包含了 1 路 SPI,1 路 I2C,4 个 GPIO,其定义如下表。 CON9 引脚定义 CON9 引脚定义 1 VDD/3.3V 2 GND 3 GPK8 4 GPK13 5 I2CSCL 6 I2CSDA 7 SPI0_MOSI0 8 SPI0_MISO0 9 SPI0_CLK0 10 SPI0_CS 11 GPP10/WiFi_IO 12 GPP11/WiFi_PD 13 SD1_CLK 14 SD1_CMD 15 SD1_nCD 16 SD1_nWP 17 SD1_DAT0 18 SD1_DAT1 19 SD1_DAT2 20 SD1_DAT31.3.18 CMOS CAMERA 接口 S3C6410 带有 CMOS 摄像头接口,在开发板上通过 CON10 接口引出。它是一个 20 第 - 30 - 页
    • 脚 2.0mm 间距的针座,用户可以直接使用我们提供的 CAM130 摄像头模块;其实 CAM130摄像头模块上面没有任何电路,它只是一个转接板,它直接连接使用了型号为 ZT130G2 摄像头模块,它们的定义如下图所示。 说明:CAMERA 接口是一个复用端口,它可以通过设置相应的寄存器改为 GPIO 使用,下表是它对应引脚的 GPIO 列表 CON10 引脚定义 CON10 引脚定义 1 CAMSDA(实接 I2CSDA) 2 CAMSCL(实接 I2CSCL) 3 GPK2 4 CAMRSTn 5 CAMCLK 6 CAMHREF 7 CAMVSYNC 8 CAMPCLK 9 CAMDATA7 10 CAMDATA6 11 CAMDATA5 12 CAMDATA4 13 CAMDATA3 14 CAMDATA2 15 CAMDATA1 16 CAMDATA0 17 3.3V 18 2.45-2.8V 19 1.8V 20 GND1.3.19 GPIO 接口 GPIO 是通用输入输出口的简称,本开发板带有一个 30 Pin 2.0mm 间距的 GPIO 接口,标称为 CON6,如图。 实际上,CON6 不仅包含了很多富余的 GPIO 引脚,还包含了一些其他 CPU 引脚,如 AD 输入、DAC 等。你所看到的图中的 SPI 接口、I2C 接口、中断等,它们其实也是 GPIO,不过是以特殊功能接口来标称定义的, 这些都可以通过相应的 CPU 寄存器来设置更改它们的用途,详细的接口资源见下表。 第 - 31 - 页
    • CON6 引脚定义 说明 CON6 引脚定义 说明 1 3.3V 电源脚 2 GND 地 3 GPE1 未使用,可作为 GPIO 等 4 GPE2 未使用,可作为 GPIO 等 5 GPE3 未使用,可作为 GPIO 等 6 GPE4 未使用,可作为 GPIO 等 7 GPM0 未使用,可作为 GPIO 等 8 GPM1 未使用,可作为 GPIO 等 9 GPM2 未使用,可作为 GPIO 等 10 GPM3 未使用,可作为 GPIO 等 11 GPM4 未使用,可作为 GPIO 等 12 GPM5 未使用,可作为 GPIO 等 13 GPQ1 未使用,可作为 GPIO 等 14 GPQ2 未使用,可作为 GPIO 等 15 GPQ3 未使用,可作为 GPIO 等 16 GPQ4 未使用,可作为 GPIO 等 17 GPQ5 未使用,可作为 GPIO 等 18 GPQ6 未使用,可作为 GPIO 等 19 SPI1_CLK 未使用,可作为 GPIO 等 20 SPI1_MISO 未使用,可作为 GPIO 等 21 SPI1_CS 未使用,可作为 GPIO 等 22 SPI1_MOSI 未使用,可作为 GPIO 等 23 EINT6 未使用,可作为 GPIO 等 24 EINT9 未使用,可作为 GPIO 等 25 EINT11 未使用,可作为 GPIO 等 26 EINT16 未使用,可作为 GPIO 等 27 AIN1 模拟输入通道 1, 28 AIN2 模拟输入通道 2, 输入电压范围 0-0.3.3V 输入电压范围 0-0.3.3V 29 AIN3 模拟输入通道 3, 30 DACOUT1 输入电压范围 0-0.3.3V说明:DACOUT1 是另一路 TV 输出,一般需要接放大器才能输出到电视。1.3.20 系统总线接口 本开发板上的系统总线接口为 CON5, 它总共包含 16 条数据线(D0-D15)、 条地址线 8(A0-A6, A24)、还有一些控制信号线(片选、读写、复位等),CON5 可以向外提供 5V 电压输出;实际上,很少有用户通过总线扩展外设。下面是 CON5 的详细引脚定义说明。 CON5 引脚定义 CON5 引脚定义 1 5V 2 GND 3 EINT17 4 EINT18 5 NC 6 NC 7 nCS4 8 nCS5 第 - 32 - 页
    • 9 GND 10 GND 11 LnOE 12 LnWE 13 nWAIT 14 nRESET 15 GND 16 GND 17 ADDR0 18 ADDR1 19 ADDR2 20 ADDR3 21 ADDR4 22 ADDR5 23 ADDR6 24 ADDR19 25 DATA0 26 DATA1 27 DATA2 28 DATA3 29 DATA4 30 DATA5 31 DATA6 32 DATA7 33 DATA8 34 DATA9 35 DATA10 36 DATA11 37 DATA12 38 DATA13 39 DATA14 40 DATA15说明:NC 代表没有连接 第 - 33 - 页
    • 第二章 Mini6410 快速上手体验 本手册主要按照从感性到理性的顺序安排各个章节及内容, 因此或许一开始你会看到很多关于“如何操作”的步骤,请不要忽视这些看起来很简单的操作,我们一般都在其中穿插必要的说明,比如相关驱动程序源代码的位置等,这样是为了让你在以后的开发中有个大概的印象。 出厂之前,如果客户未加说明,开发板中已经烧写了缺省的 Linux 系统(对应光盘/images/Linux 文件夹中二进制文件: u-boot、zImage、root-qtopia-qt4.img,不同型号的显示模块,有不同尾缀的烧写文件),这样你拿到板子之后即可上电开机运行系统,以便了解和测试整个硬件系统。 注意:对于 7”LCD 套餐,我们默认烧写的是 WinCE 系统,里面包含了我们移植开发的 TCPMP 播放器,可以支持完美支持硬解码,播放 Mpeg4, H.263/264 视频。 在开始之前,我们建议你先了解一下本章 1,2 节的内容,一般将来做参考。2.1 开发板设置及连接2.1.1 启动模式选择 本开发板的启动模式选择, 是通过拨动开关 S2 来决定的, 根据开发板上 S2 开关旁边的标识: S2 拨至 SDBOOT 标识一侧时,系统将从 SD 卡启动; S2 拨至 NAND 标识一侧时,系统将从 Nand Flash 启动。 出厂缺省设置为 Nand 启动,因为里面已经预装了 Linux 系统,这样开机就可以使用了。 说明:6410 芯片本身支持多种启动方式: NOR Flash,普通的 Nand Flash,OneNand,SD/MMC Card,甚至是 Modem(详见 6410 数据手册 Table 3-1),我们基于以下原因仅设置了“普通 Nand Flash”和“SD/MMC”这两种启动模式选择。 基于简单易用的原则,如果提供多种启动模式,势必需要更多的设置开关,和更繁杂的设置;这会让人感到很混乱,不方便使用。并且多位的拨动开关,耐用性不太好,来回拨动的次数多了,很容易损坏。 从另一方面来讲, 6410 本身仅支持最大 1MB 的 NOR Flash(虽然市面有一些开发板声称支持 2MB,但那是不可能的,这是由 6410 芯片本身特性所决定的),并且目前并没有很简单的方式在线烧写 NOR Flash;既然 bootloader 或者裸机程序可以直接烧写或者复制到 SD 卡上使用,我们认为 NOR Flash 已经没有存在的必要了。 第 - 34 - 页
    • 需要注意的是,免费版的 H-JTAG 软件目前并不支持 ARM11,也谈不上通过它来烧写 NOR Flash。2.1.2 外部接口连接 请使用我们提供的交叉串口线(蓝色头)连接开发板的串口 0 和 PC 机的串口 用我们提供的交叉网线将开发板的网络接口与 PC 相连(如不需要连网,该步并不是 必须) 用我们提供的 5V 电源适配器连接到板上的 5V 输入插座(注意不要太用力,以免损 坏电源插座) 把音箱或者耳机的插头接入板上的绿色音频输出口 如果您有液晶屏,请按照数据线头的方向与开发板的 LCD 接口相连2.1.3 设置超级终端 注意:有的用户使用 USB 转串口线来扩展串口,但注意有的 USB 转串口线是会出现乱码的,这说明它的性能和功能并不好,我们的代理大部分都提供了这样的转接线,用户可以直接联系代理购买可用的转接线。 另外,请务必使用随机附带的串口交叉线,或许其他线是不能正常通讯的,请使用万用表检测确定为交叉线即可。 为了通过串口连接开发板,必须使用一个模拟终端程序,几乎所有的类似软件都可以使用,其中MS-Windows 自带的超级终端是最常用的选择,当你安装Windows9x 时需要自定义选择安装该项,Windows2000 及更高版本则已经缺省安装。 一般桌面版Linux系统也自带了类似的串口终端软件,叫minicom,它是基于命令行的程序,对于初学者而言使用比较复杂一些,感兴趣的用户可以在网上找一下这方面的介绍。 在此着重介绍一下Windows 自带的超级终端程序并以WindowsXP 为例,或许其他Windows 版本的程序界面有所不同。 超级终端程序通常位于"开始->程序->附件->通讯"中,选择运行该程序, 一般会跳出如图所示窗口, 询问你是否要将Hypertrm作为默认的telnet程序,此时你不需要,因此点“否”按钮。 接下来,会跳出如下窗口,点“取消” 第 - 35 - 页
    • 此时系统提示“确认取消”,点“是”即可,接着点提示窗口的“确定” ,进入下一步。 超级终端会要求你为新的连接取一个名字,如图所示,这里我取了”ttyS0”,Windows系统会禁止你取类似”COM1”这样的名字,因为这个名字被系统占用了。 第 - 36 - 页
    • 当你命名完以后,又会跳出一个对话框,你需要选择连接开发板的串口,我这里选择了串口 1,如图所示: 最后,最重要的一步是设置串口,注意必须选择无流控制,否则,或许你只能看到输出而不能输入,另外板子工作时的串口波特率是 115200,如图所示。 第 - 37 - 页
    • 当所有的连接参数都设置好以后,打开电源开关,终端会出现系统启动界面。选择超级终端“文件”菜单下的“另存为…”,保存该连接设置,以便于以后再连接时就不必重新执行以上设置了。2.2 烧写 BIOS 到 SD 卡 完全空白的 SD 卡是不能直接启动 6410 开发板的, 必须先在 PC 上使用特殊的烧写软件把 BIOS(也可以称为 bootloader)写入 SD 卡才可以,并且写入的这个 BIOS 是无法在电脑上直接看到的。三星公司已经提供了这样烧写程序:IROM_SD_Fusing_tool.exe,你可以在光盘中找到它的源代码,目前大部分 6410 开发板均使用这个软件,但这个烧写软件有很多的局限性和不安全性,因此我们另外开发了一个更强大更安全的 SD-Flasher.exe,在此做一个简单的对比: 对比项 IROM_SD_Fusing_tool.exe SD-Flasher.exe出品 三星 友善之臂运行平台 仅支持 WindowsXP 可以支持 WindowsXP/Vista/Windows7支持的 SD 卡种类 针对普通卡和高速卡,有两个版本,易混淆, 同时支持普通卡和高速卡,统一,高效 效率低自动扫描 SD 卡 不支持,需手工选择,容易造成误选为硬盘 支持,更加安全 从而破坏主机数据批量烧写 不支持,每次只能烧写一个 SD 卡 支持,通过连接读卡器,可以批量烧写烧写模式 强制烧写 在 WindowsXP 下,为强制烧写 第 - 38 - 页
    • 在 Vista/Windows7 下,为安全烧写(需先分割)磁盘分割(见注释 1) 不支持 支持(需为 Vista/Windows7 系统) 注释 1:一般市场上买到的 SD 卡为全盘 FAT32 格式,如果卡中存放了很多数据,强制烧写就有可能会不知不觉中破坏这些数据;基于此原因考虑,我们在 Vista/Winows7 中,先把 SD 卡自动分割为普通的 FAT32 格式区(自动命名卷标为“FriendlyARM)和无格式区(占130M)两部分,烧写软件将会依据卷标名称作为标志,把 bootloader 烧写到无格式区,这样就不会破坏普通 FAT32 格式区中的数据了。 实际上,Vista/Windows7 系统本身的安全性很高,普通用户是无法在 Vista/Windows7系统上强制烧写 SD 卡的,因此必须要先分割才能写入;另一方面,鉴于使用 WindowsXP 的用户可能会嫌麻烦不想升级为 Windows7,根据一些网上的调查数据,这部分人还是占很大数量的, “嫌麻烦”也表明这部分用户凡事都希望尽快搞定,因此我们并没有在 WindowsXP 中采用“先分割,再烧写”这种更加安全的做法,而是根据习惯,采用了和三星一样的“强制烧写”的模式。2.2.1 BIOS 简介 U-boot 三星公司为 6410 系统提供了带有 USB 下载功能的 U-boot, 我们在此基础上增强和改进了它的功能,并把它完全开源出来,以供广大嵌入式爱好者学习研究使用,主要特性如下: 1. 增加了下载菜单,类似 Superboot 的 USB 下载菜单 2. 增加了 SD 卡启动配置 3. 支持直接下载烧写 yaffs2 文件系统映像 4. 支持烧写 WindowsCE BootLoader 之 Nboot 5. 支持烧写 WindowsCE 映像的功能 6. 支持烧写单文件映像文件,就是通常所说的裸机程序 7. 支持返回原始 shell 说明:大部分声称完全开源 Bootloader 的 6410 开发板,也都是从三星提供的 U-boot稍作改动而来的,所有开源的 U-boot 目前均无法烧写到 SDHC 卡(超过 2G 的大容量 SD 卡)中使用。 关于 U-boot 的详细说明可以参考 4.5 章节,下面我们主要介绍 Superboot Superboot 除了完全开源的 U-boot,我们还为企业用户设计了功能超强的 Superboot,它需要被烧写入 SD 卡中使用,关于它的 USB 下载功能,如果你使用过 mini2440,那么在 mini6410开发板上,你也会得心应手,因为它们的功能菜单和命令都几乎是完全相同的,你甚至不用重新安装 USB 下载驱动和 dnw 下载软件。 当然了,Superboot 还支持更加强大易用的 SD 卡直接安装或运行系统,这样你只需 第 - 39 - 页
    • 要简单的修改一下配置文件,无需连接电脑,当然也无需 USB 和 dnw,你就可以快速而简单的烧写或运行各种系统,这对于喜欢外出做演示、培训教学、或者大批量生产的人来说,都十分有用,因为它只需一张 SD 卡就可以了。 另外, 你不用担心你使用的是 WindowsXP, 还是 Vista,还是 Windows7,甚至是 64-bit的 Windows7, 我们提供的 SD-Flasher 程序都可以畅通无阻的运行使用; 你也不必担心你使用的是小容量的 SD 卡,还是高速大容量的 SDHC 卡,Superboot 都可以安得其所。 鉴于我们汉语的一些谐音简称,你可以把“Superboot”称为连 SB 都会使用的bootloader;在下面的介绍中,基于习惯,我们把它称为 bios。 需要说明的是,Superboot 是由友善之臂精心研制开发的,我们并不提供它的源代码,任何企业或个人都可以免费使用它。 对于 6410 上各个常见版本的 Bootloader,这里有个简单的对比列表: 对比项 Superboot U-Boot U-Boot设计者或移植改进者 友善之臂 友善之臂 其他厂商简单易用的下载菜单 支持 支持 有的支持自动识别 128M/256M DDR RAM 支持 不支持 不支持烧写大于内存容量的映像文件 支持 不支持 不支持USB 下载 StepLoader,如 Nboot 等 支持 支持 支持USB 下载 Linux 内核 支持 支持 支持USB 下载 Yaffs2 文件系统映像 支持 支持 有的支持USB 下载 UBIFS 文件系统映像 支持 不支持 不支持(一般 Android 系统用)USB 下载 EBOOT.nb0 不需要,所以不支持 不需要,所以不支持 支持USB 下载 WindowsCE 映像 NK.bin 支持 不支持 不支持USB 下载 WindowsCE 映像 NK.nb0 不需要,所以不支持 支持 不支持USB 下载 WindowsCE 开机图片 支持(直接使用 bmp 文 不支持 有的可以支持,但需要手 件,不需要转换) 工转换USB 下载烧写裸机程序 支持 支持 支持启动参数设置 支持 支持 支持2G 以内普通 SD 卡 支持 支持 支持高速大容量 SD 卡(FAT32 格式) 支持 不支持 不支持SD 卡脱机烧写 StepLoader 如 Nboot 等 支持 不支持 不支持SD 卡脱机烧写 Linux 内核 支持 不支持 不支持SD 卡脱机烧写 Yaffs2 映像 支持 不支持 不支持SD 卡脱机烧写 UBIFS 映像 支持 不支持 不支持(一般 Android 系统用)SD 卡脱机烧写 WindowsCE 映像 NK.bin 支持 不支持 不支持SD 卡脱机烧写 WindowsCE 开机图片 支持(直接使用 bmp 文 不支持 不支持 件,不需要转换)SD 卡脱机烧写裸机程序 支持 不支持 不支持 第 - 40 - 页
    • SD 卡直接运行 Linux 全系统 支持 不支持 不支持SD 卡直接运行 WindowsCE 全系统 支持 不支持 不支持SD 卡直接运行 Ubuntu 全系统 支持 不支持 不支持SD 卡直接运行 Android 全系统 支持 不支持 不支持SD 卡直接运行裸机程序 支持 不支持 不支持SD 快速读取和烧写系统(见注释 1) 支持 不支持 不支持 注释 1:通过 SD 卡烧写系统的速度无与伦比,可以达到 1.8MB/s2.2.1 基于 WindowsXP 烧写 BIOS 注意:有用户反映有些笔记本自带的 SD 读卡器无法正常烧写,我们尚未遇到过这样的情况,因此无法得知原因,在这种情况下,你可以使用普通的 USB 读卡器试试。 另外,SD-Flasher.exe 会分割 130M 空间作为空白区域,因此有些小于 256M 的 SD 卡是无法使用的,我们推荐使用至少 4G 的 SD 卡,因为稍后拷贝的安装文件比较大 Step1: 打开光盘tools中的 SD-Flasher.exe 烧写软件,如图,请注意,此时软件中的“ReLayout”按钮是失效的,因为我们特意在 WindowsXP 系统中关闭了此功能。 Step2: 点 按钮找到所要烧写的 Superboot,如图 第 - 41 - 页
    • (3)把 FAT32 格式的 SD 卡插入笔记本的卡座,也可以使用 USB 读卡器连接普通的 PC,准备就绪,点“Scan” ,找到的 SD 卡就会被列出,如图 (4)再点“Fuse”,Superboot 就会被烧写到 SD 卡中了。 第 - 42 - 页
    • Superboot 被写入 SD 卡后是无法看到的,该如何检测呢?很简单,把 SD 卡插到开发板上,并把开发板上 S2 开关设置为“SDBOOT”模式,开机后,就可以看到板上的 LED1 在不停的闪烁,这就说明 Superboot 已经正常运行了。 提示:如果你使用了带卡套的 TF 小卡,也可能会因为接触不良的原因,导致无法正常使用,因此我们建议使用普通的 SD 卡。2.2.2 基于 Windows7 烧写 BIOS 注意:有用户反映有些笔记本自带的 SD 读卡器无法正常烧写,我们尚未遇到过这样的情况,因此无法得知原因,在这种情况下,你可以使用普通的 USB 读卡器试试, 。 另外,SD-Flasher.exe 会分割 130M 空间作为空白区域,因此有些小于 256M 的 SD 卡是无法使用的,我们推荐使用至少 4G 的 SD 卡,因为稍后拷贝的安装文件比较大(1.5GB) Step1: 打开光盘tools中的 SD-Flasher.exe 烧写软件,请注意,你需要通过管理员身份来打开该软件才行,如图 第 - 43 - 页
    • 打开后,如下图所示,请注意,此时软件中的“ReLayout”按钮是有效的,我们将使用它来分割 SD 卡,以便以后可以安全地读写。 Step2:点 按钮找到所要烧写的 Superboot,如图 第 - 44 - 页
    • Step3: 把 FAT32 格式的 SD 卡插入笔记本的卡座,也可以使用 USB 读卡器连接普通的 PC,请务必先备份卡中的数据,点“Scan” ,找到的 SD 卡就会被列出,如图,可以看到此时 SD 卡是不能被烧写的(红色圈处) Step4: 再点“ReLayout”,会跳出一个提示框,如图,提示你 SD 卡中的所有数据将会丢失,点“Yes” ,开始自动分割,这需要稍等一会。 第 - 45 - 页
    • 分割完毕,回到 SD-Flasher 主界面,此时再点“Scan”,就可以看到 SD 卡卷标已经变为“FriendlyARM”,并且可以使用了,如图。 Step5: 点“Fuse”,Superboot 就会被安全地烧写到 SD 卡的无格式区中了,以后你也可以在 WindowsXP 中烧写这张卡,不必担心 FAT32 区域中的数据被破坏。 第 - 46 - 页
    • Superboot 被写入 SD 卡后是无法看到的,该如何检测呢?很简单,把 SD 卡插到开发板上,并把开发板上 S2 开关设置为“SDBOOT”模式,开机后,就可以看到板上的 LED1 在不停的闪烁,这就说明 Superboot 已经正常运行了。2.3 体验快速安装、更新、恢复和运行系统 要使用 SD 卡脱机安装或者运行各种系统,需要先向已经烧好 Superboot 的 SD 卡中拷贝一些必要的系统文件等,这其中包含一个名为“FriendlyARM.ini”的配置文件,通过它,你可以选择系统类型及相关文件。 下面我们就先体验一些极速安装或运行系统的简单步骤(基于 4.3”套餐,如果你使用了其他 LCD 套餐,以下步骤可能会有所不同,请自行调动顺序)。2.3.1 快速安装 WindowsCE 系统 说明:开发板出厂时内置的系统为 Linux,为了证明我们确实更新了系统,现在特意为它安装 WindowsCE 6,在后面的步骤,你还可以把它恢复到 Linux,请不必担心。 Step1: 把 光 盘 中 的 ”images” 文 件 夹 拷 贝 到 SD 卡 中 , 双 击 打开”imagesFriendlyARM.ini”文件,找到”OS=Linux”,并改为”OS=CE6”,保存修改,取出 SD卡插到开发板上。 注意:此处是把整个”images”文件夹拷贝到 SD 卡的根目录下,拷完后 SD 卡的内容 第 - 47 - 页
    • 大概是这样的: Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3: 屏住呼吸,上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4 开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕,整个过程不到 20 秒。 Step5: 把开发板 S2 开关设置为”NAND”启动,这时重启系统就可以看到 WindowsCE已经被安装好了。2.3.2 快速更新为 Android 系统 或许你对时下流行的 Android 更感兴趣,安装它也很容易,接上面的步骤,如下: Step1: 把 SD 卡插入电脑,双击打开”imagesFriendlyARM.ini”文件 Step2: 找到”OS=CE6”,并改为”OS=Android”,保存修改,取出 SD 卡插到开发板上。 Step3: 上电开机,同样的“滴”一声开始,同样的“滴滴”两声结束,更新完毕,整个过程不到 1 分钟。 Step4: 把开发板 S2 开关设置为”NAND”启动,这时重启系统就可以看到 Android 已经被安装好了。 注意:如果你听到急促的“滴滴”声,或者看四个 LED 并行闪烁,那说明你可能拼写出错了。 第 - 48 - 页
    • 2.3.3 快速恢复为 Linux 系统 步骤如下: Step1: 把 SD 卡插入电脑,双击打开”imagesFriendlyARM.ini”文件 Step2: 找到”OS=Android”,并改为”OS=Linux”,保存修改, 取出 SD 卡插到开发板上。 Step3: 上电开机,同样的“滴”一声开始,同样的“滴滴”两声后更新完毕,因为我们制作的 Linux 包含了 Qtopia-2.2.0,Qtopia4 和 QtE-4.7.0 三个图形系统以及硬解码播放器SMPlayer,所以映像文件比较大,烧写时间比较长,整个过程 1 分钟左右。 Step4: 把开发板 S2 开关设置为”NAND”启动,这时重启系统就可以看到 Linux 已经被安装好,并且出现了校正界面。 注意:如果你听到急促的“滴滴”声,或者看四个 LED 并行闪烁,那说明你可能拼写出错了2.3.4 在 SD 卡中直接运行 Ubuntu 系统(500M) 说明:因为 Ubuntu 运行时会占用比较多的内存,有两种方式可以达到比较好的效果: 把 Ubuntu 烧写到 Nand Flash 中运行,这需要使用 1GB 版本的 6410 平台 使用配置为 256M 内存的 6410 板,这样通过 SD 卡运行也会达到以上效果 如果你的配置为“256M 内存+1GB Nand Flash” ,无论烧写或运行,效果都和上面是一样的 在 SD 卡上执行运行 Ubuntu 的步骤如下: Step1: 把 SD 卡插入电脑,双击打开”imagesFriendlyARM.ini”文件 Step2: 找 到 ”OS=Linux” , 并 改 为 ”OS=Ubuntu” , 找 到 ”Action=Install” , 并 改 ;为”Action=Run”;保存修改,取出 SD 卡插到开发板上。 Step3: 上电开机,现在你就可以玩一玩 Ubuntu 了,你可以修改里面的设置并保存,它们不会丢失,除非你的卡丢失了;它们一般也不会破坏 NAND 里面的内容,除非有特殊的软件是专门针对 NAND 操作的。 注意:如果你听到急促的“滴滴”声,或者看四个 LED 并行闪烁,那说明你可能拼写出错了2.3.5 关于配置文件 FriendlyARM.ini 所有上面这些步骤,用起来太酷太简单了,这都是拜功能强大的 Superboot 所赐,现在你可以了解的更多一些,这其中的关键就是配置文件“FriendlyARM.ini”,它的内容如下: FriendlyARM.ini 配置文件内容 第 - 49 - 页
    • #This line cannot be removed. by FriendlyARM(www.arm9.net)#Notice: for the image filename include "ram128", "ram256" or "-s"## "ram128" means it is for the board with 128M RAM# "ram256" means it is for the board with 256M RAMCheckOneButton=NoAction=installOS= LinuxVerifyNandWrite=NoStatusType = Beeper| LEDCheckOneButton=NoAction=installOS= linuxVerifyNandWrite=NoStatusType = Beeper| LED#################### Linux #####################Linux-BootLoader = Linux/u-boot_nand-ram256.binLinux-Kernel = Linux/zImage_n43Linux-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200Linux-RootFs-InstallImage = linux/rootfs_qtopia_qt4.imgLinux-RootFs-RunImage = linux/rootfs_qtopia_qt4.ext3################### WindowsCE6 #################WindowsCE6-Bootloader= WindowsCE6NBOOT_N43-RAM256.nb0WindowsCE6-BootLogo = WindowsCE6bootlogo.bmpWindowsCE6-InstallImage = WindowsCE6NK_n43.binWindowsCE6-RunImage = WindowsCE6NK_n43.bin################### Android ####################Android-BootLoader = Android/u-boot_nand-ram256.binAndroid-Kernel = Android/azImage_n43Android-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200 第 - 50 - 页
    • Android-RootFs-InstallImage = Android/rootfs_android.ubiAndroid-RootFs-RunImage = Android/rootfs_android.ext3################### Ubuntu #####################Ubuntu-BootLoader = Ubuntu/u-boot_nand-ram256.binUbuntu-Kernel = Ubuntu/uzImage_n43Ubuntu-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200Ubuntu-RootFs-InstallImage = Ubuntu/rootfs_ubuntu.ubiUbuntu-RootFs-RunImage = Ubuntu/rootfs_ubuntu.ext3############### UserBin part #################UserBin-Image=WindowsCE/NK.nb0userBin-StartAddress=50100000 上面每项名称所代表的意思是很明显的,相信大部分人都可以看懂,如果你还不明白,可以看看如下的详细注释: 定义项(不分大小写) 说明: 不同配置的套餐,可能会有不同的默认设置CheckOneButton 当为"yes"时,需要在开机或复位之前按下板上的任意一个按键才执行后面的步骤; 当为"No"时,开机或者复位之后将自动执行后面的步骤,一般批量烧写时可设置为 "No" 默认为“No”Action 设置将要执行的动作,可以为 Install/Run/Null,分别代表: Install - 安装到 Nand Flash; Run – 直接从 SD 卡运行 Null - 无动作; 设置为空时,也表示 NULL 默认为“Install”OS 选择所要安装或运行的系统,可以为:Linux/WindowsCE6/Ubuntu/Android/UserBin ; 其中 UserBin 是指裸机程序或者单文件映像,如 uCos2, Rt-Thread 等 默认为“Linux”VerifyNandWrite 当为“yes”时,烧写完毕将会执行校验,这样会更安全; 当为“No”时,烧写完毕不执行校验,这样会更快; 默认为“No”,一般是不会有问题的。StatusType 烧写过程状态提示,可以为“LED” “Beeper” ,或者它们的组合(组合符号为“|”; ) 默认为“LED|Beeper”定义安装或运行 Linux 系统所用的文件映像或参数,可以包含目录,目录分割符号可以为“/”或“”Linux-BootLoader 指定 Linux 系统所用的 Bootloader 文件映像名 如:Linux-BootLoader=Linux/u-boot_nand-ram256.bin (默认)Linux-Kernel 指定 Linux 系统所用的内核文件映像名 如:Linux-BootLoader=Linux/zImage_n43(默认)Linux-CommandLine 设定 Linux 启动参数,针对不同的启动或烧写方式,需要设置不同的参数。 第 - 51 - 页
    • 当使用 yaffs2 文件系统时,推荐参数为(默认): Linux-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 当使用 UBIFS 文件系统时,推荐参数为: Linux-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200 当需要在 SD 中直接运行时,保留默认参数即可Linux-RootFs-InstallImage 指定安装 Linux 所用的文件系统映像名,可以为 yaffs2/UBIFS 格式。 我们这样定义: “img”结尾的映像文件代表 yaffs2 格式; “ubi”结尾的映像文件代表 UBIFS 格式; “ext3”结尾的映像文件代表 EXT3 格式(仅适用于从 SD 卡运行) 如:Linux-RootFs-RunImage=Linux/root-qtopia-qt4.img(默认)Linux-RootFs-RunImage 指定从 SD 卡中运行 Linux 所用的文件系统映像名。 如:Linux-RootFs-RunImage=Linux/root-qtopia-qt4.ext3(默认)定义安装或运行 WindowsCE6 所用的文件映像,可以包含目录,目录分割符号可以为“/”或“”WindowsCE6-Bootloader 指定 WindowsCE6 系统所用的 Bootloader 文件映像名 如:WindowsCE6NBOOT_N43-RAM256.nb0(默认)WindowsCE6-BootLogo 指定 WindowsCE6 启动画面所用的文件名,将被烧写到 Nand Flash 中,该文件为 普通的 bmp 格式,最大可为 2M 如:WindowsCE6-BootLogo=WinowsCE6BootLogo.bmp(默认)WindowsCE6-InstallImage 指定安装 WindowsCE6 所用的内核文件映像名,需要为 NK.bin 格式 如:WindowsCE6-InstallImage=WindowsCE6NK_N43.bin(默认)WindowsCE6-RunImage 指定从 SD 卡中运行 WindowsCE 时所用的文件系统映像,需要为 Nk.bin 格式。 如:WindowsCE6-RunImage=WindowsCE6NK_N43.bin(默认)定义安装或运行 Ubuntu 所用的文件映像,可以包含目录,目录分割符可以为“/”或“”注意: 可以使用带有压缩特性 UBIFS 格式把 Ubuntu 烧写到 1GB 的 Nand Flash 中运行;也可以使用 ext3 格式的系统映像文件直接复制到 SD 卡中运行。Ubuntu-BootLoader 指定 Ubuntu 系统所用的 Bootloader 文件映像名 如:Linux-BootLoader=Linux/u-boot_nand-ram256.bin (默认)Ubuntu-Kernel 指定 Ubuntu 系统所用的内核文件映像名 如:Ubuntu-BootLoader=Ubuntu/uzImage_N43(默认)Ubuntu-CommandLine 设定 Ubuntu 启动参数,针对不同的启动方式,需要设置不同的参数。 当使用 UBIFS 文件系统时,推荐参数为: Linux-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200(默认) 当需要在 SD 中直接运行时,保留默认参数即可Ubuntu-RootFs-RunImage 指定从 SD 卡中运行 Ubuntu 所用的文件系统映像名,一般该文件的大小是固定的 如:Ubuntu-RootFs-RunImage = Ubuntu/rootfs_ubuntu.ext3 (默认)定义安装或运行 Android 所用的文件映像,可以包含目录,目录分割符可以为“/”或“” 第 - 52 - 页
    • Android-BootLoader 指定 Android 系统所用的 Bootloader 文件映像名 如:Android-BootLoader=Android/ u-boot_nand-ram256.bin (默认)Android-Kernel 指定 Ubuntu 系统所用的内核文件映像名 如:Android-BootLoader=Android/azImage_N43(默认)Android-CommandLine 设定 Android 启动参数,针对不同的启动或烧写方式,需要设置不同的参数。 当使用 yaffs2 文件系统时,推荐参数为(默认): Android-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 当使用 UBIFS 文件系统时,推荐参数为: Android-CommandLine = root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200 当需要在 SD 中直接运行时,保留默认参数即可Android-RootFs-InstallImage 指定安装 Android 所用的文件系统映像名,可以为 yaffs2/UBIFS 格式。 我们这样定义: “img”结尾的映像文件代表 yaffs2 格式; “ubi”结尾的影响文件代表 UBIFS 格式; “ext3”结尾的映像文件代表 EXT3 格式(仅适用于从 SD 卡运行) 如:Android-RootFs-InstallImage = Android/rootfs_android.ubi (默认)Android-RootFs-RunImage 指定从 SD 卡中运行 Ubuntu 所用的文件系统映像名,一般该文件的大小是固定的 如:Android-RootFs-RunImage = Android/rootfs_android.ext3 默认)定义安装或运行单文件系统(裸机程序)所用的文件映像,可以包含目录,目录分割符号可以为“/”或“”注意:一般单文件系统需要指定执行时的内存地址,比如 NK.nb0 也是单文件系统,它的执行地址是UserBin-Image 指定安装或者运行单文件系统的映像文件名,可以为 bin, nb0 等格式; 当 Action 定义为”Install”时,它将被烧写到 Nand Flash 的 Block0 开始 的地方。UserBin-StartAddress 当 Action 定义为”Run”时,被指定的 SD 卡中的单文件系统映像将被加 载到指定的该内存地址执行 其他说明: 1. 你可以使用”#”字符来作为注释开头,Superboot 将不会执行”#”后面的内容;事实上,你可以直接使用任何关键字以外的字符串注释,而不需要”#”,它只是一种阅读习惯的标志而已。 2. 为了防止 Superboot 程序被非法拷贝使用, 我们规定配置文件的第一行内容不能被更改,也不能被删除,第一行的内容是: #This line cannot be removed. by FriendlyARM(www.arm9.net) 注意:最后的”)”后面不能有空格以及其他字符。2.4 BIOS 菜单功能介绍 使用 Superboot 作为 SD 卡中的 bootloader 启动系统时,在以下情况可以进入 USB 下 第 - 53 - 页
    • 载菜单模式: 1. SD 卡中“imagesFriendlyARM.ini”配置文件不存在或该文件名拼写错误 2. 当配置文件存在,且“CheckOneButtons=Yes”时,重启开发板没有按下任意一个 按键也会进入 USB 下载模式 此时串口将会出现下载所需的功能菜单,同时开发板上的 LED1 会不停的闪烁。菜单如下图所示(因版本更新,可能会有稍微不同的输出信息,请以实际为准)2.2.1 安装 USB 下载驱动 注意:此处安装的 USB 驱动仅在 BIOS 菜单模式下有用,它需要配合 dnw.exe 软件使用,进入 Linux 或者 WinCE 系统都不会使用到该驱动。如果你以前使用过本公司出品的mini2440/micro2440,则不需要重新安装它,因为它们使用的 USB 下载驱动都是完全相同的。 说明:安装 USB 下载驱动不需要连接开发板,该安装是独立进行的;该驱动也可以安装到 Windows7 系统中使用,但不支持 64-bit 版本的 Windows7 双击运行光盘中的“windows 平台工具usb 下载驱动 FriendlyARM USB DownloadDriver Setup_20090421.exe”安装程序,开始安装 USB 下载驱动。 第 - 54 - 页
    • 出现如图安装界面:点“下一步”继续: 第 - 55 - 页
    • 此时会跳出警告信息提示: 点“仍然继续”,USB 下载驱动会很快安装完毕,如图: 下面我们检测一下 USB 驱动: 首先设置开发板的拨动开关 S2 为 SDBOOT 启动,连接好附带的 USB 线和电源(可以不必连接串口线)。 打开电源开关 S1,如果您是第一次使用,WindowsXP 系统会提示您发现了新的 USB设备,并出现如图界面,在此选择“否,暂时不(T)” ,点“下一步”继续。 第 - 56 - 页
    • 出现如图提示,选择“自动安装软件”,点“下一步”继续出现如图警告界面,点“仍然继续” 第 - 57 - 页
    • 至此,第一次使用 USB 下载驱动的步骤就结束了。此时打开光盘中的 dnw.exe 下载软件,可以看到 USB 连接 OK,如图。在计算机设备管理器中,你也可以看到相关的 USB 下载驱动信息,如图: 第 - 58 - 页
    • 2.2.2 功能主菜单说明 (以上菜单内容请以实际版本为准) 功能[f]:对 Nand Flash 进行格式化,实际上就是擦除整片 Nand Flash。 功能[v]:通过 USB 下载 Linux BootLoader 到 Nand Flash 的 bootloader 分区, U-boot 如 功能[k]:通过 USB 下载 Linux 内核到 Nand Flash 的 kernel 分区 功能[y]:通过 USB 下载 yaffs2 文件系统映象到 Nand Flash 的 root 分区 功能[u]:通过 USB 下载 UBIFS 文件系统映象到 Nand Flash 的 root 分区 功能[a]:通过 USB 下载用户程序到 Nand Flash 中,一般这样的用户程序为 bin 格式的单系统映像文件,如 uCos2 或者裸机程序等 功能[n]:通过 USB 下载 WinCE 之启动程序 Nboot 到 Nand Flash 的 Block0 功能[l]:通过 USB 下载 WinCE 启动时的开机 Logo(bmp 格式的图片) 功能[w]:通过 USB 下载 WinCE 发行映象 NK.bin 到 Nand Flash 功能[b]:启动系统,如果烧入了 Linux 或者 Wince,执行该命令将自动辨认识别启动系统。 功能[s]:设置 Linux 启动参数 功能[i]:Superboot 的版本信息,并显示开发板 Nand Flash 实际容量大小。 第 - 59 - 页
    • 第三章 安装和更新或运行系统 我们曾经在 2440 开发板上首创了基于 USB 的下载安装嵌入式操作系统的方式,而6410 可以支持从 SD 卡启动,这意味着可以做更有趣、更酷的事情。比如让 BootLoader 支持FAT32 格式的文件系统,这样我们就可以从 SD 卡中直接读取映像文件,而不需要通过 USB下载,从而做到脱机安装或者运行各种系统。 在前面的章节,你或许已经体验过这种安装方式了,可以真真切切地体会到它极快,极简单的优势,当然我们还可以做的更酷一些,因为时间关系,我们将在以后改进升级。 其实有很多 mini2440 的用户已经习惯了 USB 下载安装,特别是当开发测试的时候,可能不需要来回插拔 SD 卡,所以,我们在 6410 的 Superboot 中也保留了此功能,它所使用的驱动和下载软件 dnw.exe 和 mini2440 是完全一样的,下面我们还是从 USB 一键下载安装系统开始介绍。3.1 使用 USB 一键安装系统 使用 Superboot 作为 SD 卡中的 bootloader 启动系统时,在以下情况可以进入 USB 下载模式: 1. SD 卡中“imagesFriendlyARM.ini”配置文件不存在或该文件名拼写错误 2. 当配置文件存在,且“CheckOneButtons=Yes”时,重启开发板没有按下任意一个 按键也会进入 USB 下载模式 此时串口将会出现下载所需的功能菜单,同时开发板上的 LED1 会不停的闪烁。菜单如下图所示(因版本更新,可能会有稍微不同的输出信息,请以实际为准) 第 - 60 - 页
    • 3.1.1 一键安装 Linux 系统(yaffs2 或 UBIFS 格式) 注意:本小节假定您已经安装好了 USB 驱动,并把开发板设置 SD 启动;因版本更新,以下截图有可能和实际稍微不同,请以实际为准。 说明:安装 Linux 所需要的二进制文件位于光盘的 imagesLinux 目录中,该目录中有详细的文件说明。 安装 Linux 系统主要有以下步骤: (1)对 Nand Flash 进行格式化,对应命令[f] (2)安装 Bootloader,对应命令[v] (3)安装内核文件,对应命令[k] (4)安装目标文件系统(yaffs2 或 ubifs 格式),对应命令[y]或[u] 下面以在 4.3”LCD 套餐上安装 UBIFS 格式的 Linux 系统为例, 介绍详细的安装步骤: Step1 : 格式化 Nand Flash 提示:格式化将会擦除 Nand Flash 里面的所有数据 连接好串口,打开超级终端,上电启动开发板,进入 BIOS 功能菜单,选择功能号[f]开始对 Nand Flash 进行分区,如图所示。 说明:有的 Nand Flash 分区时会出现坏区报告提示,因为 Superboot 会对坏区做检测记录,因此这将不会影响板子的正常使用。 提示:普通的 Nand Flash 并不能保证所有扇区都是完好的,如果有坏区,系统软件会对它们做检测处理,而不会影响整个软件系统的使用。保证完全无坏区的 Nand Flash 另有型号,而且订货周期长,价格昂贵,一般场合很少用到;其他品牌的 Nand Flash 也与此类似。 第 - 61 - 页
    • Step2: 安装 Bootloader 根据不同的开发板硬件配置,我们提供了不同的 u-boot 烧写文件(源代码中有相应的配置项): u-boot_sd-ram128.bin : 支持 SD 启动,适用于内存容量为 128M 的配置 u-boot_sd-ram256.bin : 支持 SD 启动,适用于内存容量为 256M 的配置 u-boot_nand-ram128.bin : 支持 NAND 启动,适用于内存容量为 128M 的配置 u-boot_nand-ram256.bin : 支持 NAND 启动,适用于内存容量为 256M 的配置 此处安装的 Bootloader 具体文件名为 U-boot_nand-ram256.bin(以下简称 u-boot.bin),它将被下载烧写到 Nand Flash 的 Block 0 位置,也就是起始位置;关于 U-boot 的配置和编译等,可以参考本手册 4.5 章节。 (1) 打开 DNW 程序,接上 USB 电缆,如果 DNW 标题栏提示[USB:OK],说明 USB连接成功,这时根据菜单选择功能号[v]开始下载 U-boot.bin 第 - 62 - 页
    • (2)点击“USB Port->Transmit/Restore”选项,并选择打开文件 u-boot.bin(该文件位于光盘的 images/linux 目录)开始下载。 (4)下载完毕,U-boot.bin 会被自动烧写入 Nand Flash 分区中,并返回到主菜单。 第 - 63 - 页
    • Step3: 安装 Linux 内核 不同的 LCD 型号套餐,需要使用不同的内核文件,在后面的步骤我们把 Linux 内核统称为 zImage,如下为光盘中的内核文件(位于 images/linux 目录)说明,如果你使用的 LCD型号没有被列出,请按照 4.6 章节的内容自行编译制作: zImage_n43 – 适用于 NEC4.3”LCD,分辨率为 480x272 zImage_a70 – 适用于 7 寸真彩屏,分辨率为 800x480 zImage_VGA1024x768 – 适用于分辨率输出为 1024x768 的 VGA 模块转接板 (1)在 BIOS 主菜单中选择功能号[k],开始下载 Linux 内核 zImage (2)点击“USB Port->Transmit”选项,并选择打开相应的内核文件 zImage(该文件位于光盘的 images/Linux 目录)开始下载。 第 - 64 - 页
    • (3) 下载完毕,BIOS 会自动烧写内核到 Nand Flash 分区中,并返回到主菜单,如图: Step4: 安装目标文件系统 说明:我们提供的目标文件系统包含 Qtopia-2.2.0,Qtopia4 和 QtE-4.7.0 三种嵌入式图形系统和 SMPlayer 播放器,并且包含了一些多媒体示例文件,因此映像文件比较大。 Superboot 可以支持 yaffs2 和 ubifs 两种格式的文件系统映像烧写,根据文件系统的压制类型,我们分别制作了以下几种映像文件,请根据自己的实际情况选择: rootfs_qtopia_qt4.img : 自动识别并支持 ARM 本身触摸屏接口, 或一线精准触摸,采用 yaffs2 格式压制的文件系统映像,可以使用[y]命令烧写到 Nand Flash 中运行使用 rootfs_qtopia_qt4.ubi : 自动识别并支持 ARM 本身触摸屏接口,或一线精准触摸,采用 UBIFS 格式压制的文件系统映像,可以使用[u]命令烧写到 Nand Flash 中运行使用 rootfs_qtopia_qt4.ext3 : 自动识别并支持 ARM 本身触摸屏接口,或一线精准触摸,采用 EXT3 格式压制的文件系统映像,可以直接复制到 SD 中运行使用 下面以烧写 UBIFS 格式的文件系统映像为例,介绍一下烧写的步骤,对于烧写 yaffs2格式的文件系统,你只要更改一下命令和烧写的文件名就可以了,不再赘述。 第 - 65 - 页
    • (1)在 BIOS 主菜单中选择功能号[u],开始下载 UBIFS 根文件系统映象文件 (2) 点 击 “ USB Port->Transmit/Restore ” 选 项 , 并 选 择 打 开 相 应 的 文 件 系 统 映 象 文 件rootfs-qtopia-qt4.ubi(该文件位于光盘的 images/Linux 目录)开始下载。 (3)下载完毕,BIOS 会自动烧写文件系统映像到 Nand Flash 分区中,同时 Linux 启动参数也被修改,以便启动 UBIFS 系统。 第 - 66 - 页
    • 注意:下载完毕,请拔下 USB 连接线,如果不取下来,有可能在复位或者启动系统的时候导致您的电脑死机。 在 BIOS 主菜单中选择功能号[b],将会启动系统。 如果您把开发板的启动模式设置为 Nand Flash 启动,则系统会在上电后自动启动。3.1.2 一键安装 WinCE 系统 使用 Superboot 作为 SD 卡中的 bootloader 启动系统时,在以下情况可以进入 USB 下载模式: 1. SD 卡中“imagesFriendlyARM.ini”配置文件不存在或该文件名拼写错误 2. 当配置文件存在,且“CheckOneButtons=Yes”时,重启开发板没有按下任意一个 按键也会进入 USB 下载模式 此时串口将会出现下载所需的功能菜单,同时开发板上的 LED1 会不停的闪烁。菜单如下图所示(因版本更新,可能会有稍微不同的输出信息,请以实际为准) 注意:本小节假定您已经安装好了 USB 驱动,并把开发板设置 SD 启动;因版本更新,以下截图有可能和实际稍微不同,请以实际为准 第 - 67 - 页
    • 说明: 安装 WinCE6 所需要的二进制文件位于光盘的“imagesWindowsCE6”目录中,以下简称 WinCE6 安装 WinCE6 主要有以下步骤: (1)格式化 Nand Flash,对应命令[f] (2)安装 Bootloader ,对应命令[n] (3)安装 BootLogo(bmp 格式),对应命令[l] (4)安装 WindowsCE 内核映象,对应命令[w] 提示:请先连接好串口,打开超级终端,上电启动开发板,进入 BIOS 功能菜单,下面以 4.3”LCD 套餐为例,介绍详细的安装步骤: Step1 : 格式化 Nand Flash 提示:格式化将会擦除 Nand Flash 里面的所有数据 连接好串口,打开超级终端,上电启动开发板,进入 BIOS 功能菜单,选择功能号[f]开始对 Nand Flash 进行分区,如图所示。 说明:有的 Nand Flash 分区时会出现坏区报告提示,因为 Superboot 会对坏区做检测记录,因此这将不会影响板子的正常使用。 普通的 Nand Flash 并不能保证所有扇区都是完好的,如果有坏区, 系统软件会对它们做检测处理,而不会影响整个软件系统的使用。保证完全无坏区的 Nand Flash 另有型号,而且订货周期长,价格昂贵,一般场合很少用到;其他品牌的 Nand Flash 也与此类似。 第 - 68 - 页
    • Step2: 安装 Bootloader 在 WinCE 系统中, 我们使用的 Bootloader 为 Nboot,因为 Nboot 并不能自动识别 LCD类型,根据不同型号的 LCD,和不同容量的内存配置,有不同的映像文件(源代码中有相应的配置项)。本手册第五章介绍了如何修改 LCD 类型,及如何编译 Nboot。 (1)打开 DNW 程序,接上 USB 电缆,如果 DNW 标题栏提示[USB:OK],说明 USB连接成功,这时根据菜单选择功能号[n]开始下载 Nboot(在此为统称).nb0 (2)点击“USB Port->Transmit”选项,并选择打开文件 Nboot_n43.nb0(该文件位于光盘的imagesWindowsCE6 目录)开始下载。 因为 Nboot 需要加载开机画面,因此针对不同的 LCD 型号和内存容量,有不同的Nboot 烧写文件,如下说明: 第 - 69 - 页
    • 适用于 128M 内存大小的 6410 开发板平台 NBOOT_N43-RAM128.nb0 : 适合于 NEC 4.3"LCD,带开机 LOGO 显示和进度条 NBOOT_A70-RAM128.nb0 : 适合于群创 7"LCD,带开机 LOGO 显示和进度条 NBOOT_VGA1024x768-RAM128.nb0 : 适 用 于 分 辨 率 输 出 为 1024x768 的 专 业 LCD2VGA 转接板(由本公司设计生产) 适用于 256M 内存大小的 6410 开发板平台 NBOOT_N43-RAM256.nb0 : 适合于 NEC 4.3"LCD,带开机 LOGO 显示和进度条 NBOOT_A70-RAM256.nb0 : 适合于群创 7"LCD,带开机 LOGO 显示和进度条 NBOOT_VGA1024x768-RAM256.nb0 : 适 用 于 分 辨 率 输 出 为 1024x768 的 专 业 LCD2VGA 转接板(由本公司设计生产) (4)下载完毕,BIOS 会自动把 Nboot_n43.nb0 烧写到 Nand Flash 的 Block 0 Step3: 下载烧写 BootLogo Bootlogo 是开机上电后由 Nboot 加载显示的, 它必须是 24bit 真彩 bmp 图片(一般 bmp都是真彩的),并且不能大于 2M,分辨率为 1024x768 的 24 位真彩图片刚好为 2M。 (1)在 BIOS 主菜单中选择功能号[l],开始下载 bmp 图片作为 BootLogo(光盘中已经准备好一个 BootLogo.bmp 图片) (2) 点击“USB Port->Transmit/Restore”选项,并选择文件 bootlogo.bmp 第 - 70 - 页
    • (3) 下载完毕,BIOS 会自动烧写 bootlogo.bmp 到 Nand Flash 中,并返回到主菜单。Step3: 安装 wince 内核映象 (1)在 BIOS 主菜单中选择功能号[w],开始下载 WINCE 内核 (2) 点击“USB Port->Transmit/Restore”选项,并选择打开相应的内核文件 NK.bin(该文件位于光盘的“imagesWindowsCE6”目录)开始下载。 光盘中的 WindowsCE 内核文件说明: NK_n43.bin – 支持 ARM 本身自带的触摸屏控制器,适用于 NEC4.3”LCD,分辨率为 480x272 NK_a70.bin –支持 ARM 本身自带的触摸屏控制器,适用于 7 寸真彩屏,分辨率为 800x480 NK_VGA1024x768.bin –支持 ARM 本身自带的触摸屏控制器,适用于分辨率输出为 1024x768 的 VGA 模块转接板 NK_n43-i.bin – 支持一线精准触摸,适用于 NEC4.3”LCD,分辨率为 480x272 NK_a70-i.bin –支持一线精准触摸,适用于 7 寸真彩屏,分辨率为 800x480 第 - 71 - 页
    • 下载完毕,BIOS 会开始格式化 Nand Flash,并依次创建分区烧写 WinCE 内核文件,烧写完毕,会自动启动 WinCE 系统,整个过程串口信息如下图:3.1.3 一键安装 Android(yaffs2 或 UBIFS 格式) 注意:本小节假定您已经安装好了 USB 驱动,并把开发板设置 SD 启动;因版本更新,以下截图有可能和实际稍微不同,请以实际为准。 说明:安装 Android 所需要的二进制文件位于光盘的 images/Android 目录中。 安装 Android 系统主要有以下步骤: (1)对 Nand Flash 进行格式化,对应命令[f] (2)安装 Bootloader,对应命令[v] (3)安装内核文件,对应命令[k] (4)安装目标文件系统(yaffs2 或 ubifs 格式),对应命令[y]或[u] 第 - 72 - 页
    • 下面以在 4.3”LCD 套餐上安装 UBIFS 格式的 Android 系统为例,介绍详细的安装步骤: Step1 : 格式化 Nand Flash 提示:格式化将会擦除 Nand Flash 里面的所有数据 连接好串口,打开超级终端,上电启动开发板,进入 BIOS 功能菜单,选择功能号[f]开始对 Nand Flash 进行分区,如图所示。 说明:有的 Nand Flash 分区时会出现坏区报告提示,因为 Superboot 会对坏区做检测记录,因此这将不会影响板子的正常使用。 普通的 Nand Flash 并不能保证所有扇区都是完好的,如果有坏区, 系统软件会对它们做检测处理,而不会影响整个软件系统的使用。保证完全无坏区的 Nand Flash 另有型号,而且订货周期长,价格昂贵,一般场合很少用到;其他品牌的 Nand Flash 也与此类似。 Step2: 安装 Bootloader 根据不同的开发板硬件配置,我们提供了不同的 u-boot 烧写文件(源代码中有相应的配置项): u-boot_sd-ram128.bin : 支持 SD 启动,适用于内存容量为 128M 的配置 u-boot_sd-ram256.bin : 支持 SD 启动,适用于内存容量为 256M 的配置 u-boot_nand-ram128.bin : 支持 NAND 启动,适用于内存容量为 128M 的配置 u-boot_nand-ram256.bin : 支持 NAND 启动,适用于内存容量为 256M 的配置 此处安装的 Bootloader 具体文件名为 u-boot_nand-ram256.bin (以下简称 U-boot.bin),它将被下载烧写到 Nand Flash 的 Block 0 位置,也就是起始位置;关于 U-boot 的配置和编译等,可以参考本手册第六章。 (1) 打开 DNW 程序,接上 USB 电缆,如果 DNW 标题栏提示[USB:OK],说明 USB连接成功,这时根据菜单选择功能号[v]开始下载 U-boot.bin 第 - 73 - 页
    • (2)点击“USB Port->Transmit/Restore”选项,并选择打开文件 u-boot.bin(该文件位于光盘的 images/Android 目录)开始下载。 (4)下载完毕,U-boot.bin 会被自动烧写入 Nand Flash 分区中,并返回到主菜单。 第 - 74 - 页
    • Step3: 安装 Android 内核 不同的 LCD 型号套餐,需要使用不同的内核文件,在后面的步骤我们把 Android 内核统称为 azImage,如下为光盘中的内核文件(位于 images/Android 目录)说明: azImage_n43 – 适用于 NEC4.3”LCD,分辨率为 480x272 azImage_a70 – 适用于 7 寸真彩屏,分辨率为 800x480 (1)在 BIOS 主菜单中选择功能号[k],开始下载内核 azImage (2)点击“USB Port->Transmit”选项,并选择打开相应的内核文件 azImage(该文件位于光盘的 images/Android 目录)开始下载。 第 - 75 - 页
    • (3) 下载完毕,BIOS 会自动烧写内核到 Nand Flash 分区中,并返回到主菜单。 Step4: 安装目标文件系统 运行于 SD 卡中的 Superboot 可以支持 yaffs2 和 ubifs 两种格式的文件系统映像烧写,根据文件系统的压制类型和是否支持串口触摸屏控制器, 我们分别制作了以下几种映像文件,请根据自己的实际情况选择: rootfs_android.img : 自动识别并支持 ARM 本身触摸屏接口,或一线精准触摸,采用 yaffs2 格式压制的文件系统映像,可以使用[y]命令烧写到 Nand Flash 中运行使用 rootfs_android.ubi : 自动识别并支持 ARM 本身触摸屏接口,或一线精准触摸,采用 UBIFS 格式压制的文件系统映像,可以使用[u]命令烧写到 Nand Flash 中运行使用 rootfs_android.ext3 : 自动识别并支持 ARM 本身触摸屏接口,或一线精准触摸,采用 EXT3 格式压制的文件系统映像,可以直接复制到 SD 中运行使用 说明:UBIFS 文件系统具有一定的压缩性,因为映像文件要比 yaffs2 小一些。下面以烧写 UBIFS 格式的文件系统映像为例,介绍一下烧写的步骤,对于烧写 yaffs2 格式的文件系统,你只要更改一下命令和烧写的文件名就可以了,不再赘述。 (1)在 BIOS 主菜单中选择功能号[u],开始下载 UBIFS 根文件系统映象文件 第 - 76 - 页
    • (2) 点 击 “ USB Port->Transmit/Restore ” 选 项 , 并 选 择 打 开 相 应 的 文 件 系 统 映 象 文 件rootfs_android.ubi(该文件位于光盘的 images/Android 目录)开始下载。 (3)下载完毕, BIOS 会自动烧写文件系统映像到 Nand Flash 分区中,同时内核启动参数也被修改,以便启动 UBIFS 系统。 第 - 77 - 页
    • 注意:下载完毕,请拔下 USB 连接线,如果不取下来,有可能在复位或者启动系统的时候导致您的电脑死机。 在 BIOS 主菜单中选择功能号[b],将会启动系统。 如果您把开发板的启动模式设置为 Nand Flash 启动,则系统会在上电后自动启动。3.2 使用 SD 卡脱机快速安装系统 要通过 SD 卡脱机烧写系统, 必须先使用 SD-Flasher 工具把 Superboot 烧写到 SD 中(见2.2 章节),并把必要的系统文件复制到 SD 卡的 images 目录中才可以,其实你只要把光盘中的 images 目录直接复制到 SD 卡就可以了,里面已经包含了各个系统的安装文件,如果你打算烧写自己制作生成的文件,可以使用替换同名文件的方法,或者更改配置文件中的相应文件名。 Superboot 可以支持普通 SD 卡高速大容量 SDHC 卡启动系统。下面我们以使用光盘中的现成文件为例,介绍如何快速烧写各个系统。 注意:请先把光盘中的 images 目录复制到已经烧写好 Superboot 的 SD 卡中,以下安装过程不需要连接串口线和 USB,只要一张 SD 卡和电源就可以了。3.2.1 快速安装 Linux(yaffs2 格式) Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 Linux 系统相关的定义:定义项 修改为(所有定义均不分大小写)Action InstallOS LinuxLinux-Kernel Linux/zImage_n43(或自己编译出的内核映像) 第 - 78 - 页
    • Linux-CommandLine root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200Linux-RootFs-InstallImage linux/rootfs_qtopia_qt4.img说明:特别注意红色部分不要写错;zImage 后面的尾缀代表不同型号的 LCD,以下是 images/Linux 目录下各个内核映像文件的说明: zImage_x35 – 适用于 Sony 3.5”LCD,分辨率为 240x320 zImage_n43 – 适用于 NEC4.3”LCD,分辨率为 480x272 zImage_a70 – 适用于 7 寸真彩屏,分辨率为 800x480 zImage_L80 – 适用于 Sharp 8”(或兼容)LCD,分辨率为 640x480 zImage_VGA1024x768 – 适用于分辨率输出为 1024x768 的 VGA 模块转接板 zImage_VGA800x600 – 适用于分辨率输出为 800x600 的 VGA 模块转接板 zImage_VGA640x480 – 适用于分辨率输出为 640x480 的 VGA 模块转接板 zImage_EZVGA800x600 – 适用于简易 VGA 转接板,输出分辨率为 800x600 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.2.2 快速安装 Linux(UBIFS 格式) Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 Linux 系统相关的定义:定义项 修改为(所有定义均不分大小写)Action InstallOS LinuxLinux-Kernel Linux/zImage_n43 (或自己编译出的内核映像)Linux-CommandLine root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200Linux-RootFs-InstallImage linux/rootfs_qtopia_qt4.ubi说明:特别注意红色部分不要写错;zImage 后面的尾缀代表不同型号的 LCD,以下是 images/Linux 目录下各个内核映像文件的说明: zImage_x35 – 适用于 Sony 3.5”LCD,分辨率为 240x320 zImage_n43 – 适用于 NEC4.3”LCD,分辨率为 480x272 zImage_a70 – 适用于 7 寸真彩屏,分辨率为 800x480 zImage_L80 – 适用于 Sharp 8”(或兼容)LCD,分辨率为 640x480 zImage_VGA1024x768 – 适用于分辨率输出为 1024x768 的 VGA 模块转接板 zImage_VGA800x600 – 适用于分辨率输出为 800x600 的 VGA 模块转接板 zImage_VGA640x480 – 适用于分辨率输出为 640x480 的 VGA 模块转接板 zImage_EZVGA800x600 – 适用于简易 VGA 转接板,输出分辨率为 800x600 第 - 79 - 页
    • Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.2.3 快速安装 WindowsCE6 说明:以下步骤以安装 4.3”LCD 套餐系统为例 Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 WindowsCE系统相关的定义:定义项 修改为(所有定义不分大小写)Action InstallOS WindowsCE6 (也可以为”CE6”或”Wince6”)WindowsCE6-Bootloader WindowsCE6 NBOOT_N43-RAM256.nb0WindowsCE6-BootLogo WindowsCE6bootlogo.bmp(或自定义的 bmp 文件)WindowsCE6-InstallImage WindowsCE6NK_N43-i.bin (或自己编译出的内核映像)说明:烧写文件的尾缀代表不同型号的 LCD,更详细的文件说明见“光盘imagesWindowsCE6”目录下的说明文件 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.2.4 快速安装 Android(yaffs 格式) Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 Android系统相关的定义:定义项 修改为(所有定义均不分大小写)Action InstallOS AndroidAndroid-Kernel Android/azImage_n43( 或 azImage_a70 或 自己编译出的内核映像)Android-CommandLine root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200Android-RootFs-InstallImage Android/rootfs_android.img说明:azImage 后面的尾缀代表不同型号的 LCD,请特别注意红色部分不要写错 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂 第 - 80 - 页
    • 鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.2.5 快速安装 Android(UBIFS 格式) Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 Android系统相关的定义:定义项 修改为(所有定义均不分大小写)Action InstallOS AndroidAndroid-Kernel Android/azImage_n43 (或自己编译出的内核映像)Android-CommandLine root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200Android-RootFs-InstallImage Android/rootfs_android.ubi说明:特别注意红色部分不要写错;azImage 后面的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesAndroid”目录下的说明文件。 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.2.6 快速安装 Ubuntu(UBIFS 格式) 注意:安装 Ubuntu 需占用 500M 多 Flash 存储空间,因此必须使用 Nand Flash 容量为 1GB 的开发板平台。 Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改安装 Ubuntu 系统相关的定义:定义项 修改为(所有定义均不分大小写)Action InstallOS UbuntuAndroid-Kernel Ubuntu/uzImage_n43 (或自己编译出的内核映像)Android-CommandLine root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200Android-RootFs-InstallImage Ubuntu/rootfs_ ubuntu.ubi说明:特别注意红色部分不要写错;azImage 后面的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesUbuntu”目录下的说明文件。 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡 Step3:上电开机,这时你可以听到开发板上蜂鸣器“滴”的一声,同时板上的 LED4开始点亮并闪烁 第 - 81 - 页
    • Step4: 静听秒表跳动的声音,可以注意到 LED3,2,1 逐个开始闪烁亮起,直到听到蜂鸣器“滴滴”两声,所有 LED 满格亮起,随后不停的跑马跳动,就说明系统已经烧写完毕。3.3 从 SD 卡直接运行各个系统 要通过 SD 卡脱机运行系统, 必须先使用 SD-Flasher 工具把 Superboot 烧写到 SD 中(见2.2 章节),并把必要的系统文件复制到 SD 卡的 images 目录中才可以,其实你只要把光盘中的 images 目录直接复制到 SD 卡就可以了,里面已经包含了各个系统的运行文件,如果你打算运行自己制作生成的文件,可以使用替换同名文件的方法,或者更改配置文件中的相应文件名。 Superboot 可以支持普通 SD 卡高速大容量 SDHC 卡启动系统。下面我们以使用光盘中的现成文件为例,介绍如何快速通过 SD 卡运行各个系统。 注意:请先把光盘中的 images 目录复制到已经烧写好 Superboot 的 SD 卡中,以下安装过程不需要连接串口线和 USB,只要一张 SD 卡和电源就可以了。 以下步骤以 4.3”LCD 套餐为例。3.3.1 直接运行 SD 卡中的 Linux Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改运行 Linux 系统相关的定义:定义项 修改为(所有定义均不分大小写)Action RunOS LinuxLinux-Kernel Linux/zImage_n43( 或自己编译出的内核映像)Linux-RootFs-RunImage Linux/rootfs_qtopia_qt4.ext3 说明:特别注意红色部分不要写错;此时无需关心 CommandLine 参数;zImage 后面的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesLinux”目录下的说明文件。 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡,上电开机即可。3.3.2 直接运行 SD 卡中的 WindowsCE Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改运行 WinCE6系统相关的定义:定义项 修改为(所有定义均不分大小写)Action RunOS WindowsCE6(也可以为”CE6”或”WinCE6”)WindowsCE6-InstallImage WindowsCE6NK_n43-i.bin (或自己编译出的内核映像) 第 - 82 - 页
    • 说明:直接从 SD 卡运行 WinCE6 不需要指定 Bootloader,目前从 SD 卡启动尚不支持开机画面;NK 的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesWindowsCE6”目录下的说明文件,另外,该目录下还有个”en”目录,它里面存放的是英文版的烧写文件。 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡,上电开机即可。3.3.3 直接运行 SD 卡中的 Android 说明:因为内存容量的限制,目前使用 128M DDR RAM 配置的开发板,从 SD 卡直接运行 ext3 格式的 Android 系统,一般无法顺利执行,需要使用 256M DDR RAM 配置的开发板则没有这样的问题,因此建议把 Android 烧写到 Nand Flash 中运行。 Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改运行 Android系统相关的定义:定义项 修改为(所有定义均不分大小写)Action RunOS AndroidAndroid-Kernel Android/azImage_n43( 或 azImage_a70 或 自己编译出的内核映像)Android-RootFs-RunImage Android/rootfs_android.ext3 说明:特别注意红色部分不要写错;此时无需关心 CommandLine 参数;azImage 后面的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesAndroid”目录下的说明文件 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡,上电开机即可。3.3.4 直接运行 SD 卡中的 Ubuntu 说明:使用 256M DDR RAM 内存配置的开发板, SD 卡运行 Ubuntu 速度会更快一 从些。 Step1: 打开 SD 卡中 images 目录下的配置文件 FriendlyARM.ini,修改运行 Ubuntu 系统相关的定义:定义项 修改为(所有定义均不分大小写)Action RunOS UbuntuUbuntu-Kernel Ubuntu/uzImage_n43( 或自己编译出的内核映像)Ubuntu-RootFs-RunImage Ubuntu/rootfs_ubuntu.ext3 说明:特别注意红色部分不要写错;此时无需关心 CommandLine 参数;uzImage 后面的尾缀代表不同型号的 LCD,更详细的说明见“光盘imagesUbuntu”目录下的说明文件 Step2: 把开发板 S2 开关设置为”SDBOOT”,并插入 SD 卡,上电开机即可。 第 - 83 - 页
    • 第四章 Linux 开发指南 在一切开始之前,我们建议初学者先按照本章 4.1 和 4.2 步骤测试本开发板的各项功能,它们的操作都很简单,对于 4.1 一节的内容,你甚至只看目录就可以逐项验证,对于 4.2一节,则需要使用一条串口线连接到电脑的串口终端来操作。这些都是为了先让你获取一个感性的认识,并熟悉一些常见的命令和设置,为以后做开发做好准备。 可以说我们所做的各项图形界面测试程序,都十分易于操作,我们正是考虑了用户的体验,让你觉得使用起来很自然,其中有很多都是我们精心设计的,比如 USB 摄像头动态预览并拍照、串口助手、按键测试、屏幕旋转后的效果、Qtopia-2.2.0,Qtopia4 和 QtE-4.7.0 的无缝切换等。这些不仅仅涉及到技术的实现,而且与用户体验密切相关,希望对你的学习和开发起到抛砖引玉的作用。4.1 初试 Linux 之图形界面 Qtopia-2.2.0,Qtopia4 和 QtE-4.7.0 系统 说明:Qtopia 2.2.0 是奇趣公司基于 Qt/Embedded 2.3 库开发的 PDA 版(也是最终版)图形界面系统;自从 Qtopia 2.2.0 之后,该公司就再也没有提供 PDA 版的图形系统了。最新版的 Qtopia 只有手机版本(Qt Extended 4.4.3),而且 Qt 公司自从 2009.3 开始已经停止了所有Qtopia PDA 版和手机版图形系统的授权,但依然继续开发 Qt/Embedded (简称 QtE)库系统。 QtE的最新版本请到 http://qt.nokia.com/查看,本开发板所移植的版本为QtE-4.7.0。 Qt Extended 4.4.3 是奇趣公司手机桌面的最高版本,也是该系列产品的最终版,我们称之为 Qtopia4 要编译 Qtopia-2.2.0,请参考 4.11 章节 要编译 QtE-4.7.0,请参考 4.12 章节 要编译 Qtopia4,请参考 4.13 章节 出厂之前,本开发板一般都预装了 Linux+Qtopia 2.2.0+Qtopia4+QtE-4.7.0+SMPlayer播放器图形界面,它包含了很多实用的小程序,拿到开发板后,你只要接上电源并开机就可以进行各项功能测试了,这不需要和电脑进行任何连接。 注意:本小节内容的介绍均基于开发板 + 4.3” LCD 的屏幕截图 现在让我们先睹为快吧,下面是开机时的界面: 第 - 84 - 页
    • 4.1.1 触摸屏校正 说明:如果按照下面的步骤没有校正准确,可以先删除开发板触摸屏参数文件/etc/pointercal,再重启系统;或者重新安装整个系统;也可以进入系统后接上 USB 鼠标,在“设置”中打开“重校正” 。 在两种情况下可以出现触摸屏校正界面: 1. 如果你重新安装了 Linux 系统,重启系统时首先出现如下触摸校正界面,依屏幕提示点击屏幕任何地方开始进行校正;然后依照屏幕提示,使用触摸屏逐步点击“十”型交叉点即可,如果你校正的不准确,将会进行循环校正。 图中红色圈内表明当前使用了一线触摸设备:/dev/touchscreen-1wire,如果为 ARM 本身自带的触摸屏接口,则会为:/dev/touchscreen,如下图: 第 - 85 - 页
    • 2. 进入系统后,点“开始->设置”切换到“设置”界面,再点“重校正”图标也会出现校正界面;然后依照屏幕提示,使用触摸屏逐步点击“十”字型交叉点即可。4.1.2 主要界面说明 进入 Qtopia 系统后主界面如下图所示: 可以看到 Qtopia 系统界面上方有五个图标, 它们代表了五类程序/文档,单击任何一个图标都可以进入相应的子类界面,它们都是类似的。 另外点系统界面左下角的“开始”图标,也可以出现五个子类选择菜单,它们和系统界面上方的图标是对应的。 五个子类界面分别如下图所示,根据标题名称,其意自明,其中“友善之臂”组中所有程序均为友善之臂公司自主开发或移植而来,仅供测试使用,其他子类中程序或为系统自带。 第 - 86 - 页
    • 4.1.3 硬解码播放器 SMPlayer 6410 具有强大的多媒体处理(MFC)能力,支持硬解码播放 MPEG4,H.264/H.263 等格式的视频,最大可达 720x480 30fps 或 720x576 25fps,配合 Post Processor 协处理,可以完美实现缩小或放大播放,利用此特性可以在全屏播放时达到非常好的效果。 Mplayer 是一款跨平台完全开源的播放器,依赖于各种开源的音视频解码库,可以播放很多格式的视频文件, 并且支持输出到多种显示设备, X11, Framebuffer, 如 SDL,DFB 等,我们移植改进的这个版本就是基于 Framebuffer。 另外, Mplayer 本身并不具备图形界面操作, 但有很多前台界面可用, 比如 SMPlayer,KMPlayerr,KPlayer 等,此处采用的就是 SMPlayer,它是基于 Qt4.x 库(我们采用的是最新的QtE-4.7.0)开发的一个开源播放器界面,更多的说明可以到它们的官方网站查看。 Mplayer的官方网址:http://www.mplayerhq.hu SMPlayer的官方网址:http://smplayer.sourceforge.net/ 我们提供的 Linux-2.6.36 内核已经包含了 6410 多媒体硬解码驱动,这是由三星原厂提供的,为了把 6410 的多媒体特性发挥出来,我们把 MFC 应用层库集成到 Mplayer 中,并结合 SMPlayer,从而形式了一个功能强大的 Linux 版本的图形界面硬解码播放器。无论是在4.3”LCD,还是在 7”LCD,甚至是更大分辨率的显示器上,都可以实现流畅播放 MPEG4,H.264/H.263 视频,下面是它的简单使用说明。 提示:附带的“光盘 B”中带有几个测试视频,请把它们先复制到 SD 卡中,把 SD卡插入开发板,它会自动挂载到“/sdcard”目录 在“友善之臂”程序组中,点“SMPlayer”图标,即可打开播放器,如图 第 - 87 - 页
    • 点“Open”或工具栏的 按钮开始选择要播放的文件,如图,找到“sdcard”目录选择要播放的视频文件,用触摸笔双击或者点“open”按钮打开它,如图,这时,影片就开始自动全屏播放了,如图 第 - 88 - 页
    • 在播放过程中,可以单击屏幕,就退回到播放器界面,视频会暂停播放,并把此时的帧面缩小显示到播放器中,如图。 此时,你可以进行调节音量,进度,缩放等操作,在此就不再一一截图说明了,点右上角的 或者菜单的“Open-Quit”可以退出播放器,返回到 Qtopia2 系统中。 注意:在视频播放的前 5 秒钟,画面左上角会显示“FriendlyARM”字符,以说明该版本是由友善之臂移植改进的,如图,如果您需要进一步定制该播放器,请和我们联系。4.1.4 播放 Mp3 在子类“应用程序”中单击“音乐”图标,出现播放器界面,在“Audio”列表中选择一首 mp3 歌曲文件,再点上方的“播放”按钮,开始播放 Mp3 文件。 说明:Audio 列表中的音频文件对应“Documents”子类中的所有有效音频文件。 提示:也可以在“Documents”中直接点击相应的文件名开始播放。 第 - 89 - 页
    • 4.1.5 播放视频 在子类“应用程序”中单击“视频”图标,出现播放器界面,在“Video”列表中选择一个视频文件,再点上方的“播放”按钮,开始播放视频,这里的播放器是 Qtopia 本身自带的,它只有软解码的能力,因此无法流畅播放 H.264/H.263/Mpeg4 等格式的视频。 说明:Video 列表中的音频文件对应“Documents”子类中的所有有效视频文件。 提示:也可以在“Documents”中直接点击相应的文件名开始播放。4.1.6 图片浏览 在子类“应用程序”中单击“图片”图标打开图片浏览器,首先映入眼帘的是“文档”组中各个图片的缩略图,如果你插入了含有图片的 SD 卡或者优盘,其中的图片文件也会一并全部显示出来。 第 - 90 - 页
    • Qtopia 2.2.0 系统的图片浏览器比以前的 Qtopia 1.7.0 有了很多改善,它可以对图片进行简单的编辑,而且使用起来也更方便。4.1.7 自动装载 SD 卡和优盘 在任何界面状态下, 插入普通或者高速 SD 卡(实测最大容量为 32G)或者 USB 移动存储器,稍等片刻,即可在任务栏右下角出现移动存储的图标出现,本系统支持二者同时挂载,点移动存储器的图标,出现如图所示,这时可以像在 Windows 中一样安全移除它们。 MMC/SD 卡或者优盘中的所有文件会在“文档”组中全部显示出来,并且支持中文文件名显示,它是不显示目录名称的,如果你的文件太多,那么其列表也是相当可观的。 说明: 支持 MMC/SD 卡或者优盘自动挂载是通过友善之臂开发的一个 Qtopia 2.2.0 插件 实 现 的 , 目 前 它 仅 识 别 MMC/SD 卡 或 优 盘 的 第 一 个 分 区 , 并 且 格 式 为 常 见 的VFAT/FAT32/FAT16,如果你的优盘或者 SD 卡不能识别,请检查是否为 VFAT/FAT32/FAT16格式。 此时点“应用程序”组的“系统信息”->“Storage”可以看到 SD 卡或优盘的容量信息,如图: 第 - 91 - 页
    • 4.1.8 计算器 在子类“应用程序”中单击“计算器”图标,出现计算器界面,用户可以通过下拉列表选择 Simple, Fraction, Scientific, Conversion 等类型的计算器,如图:4.1.9 命令终端 “终端” Linux 系统中通常用到的交互操作界面, 是 通过“终端”可以运行很多 Linux命令,查看系统信息等等。 有很多途径可以设置或打开一个“终端” : 在 Linux 系统启动的时候,可以把终端指向串口输出,这样就形成了串口终端,它的输入和输出都是通过串口进行的,无需图形界面,这是嵌入式 Linux 开发中最常用的方式。 在系统启动的时候,也可以把终端输出指向图形显示设备(如 LCD 或者 CRT 等) ,而把键盘设定为输入,这样就形成了一套独立的“输入输出系统” ,它无需借助另外的 PC 即可操作。 当使用了图形显示设备,并且系统软件中增加了图形用户界面(GUI)时,就可以建立一个基于 GUI 系统的“命令终端窗口” ,这时既可以通过标准的实体硬件键盘进行交互,也可以通过虚拟的“软键盘”进行交互,此处所讲的就是这种终端方式。 在子类“应用程序”中单击“终端”图标,出现命令终端窗口界面,此时可以接上USB 键盘(不要在启动之前接 USB 键盘,否则不能使用)或者使用屏幕下方的软键盘输入 Linux 第 - 92 - 页
    • 命令,你还可以点 Option 菜单中的某些选项进行设置,以改变显示的模式,如图。4.1.10 文件浏览器 在“友善之臂”程序组中点“文件浏览器”图标打开它,如图: 通过文件浏览器,你可以浏览管理开发板中的目录及文件。 说明:Qtopia-2.2.0 原始版本是不带文件浏览器的,我们移植了 Qtopia-1.7.0 中自带的文件管理器,它们的功能和界面是完全相同的。4.1.11 网络设置 在子类“友善之臂”程序中,点“网络设置”图标打开相应的界面,如图: 第 - 93 - 页
    • 在这里,你可以进行常见的网络参数设置: 静态的 IP 地址 – 出厂缺省为 192.168.1.230 子网掩码 – 出厂缺省为 255.255.255.0 网关 – 出厂缺省为 192.168.1.1 DNS 解析服务器 IP – 出厂缺省为 192.168.1.1,和网关地址相同 网卡的 MAC 地址 – 此地址由驱动程序通过软件设定,是可以修改的,本开发板 出厂时所有 MAC 地址都是相同的,为 08:90:90:90:90:90 点“Save”按钮可以保存以上参数,并马上生效,重新启动开发板也可以保留此次的更改设定,与该设置程序相对应的参数文件为/etc/eth0-setting 说明:/etc/eth0-setting 参数文件在系统重装后是不存在的,点“Save”按钮会自动生成;开发板出厂之前需经过测试,因此这个文件是存在的。另外,命令终端的 ifconfig 程序所作的 IP 地址更改对该配置文件没有影响。 其实,Qtopia 本身带有一个网络设置的程序,但配置界面有些复杂,有用户反应其设置也不能有效,为了保持 Qtopia 系统的代码原始性,我们对此并没有深入研究,所以另外自己开发了上面介绍的“网络设置”程序。4.1.12 Ping 测试 请连接好开发板附带的网线,并设置好有效的网关,DNS 等参数,就可以通过图形界面的 ping 程序来测试网络连通性了。在程序子类“友善之臂”中点“Ping 测试”图标,打开相应界面,如下图: 因为已经设置好了 DNS,所以可支持字符域名和数字 IP 两种方式。默认的 ping 测试次数为 4 次,当勾选上方的“ping forever”后,可以一直 ping,测试结果如下图。 重要提示:要 ping 互联网域名,必须要设置好正确有效的网关和 DNS,并且保证你的网络确实可以连通互联网。 点“Start”按钮开始 ping,点“Stop”按钮停止 ping,要关闭“Ping 测试”界面,必须先停止 ping。 说明:ping 是计算机系统中最常见的网络测试工具,不管是各个发行版本的 Linux 系统,还是各种 MS Windows 系统,都可以在命令终端输入“ping”命令。以上的“Ping 测试” 第 - 94 - 页
    • 程序实际就是调用命令行的 ping,把结果通过图形界面显示出来。4.1.13 浏览器 在“友善之臂”程序组中,点“浏览器”打开它,点开界面下方的软键盘,在界面上方的地址栏中输入一个网址,再点键盘上的“Ret”(回车)按钮,可以打开相应的网站。 说明:本开发板所用的网络浏览器为 Konqueror/Embedded,它是一个开发源代码的浏览器。4.1.14 LED 测试 在“友善之臂”程序中点“LED 测试”图标,打开如下界面: 可以看到界面中只有“Stop led-player”按钮有效,这是因为系统启动的时候开启了led-player 服务,开机后你所见到的“流水灯”效果就是这个服务控制的,要单独控制某个LED,需要先关闭这个服务,释放 LED 资源。 点“Stop led-player”按钮,这时它变为“Start led-player” 同时板上所有灯关闭、 , “LEDControl”框中所有按钮由灰色变为有效(如下图)。 这时点“All On”按钮可以点亮所有 LED,点“All Off”可以关闭所有 LED,勾选左边任意一个框可以点亮相应的 LED,取消勾选左边任意一个框可以熄灭相应的 LED。 当关闭“LED 测试”界面时,会重新开启 led-player 服务。 第 - 95 - 页
    • 4.1.15 EEPROM 读写测试 在“友善之臂”程序中点“I2C-EEPROM 测试”图标,点开任务栏上的“软键盘”按钮, “写入字符编辑区” 在 输入一些 ASC 字符, “Write Data below into EEPROM via IIC” 点按钮,这时该按钮变为进度条,并指示正在写入的进度,如图 点“Read EEPROM Data via IIC”按钮,这时按钮变为进度条,并指示正在读取的进度。如图。4.1.16 PWM 控制蜂鸣器 在“友善之臂”程序中点“PWM-蜂鸣器测试”图标,程序中默认的 PWM 输出为 第 - 96 - 页
    • 1000Hz,点“Start”按钮开始驱动蜂鸣器发声,此时可以通过点击“+”或者“-”按钮改变 PWM 输出的频率,同时也可以听到蜂鸣器输出声音的改变。点“Stop”按钮中止 PWM 输出。4.1.17 串口助手 提示:在使用该程序之前请连接好你需要测试的串口 开发板上的 CON1,2,3,4 分别对应 CPU 的 UART0,1,2,3,其中 UART0 已经转换为 RS232 电平,并通过 DB9 插座 COM0 输出,它在启动时已经被设置为 console 终 端,因此不能直接使用该程序测试。其他三个串口 CON2,3,4 需要增加 RS232 转 换才可以和 PC 的串口连接使用。(本公司提供了型号为“OneCom”RS232 转换 模块,如图),连接 PC 时请注意你使用的串口线类型(交叉或直连)。 本程序也支持市面上常见的 USB 转串口线,因为目前的笔记本大都没有串口, 为了方便开发,我们的很多代理都提供了类似的转接线。把 USB 转串口线接到 开发板的 USB Host 端口上,你就可以扩充开发板的串口了。它对应的设备名一 般为/dev/ttyUSB0,1,2,3 等,这意味着你可以通过 USB Hub 扩展多个 USB 转串口。 把串口扩展板接到开发板的 CON2/3/4 上,并使用交叉串口线连接至 PC 的串口,如图。 第 - 97 - 页
    • 在“友善之臂”程序组中点“串口助手”图标,打开相应的程序界面,如图: 从该程序窗口的标题可以看到,默认设置为“ttySAC1 115200 8N1 [C]”,它表示默认端口的设置: - 串口设备:/dev/ttySAC1,它对应 CPU 的第二个串口 UART1 - 波特率:115200 - 数据位:8 - 流控制:无 - 停止位:1 - [C]:表示字符模式,如果是[H]则表示 16 进制模式 上图中有两个“编辑框”区域,上面的“编辑框”是用于显示接收到的数据,它实际上是不能编辑的;下面的“编辑框”可以通过 USB 键盘或者 Qtopia 的软键盘获取输入。 点 Connect 按钮,以打开开发板串口/dev/ttySAC1,在窗口下面的编辑框输入一些字符,点 Send 按钮,就可以向与它相连的串口设备发送数据了,下图显示的是通过 Windows超级终端接收的数据截图(注意:与此终端对应的串口也应该设置为 115200 8N1)。 第 - 98 - 页
    • 点 Disconnect 断开连接,再点 Setting…按钮进入端口设置界面,如图,在此列出了最常见的一些串口设置参数项: Comm Port:可以选择 CPU 自带的/dev/ttySAC0,1,2,3 三个串口;也可以选择 USB 转串口对应的/dev/ttyUSB0,1,2,3 Speed:可以选择各种常见的波特率 Data:可以选择数据位是 8 位/7 位,常见的是 8 位 Hex:此项表示采用 16 进制输入或者显示数据。4.1.18 使用 GPRS Modem 拨号上网 你可以使用常见的 GPRS Modem 连接开发板进行拨号上网,本公司所提供的型号的为:GM2403,它主要采用了 Wavecom 公司的工业级 Q2403A 模块,支持 GSM GPRS 双频通讯网络 900M/1800M,更详细的资料可以参考该 Modem 的数据手册。 第 - 99 - 页
    • 你可以通过串口或者 USB 转串口连接 Modem,下面分别进行说明。 (1) 通过开发板串口连接 通过串口连接 GPRS Modem 拨号上网时,需要使用四线线串口(也有人称为五线 串口,其中有一条是“地”):TXD,RXD,CTS 和 RTS,Mini6410 开发板的第 一个串口就是四线的,但它已经被用作 console 终端,因此不便于使用;开发板的 第二个串口也是四线的,它对应于板上的 CON2 引出座(设备名是/dev/ttySAC1), 是 TTL 电平,我们需要先把它转换为 RS232 电平才可以连接 Modem,你可以使 用我们提供的串口转接板(型号:OneCom2),也可以自行制作一个,如下图 注意:我们的拨号程序在打开串口设备时,会设置 CTS 和 RTS,因此它们是必须 的;使用带有 CTS/RTS 信号的串口,可以让数据传输更加有完整保障。 (2) 通过 USB 转串口连接 如果你没有上面那种转接板,也可以使用 USB 转串口,我们配置的内核,支持大 部分 USB 转串口,它们大都具备全功能的串口,当然也包含了 CTS 和 RTS,如 图。 说明:当插入使用 USB 转串口时,一般会在/dev 目录下出现/dev/ttyUSB0 设备, 也可能是 ttyUSB1 等,请根据实际情况自行查看。 接下来,在“友善之臂”程序中点“GPRS 拨号上网”图标,首先出现一个设置窗口,如图,如果你使用的是开发板上的 CON2 接转接板, 就选/dev/ttySAC1;如果你使用的是 USB转串口,就选/dev/ttyUSB0 或根据实际情况选择。 第 - 100 - 页
    • 在此,我们选择的是/dev/ttySAC1,点 OK 继续,出图如图界面。 拨号界面很简单,点“Connect”开始拨号,成功后,会显示分配到的 IP 地址,以及DNS,如图。 此时点“Disconnect”可以断开链接,点“Minimize”可以把窗口最小化,我们点“Minimize”把它缩小到任务栏,再打开浏览器,就可以实现无线拨号上网了。 第 - 101 - 页
    • 4.1.19 使用 GPRS Modem 单发和群发短信 连接和设置方式同上,点“友善之臂”程序组中的“GPRS 短信”图标,打开程序界面如图。 如果连接成功,此时“Status”显示“Ready” ,有时会出现“Device Initing…”的提示,这样的情况下,一般是不正常关机或者 Modem 上次连接后没有断开等情况导致的,也有可能是线路连接不好,我们推荐使用 USB 转串口连接 Modem。 (1)短信单发 在“To:”右边的编辑框中输入要接收短信的手机号,在”Input”下面的编辑框中输入要发送的内容,点“Send”就可以发出去了。 如果发送成功,在国内,一般你会收到网络服务商如中国移动自动返回的一些广告信息;可以看到“Status”的显示为“Get SMS OK”,如图。 第 - 102 - 页
    • 当然,你也可以使用自己的手机向开发板发送短信,它也是可以收到的,如图: 关于手机号码的格式: 在中国,你可以使用“+8613800138000”或者“13800138000”; 在国外,必须要添加国家区号,比如“+4423645789” “+”后面的号码首先代表国 ,家代号,然后才是手机号码。 注意:因为没有中文输入法,因此是无法直接输入中文的,但你可以采用复制粘贴的方式添加中文。 (2)短信群发 要群发短信,必须要有一个电话本文件“phonebook.txt” ,这个名字是固定的,并且必须放在 SD 卡的根目录下才可以,内容如下:Mindee13800138000张三13800138000李四+8613800138000 其中姓名一行也可以不要,如下:1380013800013800138000+8613800138000 插入 SD 卡到开发板,待自动识别后,点“Import PhoneBook”按钮,就可以导入电话本了,此时,点“Send”就可以实现群发短信了,如图: 第 - 103 - 页
    • 注意:本短信发送程序是无法保存接收到的短信的,收到的短信一般会自动存储到SIM 卡,如果 SIM 卡满了,你可以点“Clean SIM”把这些短信完全清除掉,就又可以正常使用了。4.1.20 使用 3G 上网卡拨号上网 在中国,有三种制式的 3G 无线网络: WCDMA : 运营商为中国联通,这是最成熟的一种 3G 网,可世界通用 CDMA2000: 运营商为中国电信 TD-SCDMA: 运营商为中国移动,中国独有的一种 3G 网制式 对应这三种 3G 无线网,有不同的 3G Modem 可用,最常见的就是 USB 接口的 3GModem,通常称之为“USB 3G 上网卡”或“USB 上网卡” ,我们开发的拨号程序,可以自动探测并支持上百种 USB 上网卡,下面以 HUAWEI E1750 为例介绍一下它的使用步骤,其他的请根据实际情况以此类推。 Step1:先准备一张可用的 3G SIM 卡,你可以到相应的运营商营业厅去办理 Step2:把 SIM 卡插入上网卡 Step3:把上网卡插到开发板上 第 - 104 - 页
    • Step4:开机并打开 3G 拨号程序,这里会把检测到的型号自动列出来,点 OK 继续 Step5:点“Connect”开始连接,连接成功会显示如图界面,为获取到的 IP 地址和DNS 地址等信息 Step6:把点“Minimize”拨号程序隐藏,就可以使用浏览器进行上网了。4.1.21 录音 在“友善之臂”程序组中,点击打开“录音机”程序,出现如下界面: 第 - 105 - 页
    • 根据提示,点“REC”按钮开始录音,这时对着板上的麦克风说话,可以看到录音的波形,点“STOP”按钮结束录音,如图: 此时可以点“PLAY”按钮播放刚才的录音,同时录制的音频文件将以“WAV”格式自动存储到“文档”中: 第 - 106 - 页
    • 说明:Qtopia 2.2.0 系统自带了一个录音程序,中文名为“语音便签” ,但它不能正常使用板上的麦克风进行录制,为了保持代码的原始性,我们没有对此做任何修改。4.1.22 使用 USB 摄像头拍照 问:我需要准备什么型号的 USB 摄像头? 答:你能买到的任何型号,最新的内核已经包含了 USB 摄像头万能驱动 把摄像头插到开发板的 USB Host 端口,然后在“友善之臂”程序组中,点击打开“USB摄像头”程序,你将会看到动态的预览界面, 调节一下摄像头的对焦, 拍好姿势,点下“Snap”按钮就可以拍照了,拍摄的照片将会保存到“文档”组中。 本程序还可以调节亮度、对比度和伽马值;每个型号的摄像头在出厂时已经设定了最佳值或者缺省值,程序开启时会读取它们并以此设定。 注意:虽然内核中已经包含了万能驱动,但各个型号的摄像头输出格式却不尽相同,受条件所限,我们不可能收集到所有型号的摄像头,本程序基本可以支持市面上常见的各种型号摄像头,如果你的不支持,可以把样品寄给我们,以供测试。 第 - 107 - 页
    • 4.1.23 CMOS 摄像头预览拍照 本程序需要使用本公司提供的 CMOS 摄像头模块 CAM130,该模块也可以用于mini2440 开发板,开机之前,把摄像头模块插到开发板的 CAMERA 接口上,在“友善之臂”程序组中找到“CMOS 摄像头” ,点击打开它,点 Snap 按钮可以对当前的动态预览进行拍照,拍照后 Snap 按钮变为 Continue,点击它可以继续动态预览,同时照片会保存到“文档”组中(实际位于开发板的/root/Documents/image/jpeg 目录中),在“文档”点击刚刚拍摄的照片,会自动使用 Qtopia 的“图片”程序打开。 使用 CMOS 摄像头动态预览如图。4.1.24 LCD 测试 LCD 测试程序是为了检测 LCD 有无坏点而做,对于学习型开发板来讲,我们最大可容许不超过 3 个坏点,在“友善之臂”程序组中,点击打开“LCD 测试” ,如图: 本程序有自动和手动两种测试模式: Auto-loop 是自动循环模式,执行它将会按图中依次循环全屏显示红、黄、白、青、蓝、绿、粉红、黑共八种颜色,此过程中,点击屏幕任何地方就可以返回。 Manual-control 是手动模式,执行之后,每点击一次触摸屏,就会切换到另一种颜色,直至红、黄、白、青、蓝、绿、粉红、黑八色完成一个循环,然后返回。 第 - 108 - 页
    • 4.1.25 调节背光 说明:以下内容仅对采用一线精准触摸的 LCD 驱动板有效 或许你已经注意到,当你拿到开发板时,上电开机,如果间隔一段时间没有点击触摸屏,LCD 将会“黑屏”,其实这是系统默认的背光管理发生了作用。在“设置”程序组中,点击打开“电源管理”程序界面,如图: 在此可以看到,系统默认背光关闭的时间为 25 秒,你可以点右侧的上下调节按钮,选择其他时间间隔。当“Light off”左侧的选框取消时,将会一直开背光。 需要说明的是,采用一线触摸的 LCD 驱动板还集成了背光调节功能,所以你在此还可以滑动下面的滑块,对背光进行调节。借助此特性,当你设置背光为延时关闭时,可以看到到背光是逐渐熄灭的,这就是我们所说的“渐熄效果” 。 其实在程序中控制背光关闭或者调节是十分简单的, 你可以参考一下 4.2.10 中如何在命令行调节背光的方法。4.1.26 A/D 转换 CPU 内部总共有 8 路 A/D 转换通道,但其转换器只有一个。在常见的设计中,一般AIN4、AIN5、AIN6、AIN7 被用作了四线电阻触摸的 YM、YP、XM、XP 通道(见 S3C6410芯片手册); 本开发板引出了剩余的 AIN1-3, 它们位于 CON6 接口,为了方便测试,其中 AIN0直接和一个可调电阻 W1 连接。 它们如何共用一个转换器呢?请看如下操作: 第 - 109 - 页
    • 在“友善之臂”程序组中,点击打开“A/D 转换”,如图: 这时旋转板上的 W1 可调电阻,可以看到不断变化的转换结果,转换值最小时会接近0,最大时会接近 1024,如图: 如果你使用的是 ARM 本身自带的触摸屏接口,当你点击触摸屏时,A/D 转换器将会选择触摸屏通道,这时转换结果会显示为“-1” ,当触摸笔离开触摸屏,A/D 转换器又会选择板上的 AIN0 通道了。4.1.27 按键测试 说明:在本开发板系统中,按键并没有任何专用功能,它仅仅为测试底层驱动而用。在“友善之臂”程序组中,点击打开“Buttons”程序,此时按下开发板上的任意按键(可以是多个),相应的按键图标就会变为蓝色,松开后恢复为灰色,如图。 第 - 110 - 页
    • 4.1.28 触摸笔测试 要测试校正后触摸笔的准确性,可以在 LCD 上任意地方画线,对比笔针所到之处画线是否有偏移,是否有抖动,这可以通过“随手写”程序来测试,该程序是由友善之臂开发的一个简易画图程序。 在“友善之臂”程序组中打开“随手写” ,打开后它出现一个浅黄色的画图区,用触摸笔可以在上面任意涂画(画笔颜色为黑色,宽度为 1 pixel);点 File->Save 可以把所画保存为png 格式的图片文件(保存位置: “Documents”,在板子中的位置:/Documents/image/png/),文件以 001 起始,总共可以保存 999 个文件。 可以看到书写比较流畅,也没有毛刺出现,这说明触摸笔是很准确的。4.1.29 条码扫描 本开发板支持 USB 接口的条码扫描器(英文名称:Barcode Scanner),它其实是一个HID 设备,等同于 USB 键盘。因此,在任何适合 USB 键盘输入的地方,都可以直接使用这种条码扫描器。 需要注意的是,目前必须在图形界面启动之后插入 USB 扫描器才能正常使用,不能在开机之前就插入。 接上 USB 扫描器,打开“应用程序”中的“文本编辑器” ,使用扫描器扫描一些条码(诸如快递单上、杂志等很多商品上都可以找到),可以看到条码数字被准确扫描到编辑器中 第 - 111 - 页
    • 了。4.1.30 语言设置 Qtopia 2.2.0 自带了“语言”设置,但已经和 Qtopia 1.7.0 有所不同,它只有英文支持,因此我们重新开发了一个“语言设置” ,它位于“友善之臂”程序组,点击打开它。 目前仅有 3 种语言可以选择:英文、中文和日文。试试选择“英文”:点“English”可选项,再点“OK” ,会跳出一个提示信息,询问你是否要改变语言,如果“Yes”,Qtopia系统就会重新启动,如果“No”则返回,(注意:中文和日文版本只是翻译了程序名称),如图: 第 - 112 - 页
    • 4.1.31 设置时区-日期-时间-闹钟 本开发板在出厂的时候日期是不准确的,不过你可以自己调整一下,因为 CPU 内置了实时时钟(RTC),开发板上有备份电池,所以调整后的时间在关机后是可以”保存”的,当然这需要相应的驱动支持了,调整时间的步骤如下: 点击任务栏右下角时间显示区域,会出现一个菜单,在其中选择“Set time…”,打开时间设置界面,如图,在此界面你可以设置时区,调整日期和时间等。 你还可以在菜单中选择“Clock…”,将会出现钟表界面,如图 点其中的“Stop Watch”打开“秒表”程序,如图 第 - 113 - 页
    • 另外你还可以设置闹钟,如图,闹钟时间到,从音频输出可以听过“嘀嘀”声,它会持续一分钟,并出现如下界面,点“OK”可以结束闹钟声。4.1.32 屏幕旋转 在“设置”程序组点“旋转”图标,进入相应的界面,如图,你可以选择 4 个界面旋转方向,如图。 选择好你想要的方向,点“OK”返回,即可看到结果,如图。 说明: 有时需要重新启动 Qtopia 系统才可以看到旋转的效果,因为这个程序是 Qtopia自带的,为保持其代码原始性,我们没有去修改它。另外,旋转的效果完全是 Qtopia 软件实现的,与 LCD 的底层驱动无关。 旋转后,你可以发现,所有的“友善之臂”应用小程序也都自动做了调整,这是我们在各个应用程序中编码实现的,这样做是为了让同一套代码可以适用于多种型号的 LCD 显示。 第 - 114 - 页
    • 4.1.33 设置开机自动运行程序 “开机自动运行”可以让你设定任何 Qtopia 自带的程序或者用户自己的 Qtopia 程序为开机后自动运行,它就像 Windows 系统中的“程序->启动”功能。 在“友善之臂”程序组中,点击“自动运行设置”图标打开它,如图: 图中左边一列”Program list”是要设定的程序名,它包含了所有的 Qtopia 程序(包括用户 Qtopia 程序),右边一列”Status”表明该程序的状态是否已经被设置为“开机自动运行” ,这个状态是唯一的,所有程序只能有一个被标识。 在左侧列表中选择一个程序,如“串口助手” ,这时它的状态被标识为“Auto Start” ,点“Save”按钮,会跳出保存成功的提示,这时关闭该程序,再重新启动系统(复位或者点“设置->关机->Reboot),就可以看到开机后串口助手已经自动打开了执行了。 第 - 115 - 页
    • 另外,要取消“开机自动运行”程序,可以点“Clean”,然后点“Close”,这时会出现如图对话框,点“Yes”退出即可。4.1.34 关于关机 在“设置”程序组中,有个“关机”图标,打开它,如图,其中有四个关机选项: Shutdown:按下此按钮,Linux 系统就会逐项关闭各个程序和服务,直到整个系统关闭,这时 CPU 已经完全不工作了,此时整个系统的功耗是最低的。因为本开发板并无相应的硬件关机电路,因此你仍然可以看到板上的电源灯在亮。 Reboot:这是“热”重启按钮,如果你使用的是 NOR FLASH 模式,系统会逐项关闭各个应用和服务,重启后会停留在 Superboot 的菜单模式;如果你使用的是 NAND FLASH 模式,系统会逐项关闭各个应用和服务,然后自动重启重新进入 Qtopia 系统。 注意:Reboot 和后面所介绍的“看门狗”是完全不同的功能, “看门狗”属于“冷”启动,它不会逐项关闭各个应用和服务,而是直接复位重启。 Restart Server 是指重新启动 Qtopia 图形系统,此时并不会影响到基本的 Linux 系统; Terminates Server 是指关闭 Qtopia 图形系统,点击它之后图形界面就完全失效了,此时屏幕上的显示是遗留在内存中的数据,并不是有效的图形系统界面。 第 - 116 - 页
    • 在“设置”程序组中,还有个“亮度和电源”的图标,因为本开发板并没有相应的电源管理电路,因此它们也是无效的。 说明:最原始的 Qtopia 2.2.0 源代码系统是无法有效执行“Shutdown”和“Reboot”的,我们对此进行了改进。4.1.35 看门狗 看门狗是嵌入式系统中最常见的功能之一,S3C2440 芯片本身就带有看门狗,最新的内核中已经包含了它的驱动,现在我们就在应用程序中启动它。 点“友善之臂”程序组,点击打开“看门狗”,如图: 注意,先不要点“Start”按钮,请看红色区域的提示: 一旦启动了看门狗,它就无法停止了,只有不停的去喂它,否则系统就会复位重启,我们在此设定的倒数时间为 15 秒。 为了形象表示喂狗的动作,当喂狗时我们就丢给它一只骨头吃,如果一直点“Feed”按钮,它就一直有骨头吃,这样系统也不会复位重启,如图: 第 - 117 - 页
    • 4.1.36 启动 QtE-4.7.0 为了方便用户使用, 我们实现了在同一个文件系统中让 Qtopia-2.2.0 和 QtE-4.7.0 共存,在 Qtopia-2.2.0 系统中,通过点一个普通的应用程序图标就可以启动 QE-4.7.0;当关闭QtE-4.7.0 程序时,又可以返回到 Qtopia-2.2.0,如图 QtE-4.7.0 系统运行的界面如下图,它是一个 CoverFlow 效果的简易程序管理器,你使用触摸笔可以左右拖动,并点击其中一个 Cover 来运行它 第 - 118 - 页
    • 点“Exit Embedded Demo”可以退出 QtE-4.7.0,并返回 Qtopia-2.2.04.1.37 启动 Qtopia4 为了方便用户使用,我们也实现了在同一个文件系统中让 Qtopia-2.2.0 和 Qtopia4(也就是(Qt Extended 4.4.3 Phone 版)共存,在 Qtopia-2.2.0 系统中,通过点一个普通的应用程序图标就可以启动 Qtopia4;当关闭 Qtopia4 系统时,又可以返回到 Qtopia-2.2.0,如图 第一次启动 Qtopia4 时,首先会出现如图界面 第 - 119 - 页
    • 根据界面提示,点一下触摸屏,会出现如图设置界面,在此你可以设置日期时间及格式等,作为试验,我们可以不必理会,点“Finish”继续。 然后出现一个圆钟,稍等一会,进入 qtopia4,可以看到显示标题是“Qt Extended”,如图 上图中最下方有 3 个文本按钮“Options”“Menu”“Quit” , , ;其中“Quit”是由我们添加的,以便切换回 Qtopia2 中,你可以在源代码中查看添加的方法,点“Menu”进入功能表格界面,如图: 第 - 120 - 页
    • Qtopia4 实现的功能比较简陋,应用并不多,我们就不再详细介绍了,点“Back”回到主界面,然后点“Quit”返回到 Qtopia2 中, 注意:Quit 过程的动画提示在原 Qtopia 系统中是不存在的,为了方便用户,我们特意添加了此部分代码,请自行在代码包中查看它的实现。 到此为止,我们就介绍完了大部分和硬件相关的基于图形界面的测试,系统里面还有其他一些小程序,那些都是系统自带的,如果你有兴趣可以自己尝试一下。4.1.38 选择哪个版本的 Qt 进行开发 面对这么多版本的 Qt,有很多用户不知道该如何选择,其实这也没有标准的答案,我们认为这主要取决于你的需求而定,并不是最新的就是好的,也不是老版本的就不好。 对于开发板平台而言,我们需要一套完整的桌面系统(Qtopia 就是手持设备的桌面系统),以便适合于在各种分辨率的 LCD 上都可以有不错的显示效果,用于展示开发板的各项功能,因此我们基于 Qtopia-2.2.0 开发了一些小程序,并实现了和 Qtopia4,QtE-4.7.0 等的共存和自由切换, 这些实现实质上并没有采用很新很时尚的技术,它们都是比较基本的 Linux C或 C++编程,图形界面只不过是个外壳,但这已经达到了我们的需求。 如果你的应用不需要整套的桌面系统,只是单独的一两个应用程序,我们推荐使用QtE-4.7 或更高版本,因为它们的跨平台开发性更好,对于初学者可能更容易掌握和移植,需要说明的是,单独的 QtE-4.7 应用程序占用的空间并不是很大。 第 - 121 - 页
    • 4.2 通过串口终端操作开发板 说明:每个期望学习 Linux 的嵌入式爱好者都应该学会熟练使用终端控制台的操作,所有平台的 Linux 指令都是相似的,超过 99%的命令是相同的。进行本小节的操作之前,请先按照 2.1.3 章节正确设置好超级终端。 下图是通过串口终端显示的 Linux 登录界面,实际可能与此不完全相同,但基本都是类似的,根据提示,按下回车,就可以开始 Linux 控制台之旅了。4.2.1 播放 mp3 madplay 是我们移植的一个基于控制台下的 mp3 播放器。它有多种播放控制模式,最简单的使用方法是: #madplay your.mp3 该命令将以缺省模式播放 your.mp3 文件(开发板中并无 your.mp3 文件,这里只是举例说明)。可以运行“madplay -h”查看其使用帮助,下面是播放开发板中预装包含的一首 mp3的截图: 第 - 122 - 页
    • 需要说明的是:在 Linux-2.6.36 内核中,我们采用了 ALSA 接口的音频驱动,并且此处我们移植的 madplay 也采用了此接口实现播放,并且开发板中已经内置了 ALSA 库。4.2.2 如何中止程序的运行 要中止程序的运行,可以在终端控制台下同时按下 Ctrl+c,注意:先按 Ctrl,不要放开,再按下 c 键即可。 例如:我们刚刚使用 madplay 命令播放了 mp3,如果要中止这个程序的运行,可以按下 Ctrl+c 键。 另外,如果程序是在后台运行,可以使用 kill 命令杀掉该进程4.2.3 使用优盘/移动硬盘 插入优盘之后,系统会自动创建一个/udisk 目录,并自动挂载优盘到上面,此时在串口会出现类似如下信息: 第 - 123 - 页
    • 实际上优盘设备对应的设备名为/dev/udisk。进入/udisk 目录,就可以看到里面的文件了。注意:如果你的优盘无法识别,请检查一下它是不是 FAT32/VFAT 格式的 第 - 124 - 页
    • 4.2.4 使用 SD 卡 和使用优盘一样,SD 卡也是自动识别挂载的,插入 SD 卡之后可以在串口看到如下信息: 系统会会自动创建/sdcard 目录,并把 SD 设备挂载到上面,如图: 第 - 125 - 页
    • 4.2.5 如何通过串口与 PC 互相传送文件 注意:使用 USB 转串口,有可能是不能顺利的,我们认为这和 USB 转串口线的质量和性能有关。 当通过串口终端登录系统之后,可以使用 rz 或者 sz 命令通过串口与 PC 互相传送文件,具体操作如下。 (1)使用 sz 向 PC 发送文件 在超级终端窗口中,点鼠标右键,在弹出的菜单中选择“接收文件”开始设置接收文件目录和协议,如图所示。 然后在终端的命令行输入“sz /root/Documents/viva-la-vida.mp3”命令,开始向 PC 传送位于“/root/Documents/”目录的 viva-la-vida.mp3 文件(或者其他文件,改一下路径和文件名就可以了),因为该文件比较大,所以需要多等几分钟,发送完毕,系统会自动保存文件到您设置的目录里面,如图。 第 - 126 - 页
    • (2)使用 rz 命令下载文件到开发板 在串口终端输入“rz”命令,开始接收从 PC 传过来的文件。 然后在超级终端窗口中,点鼠标右键,在弹出的菜单中选择“发送文件”,设置好要发送的文件和使用的协议,如图所示,开始向开发板发送文件。 点“发送”,开发板开始接收文件,如图所示。 第 - 127 - 页
    • 接送完毕,将会在当前目录下得到同样文件名的文件,您可以使用 md5sum 命令验证该文件是否和源文件相同。4.2.6 控制板上的 LED测试程序名称: led-player leds 备注源代码文件名 led-player.c led.c源代码在光盘中的位置 解压 Linuxexamples.tgz 可得开发板上对应的设备名 /dev/leds对应的内核驱动源代码 Linux-2.6.36/drivers/char/mini6410_leds.c其他:程序名称: leds.cgi 备注源代码或者源代码包的名称 Leds.cgi 在开发板中源代码或者源代码包的位置 位于开发板中的/www 目录中说明: leds.cgi 是一个 shell 脚本文件,它并不是二进制程序,该脚本通过 leds.html 被调用,其中使用的是最普通的网页设计技术。 解压光盘中的 root_default.tgz 也可以在其中的 www 目录得到 leds.cgi 和 leds.html 文件,它们都是脚本,本身就是源代码,使用任何文本编辑器(如 Windows 的“记事本”)都可以打开。 说明:Led-player 和通过网页控制 LED 均为友善之臂早期为 SBC2410 开发的简易示例程序,因其硬件无关性,所以可以方便的移植到其他系统。目前市面上有的书籍,部分2410/2440/6410 开发板厂商均采用了这个典型的管道应用示例。 第 - 128 - 页
    • (1) LED 服务器 开机进入系统后, 将会自动运行运行一个 LED 服务程序(/etc/rc.d/init.d/leds),它其实是调用了 led-player 的一个脚本,led-player 开始运行后,将会在/tmp 目录下创建一个led-control 管道文件,向该管道发送不同的参数可以改变 led 的闪烁模式: #echo 0 0.2 > /tmp/led-control 运行该命令后,4 个用户 led 将会以每个间隔 0.2 秒的时间运行跑马灯。 #echo 1 0.2 >/tmp/led-control 运行该命令后,4 个用户 led 将会以间隔 0.2 秒的时间运行累加器。 #/etc/rc.d/init.d/leds stop 运行该命令后,4 个用户 led 将会停止闪动。 #/etc/rc.d/init.d/leds start 运行该命令后,4 个用户 led 将会重新开始闪动。 (2)单独控制 LED /bin/leds 是一个可以控制单个 led 的实用程序,要使用 leds 必须先停止 led-player,如下命令: #/etc/rc.d/init.d/leds stop 该命令将停止 led-player 对 led 的操纵。led 的使用方法如下: [root@fa /]# led Usage: leds led_no 0|1 led_no 是要操作的 led(可为 0,1,2,3),0 和 1 分别代表关闭和点亮。 #led 2 1 将点亮 LED34.2.7 测试板上的按键测试程序名称: buttons 备注测试程序源代码文件名 Buttons_test.c测试程序源代码位置 解压 linuxexamples.tgz 可得开发板上对应的设备名 /dev/buttons对应的内核驱动源代码 Linux-2.6.36/drivers/char/mini6410_buttons.c其他: 在命令行输入“buttons”命令,然后按开发板上的按键,可以显示对应的键值,如图 第 - 129 - 页
    • 4.2.8 串口测试 说明:armcomtest 是友善之臂为了方便测试而开发的 linux 下的简易实用串口终端程序,它使用标准的系统调用,和硬件无关。一般 Linux 系统系统启动后,串口 0,1,2 对应的设备名分别为/dev/ttySAC0,1,2,3 测试串口 2 需要借助另一台带有串口的 PC,使用我们提供的串口线和扩展小板(选购配件),连接好 COM2 和另一台 PC 的串口, 并如前所述设置该 PC 的超级终端为波特率 115200,无流控制,其他默认。 在命令行下输入: #armcomtest –d /dev/ttySAC1 -o 这时如果输入字符会在另一台 PC 的超级终端出现,反之亦然。 如果要测试串口 3,则需要连接扩展小板的 COM3,并在命令行输入: #armcomtest –d /dev/ttySAC2 -o 下面是测试时的界面: 第 - 130 - 页
    • 4.2.9 测试蜂鸣器 在命令行种输入:pwm_test 可以听到蜂鸣器的发出的声音,按“+”或者“-”可以改变输出的频率,如图。 按 ESC 键中止该测试。 第 - 131 - 页
    • 4.2.10 调节控制 LCD 背光 提示: LCD 背光设备文件:/dev/backlight-1wire 采用一线触摸的 LCD 驱动板,还内置了背光调节电路及实现,背光的控制参数也是通过一线协议和主板进行传输的,它可以支持 127 级背光调节,当发送数字”0”给背光设备文件时,将会关闭背光: 在命令行种输入:echo 0 > /dev/backlight 可以关闭 LCD 背光 当发送 1-127 给背光设备时,可以调节背光的亮度;其中 127 时为最亮,一般为 15左右时,可以看到一些暗暗的画面,为 1-15 时,基本漆黑一片。当大于 127 时,将被视为 127处理,也就是最亮。 在命令行种输入:echo 15 > /dev/backlight 可以看到些许的背光。4.2.11 测试 I2C-EEPROM 在命令行种输入:i2c –w 可以向板子的 24C08 器件中写入数据(0x00-0xff) 第 - 132 - 页
    • 在命令行中输入:i2c –r 可以从板子的 24C08 器件中读出输出4.2.12 AD 转换测试测试程序名称: adc-test 备注测试程序源代码文件名 Adc-test.c 第 - 133 - 页
    • 测试程序源代码位置 解压 linuxexamples.tgz 可得开发板上对应的设备名 /dev/adc对应的内核驱动源代码 Linux-2.6.36/drivers/char/mini6410_adc.c其他: 在命令行输入 adc-test 命令,可以进行 ADC 转换测试,调节开发板板上的可调电阻W1,可以看到从串口终端输出的转换结果。4.2.13 测试 TV-OUT 进入/usr/bin 目录,注意不是“/user/bin” ,运行 tv-test 命令可以进行 TV-OUT 测试,程序将自动播放/usr/bin/TestVectors/wanted.264 文件,并输出至电视,如图 #cd /usr/bin #tv-test 第 - 134 - 页
    • 4.2.14 测试多媒体播放 见 4.1.3 章节4.2.15 使用 USB 无线网卡或 SD WiFi 为了方便在嵌入式 Linux 平台下使用 USB WiFi 和 SD WiFi 等无线网卡,我们曾基于在 Mini2440 开发板开发了一套命令行的 USB WiFi kits 工具程序,该工具集可以支持上千种型号的 USB 无线网卡(大部分的 USB 无线网卡使用的内部芯片是相同的), 现在我们已经把它移植到 6410 平台上,并且集成了 SD WiFi 驱动, 下面介绍一下该工具集的使用步骤: 该工具集包含了无线网卡驱动程序,和下面将要使用的三个实用命令行程序: scan-wifi – 用来扫描附近的无线网络 start-wifi – 用来开启连接无线网络 stop-wifi – 停止使用无线网络 这三个程序被安装在开发板的/usr/sbin 目录下 第 - 135 - 页
    • 1. 扫描附近的无线网络 说明:以下示例使用 USB 无线网卡型号是:TL-WN321G+,SD-WiFi 模块的使用方式和此类似,就不再单独说明了。 把 USB 无线网卡查到目标板上,会出现如下信息(网卡型号不同,信息也会不同) 执行扫描命令,以搜索附近的无线网络: #scan-wifi 如图 可见已经搜索到 3 个无线网络,无线网名称前的“63%”表示信号的强弱,带有密码的安全网络会被标以“Security”。 2. 连接使用无线网 第 - 136 - 页
    • 使用”start-wifi”命令可以自动连接到指定的无线网接入点,根据不同的无线网络特性,会有不同的参数,在命令行输入”start-wifi”可以看到如下提示信息: 其中, mode – 表示无线网加密类型,可以为”wpa”, “wpa2”, “wep”或”none”, “none”表示没有不需要密码的无线网络。 ssid – 表示要连接的无线网络的名称,如上面的“FriendlyARM4”, “NETGEAR”等,这个一般需要根据实际情况而定。 password – 表示加密的无线网所需的密码,将会以明文方式显示出来。 下面主要针对无安全加密和带安全加密的网络分别示例说明。 2.1 连接无需密码的开放无线网 Step1 首先使用”scan-wifi”扫描查找附近的无线网络,结果如图,这里的“FriendlyARM-Test”是专门为测试而设立的一个无需密码的开放无线网接入点。 第 - 137 - 页
    • Step2 输入”start-wifi none FriendlyARM-Test”命令,开始自动连接该无线网络,如图。 稍等片刻,可以看到目标板已经自动分配到了 IP 地址:192.168.3.100,使用 ping 命令测试一下该网络连接,如图。 第 - 138 - 页
    • 此时也可以在 PC 浏览器上输入开发板的 ip 地址:192.168.3.100,查看开发板中的web 服务器,如图。 2.2 连接需要密码的安全无线网 连接使用带密码的无线网络的步骤和以上类似, 只不过连接的时候需要事先知道无线网的加密类型和密码, 如果你不知道加密类型,只能在”wpa”, “wpa2”, “wep”这三个中猜选了,具体步骤如下: Step1 设置无线路由的安全模式,这里使用的无线路由器型号为:TL-WR740N,打开设置页面,如图 第 - 139 - 页
    • 可以看到,此处有三种加密模式: WPA-PSK/WPA2-PSK WPA/WPA2 WEP 我们选择的是第一种”WPA”, 它是为个人而设的一种常见安全加密模式,在此设定密码为”test1234”,点保存,并重启启动路由器。 说明:关于如何设置无线路由器,我们在此并不作详细的介绍说明,大部分这种设备都有配套的使用说明书,并且每个厂家会有所不同,请根据实际情况自行设定。 Step2 使用”scan-wifi”扫描查找附近的无线网络,结果如图,这里的“FriendlyARM-Test”是专门为测试而设立的一个无需密码的开放无线网接入点,可见,它是被加密的无线网络。 第 - 140 - 页
    • Step3 输入”start-wifi wpa FriendlyARM-Test test1234”命令,开始自动连接该无线网络,如图。 稍等片刻,可以看到目标板已经自动分配到了 IP 地址:192.168.3.100,使用 ping 命令测试一下该网络连接,如图。 第 - 141 - 页
    • 此时也可以在 PC 浏览器上输入开发板的 ip 地址:192.168.3.100,查看开发板中的web 服务器,如图。 3. 断开 USB 无线网 要断开发板上的 USB WiFi 连接,可以使用在命令行输入“stop-wifi”命令,在此就不再截图说明了。 第 - 142 - 页
    • 4.2.16 CMOS 摄像头动态预览 把 CAM130 摄像头模块插到开发板的 CAMERA 接口上,打开电源进入命令行终端,在命令行输入 camtest 命令,可以看到 CMOS 摄像头的动态预览画面。4.2.17 使用 telnet 上 bbs telnet 是一个经常被使用的远程登录工具,使用 telnet 功能,可以从开发板登录到其他提供了 telnet 服务器的主机,如果您接入开发板的网络可以上互联网,则可以通过 telnet命令登录外部的 bbs。 首先,确认开发板的 IP 地址是否为 192.168.1.230,并且是否和局域网内其他主机相通,如图为成功的信息。 然后设置路由 IP:route add default gw 192.168.1.1 最后使用 telnet 命令登录您要登录的主机,在此登录的是华南木棉 bbs。 第 - 143 - 页
    • 4.2.18 如何设置网络以访问互联网 首先要确保你的网络环境可以正常登陆互联网, 请记下你的网络环境所使用的网关 IP地址,比如在我这里是 192.168.1.1,然后使用 route 进行设置: # route add default gw 192.168.1.1 这时你就可以直接访问互联网上的数字 IP 地址了, 比如 ping 一下华南木棉的 BBS(其 IP地址为 202.112.17.137): #ping 202.112.17.137 如图所示表示可以 ping 通外面的网络: 第 - 144 - 页
    • 要能 ping 通外部网络的实名网址,还需要设置好域名解析服务器,先查看一下您当前网络所使用的 DNS 服务器 IP 地址(可以询问您的网络管理员): 第 - 145 - 页
    • 比如,我这里 DNS 服务器的 IP 为“202.96.128.86” ,则在开发板中这样设置: #rm /etc/resolv.conf ;首先删除以前的配置文件 #touch /etc/resolv.conf ;重新生成一个 resolv.conf 文件 #echo nameserver 202.96.128.86 >> /etc/resolv.conf ;使用实际的 DNS 服务器 IP 配置resolv.conf 文件 可以这里主要是修改/etc/resolv.conf 文件,当然你也可以直接使用 vi 进行修改。 全部过程如下图所示:4.2.19 如何设置 MAC 地址 开发板中所使用的 MAC 地址是“软”性的,因此你可以通过 ifconfig 命令对它进行重置,以适应于在同一个网络环境中使用多片开发板的情况,具体操作如下: 首先使用 ifconfig 查看一下当前的 mac 地址,运行: #ifconfig ;注意后面不要跟任何内容 第 - 146 - 页
    • 可以看到当前的 mac 地址为“08:90:90:90:90:90” ,这是在网卡驱动中默认的mac 地址,它已经被写死到内核中,除非更改网卡的驱动源代码并重新编译得到新内核。要在运行的系统中动态更改 mac 地址,先关闭当前网络,并使用 ifconfig 重置 mac 地址: #ifconfig eth0 down #ifconfig eth0 hw ether 00:11:AA:BB:CC:DD ;提示:a,b,c,d,e,f 可以为小写 再开启网络, 并使用 ifconfig 查看设置以后的 mac 地址, 使用 ping 检验网络是否依然可通: #ifconfig eth0 up #ifconfig #ping 192.168.1.1 第 - 147 - 页
    • 4.2.20 如何使用 Telnet 登录开发板 说明:6410 系统所用的部分程序和 2440 效果是相同的,以下截图使用了 mini2440的截图,仅供参考,请以实际情况为准。 开发板开机正常运行后,其实已经启动了一个 Telnet 服务,因此用户也可以通过网络远程登录开发板。 在 Windows 的命令行窗口输入“telnet 192.168.1.230” 如图出现登录界面, “root” , 输入(不需要密码)进入系统。 第 - 148 - 页
    • 4.2.21 使用 ftp 传递文件 说明:6410 系统所用的部分程序和 2440 效果是相同的,以下截图使用了 mini2440的截图,仅供参考,请以实际情况为准。 开发板开机正常运行后,其实已经启动了一个 Telnet 服务,因此用户也可 无论在 Linux 系统还是 windows 系统中,一般安装后都自带一个命令行的 ftp 命令程序,使用 ftp 可以登录远程的主机,并传递文件,这需要主机提供 ftp 服务和相应的权限;本开发板不仅带有 ftp 命令,还在开机时启动了 ftp 服务。为了方便测试,我们可以从 PC 机的命令行窗口登录开发板,并向开发板传递文件。 注意:请确保您执行 ftp 所在的目录有需要上传的文件,这里是 test.mp3 说明:登录开发板的 ftp 帐号为:plg 密码为:plg 传送完毕,您可以在串口终端看到目标板的/home/plg 目录下多了一个 test.mp3 文件。4.2.22 通过网页控制板上的 LED 说明:6410 系统所用的部分程序和 2440 效果是相同的,以下截图使用了 mini2440的截图,仅供参考,请以实际情况为准。 在 web server 测试页面中点“网络控制 LED 测试”项,会出现 LED 测试控制页面,如图 第 - 149 - 页
    • 您可以使用网页中的各个测试项目进行测试,其中的“LED 测试”将会通过 CGI 程序来控制板上的 LED 灯,其中包括 2 种方式的显示类型和三种不同的显示速度。 如果要停止 web 服务器,则在命令提示符下输入以下命令: #/etc/rc.d/init.d/httpd stop 要重新启动则输入: #/etc/rc.d/init.d/httpd start4.2.23 如何挂接使用网络文件系统 NFS 在进行该测试之前, 请先在 PC 端搭建好 NFS 服务器系统,然后在命令行输入以下命令(假定服务器的 IP 地址为 192.168.1.111) :#mount –t nfs –o nolock 192.168.1.111:/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4 /mnt 挂接成功,您就可以进入/mnt 目录进行操作了,如下图所示。 取消挂接的命令如下: #umount /mnt 第 - 150 - 页
    • 4.2.24 设置并保存系统实时时钟 Linux 中更改时间的方法一般使用 date 命令,为了把 S3C2440 内部带的时钟与 linux 系统时钟同步,一般使用 hwclock 命令,下面是它们的使用方法: (1) date -s 042916352007 #设置时间为 2007-04-29 16:34 (2) hwclock -w #把刚刚设置的时间存入 S3C2440 内部的 RTC (3).开机时使用 hwclock -s 命令可以恢复 linux 系统时钟为 RTC, 一般把该语句放入/etc/init.d/rcS 文件自动执行。 注意:我们提供的系统已经把 hwclock –s 命令写入 rcS 文件。4.2.25 如何掉电保存数据到 Flash 由于本系统采用了可读写文件系统 yaffs2(在嵌入式系统中,专门管理 Flash 存储器的一种文件系统),因此可以很方便的动态保存数据,掉电后不会丢失。开机后在串口终端运行以下命令: #cp / shanghaitan.mp3 /home/plg 此时将在/home/fa 目录下复制一个同样的文件,然后关机,重新开启系统,可以查看到/home/plg 目录下的文件依然存在。 第 - 151 - 页
    • 4.2.26 设置开机自动运行程序 借助启动脚本可以设置各种程序开机后自动运行,也可以设置其他系统设置,这有点类似于 Windows 系统中的 Autobat 自动批处理文件,启动脚本的位于板子的/etc/init.d/rcS,内容如下(实际内容可能与此不完全一致):#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP/bin/hostname FriendlyARM[ -e /proc/1 ] || /bin/mount -n -t proc none /proc[ -e /sys/class ] || /bin/mount -n -t sysfs none /sys[ -e /dev/tty ] || /bin/mount -t ramfs none /dev/bin/mount -n -t usbfs none /proc/bus/usbecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug# mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm/bin/mount -n -t devpts none /dev/pts -o mode=0622/bin/mount -n -t tmpfs tmpfs /dev/shm/bin/mount -n -t ramfs none /tmp/bin/mount -n -t ramfs none /varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runmkdir -p /var/tmp 第 - 152 - 页
    • /sbin/hwclock -ssyslogd/etc/rc.d/init.d/netd startecho " " > /dev/tty1echo "Starting networking..." > /dev/tty1sleep 1/etc/rc.d/init.d/httpd startecho " " > /dev/tty1echo "Starting web server..." > /dev/tty1sleep 1/etc/rc.d/init.d/leds startecho " " > /dev/tty1echo "Starting leds service..." > /dev/tty1echo " "sleep 1echo " " > /dev/tty1/etc/rc.d/init.d/alsaconf startecho "Loading sound card config..." > /dev/tty1echo " "/sbin/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0/bin/qtopia &echo " " > /dev/tty1echo "Starting Qtopia, please waiting..." > /dev/tty14.2.27 如何使用命令进行屏幕截图 使用 snapshot 命令可以对当前的 LCD 显示进行截图,并保存为 png 格式的图片。 #snapshot pic.png 执行该命令将把当前 LCD 显示进行抓图,并保存为 pic.png 文件。4.2.28 查看开发板内存信息 本开发板配备了 256M DDR RAM,但有用户反映在系统中只查看到大约 68M 总内存, 第 - 153 - 页
    • 这是因为多媒体驱动“吃掉”了不少内存空间,下面我们对此简单说明一下: 一般我们使用“cat /proc/meminfo”命令系统内存信息,该信息仅说明了整个 Linux软件系统所能分配到的内存总量,它的结果如下图所示,总共为 216M 左右。 实际上,6410 内部的多媒体协处理器也会用到一些内存,运行“cat /prov/videomem”命令可以看到详细的内存分配,如图: 在 u-boot 启动系统之前,也可以查看到实际的内存大小,如图: 第 - 154 - 页
    • 4.3 安装并设置 Fedora9 本小节从在虚拟机/PC 机上安装 Fedora 9.0 开始,详细介绍了如何建立 Linux 开发环境。 我们的软件开发和测试全部基于Fedora9 平台做开发,所有的配置和编译脚本也基于此平台,我们没有在其他平台上测试过。如果你对Linux开发佷熟悉,相信你会根据错误提示逐步找到原因并解决,它们一般是你选用的平台缺少了某些库文件或者工具等原因造成的;否则,我们建议初学者使用和我们一致的平台,即Fedora 9(全称为: Fedora-9-i386-DVD.iso),你 可 以 在 其 官 方 网 站 下 载(ftp://download.fedora.redhat.com/pub/fedora/linux/releases/9/Fedora/i386/iso/Fedora-9-i386-DVD.iso ,不保证长期有效),也可以在其他地方获取,它们都是一样的,安装时请务必参考我们手册提供的步骤,这是我们经过严格测试的,以免遗漏一些开发时所需要的组件。 Linux 的发行版本众多,我们无法为此一一编写文档解释安装方法,请谅解。 我们为什么选择 Fedora 9: 根据我们的测试,Fedora 9 经过比较简单的安装和设置,依然可以使用 root 用户登录(大多数开发均需要此用户权限),Fedora 10 及其以后的版本则需要经过稍微复杂的设置才能使用 root,这不利于不了解 Linux 的初学者,Fedora 8 及其以前的版本则相对老了一些。并且按照我们手册提供的步骤安装 Fedora 9,可以比较完美配合我们提供的开发软件包,不再需要其他补丁之类的繁琐设置(ubuntu 就需要经常这样更新设置),因此我们认为 Fedora 9 是最适合初学者的开发平台。 第 - 155 - 页
    • 4.3.1 图解安装 Fedora 9.0 Step1: 将的安装光盘放到光驱中,将 BIOS 改为从光盘启动, 启动后系统将会出现如下界面,按回车继续。 Step2:然后进入下一步, 检查安装盘, 一般不需要检测, 所以选择了 Skip(跳过) Step3:过一会儿就进入安装图形化画面, 点击 Next 即可. 第 - 156 - 页
    • Step4:选择安装过程用什麽语言, 这里选择的是英文Step5:选键盘, 我们一般选美式键盘即可 第 - 157 - 页
    • Step6:开始设置网络 点“Edit”按钮,不要设置为 DHCP, 我们一般使用静态的 IP, 对照下面进行填写,分别输入 IP 和子网掩码 第 - 158 - 页
    • 点“OK”返回,开始设置机器名和网关以及 DNS 等 Step7:设置时区,如果你不使用虚拟机安装,“System clock uses UTC”选项可以去掉,如图 第 - 159 - 页
    • Step8:设置 root 用户密码,必须是 6 位数以上。Step9:设置分区,一般选择默认即可,注意要备份好硬盘数据 第 - 160 - 页
    • 点“Next”会出现警告信息,告诉你继续执行会格式化分区中的所有数据,一般我们在 Vmware 虚拟机中使用,因此可以选“Write changes to disk”,之后开始进行格式化操作。 这是格式化的进程图: 第 - 161 - 页
    • Step11:选择安装类型,选择如图,点“Next”开始定制。Step12:在 Servers 项中,选择如图 第 - 162 - 页
    • Step13:开始安装系统,此过程时间会比较长,请耐心等待。Step14:安装完毕,如图 第 - 163 - 页
    • Step15:接上一步,按“Reboot“按钮重启系统,出现第一次使用的界面,如图。Step16:一些授权信息,不必理会,继续下一步 第 - 164 - 页
    • Step17:创建用户,在此我们不需要创建任何新的用户,点“Forward”继续这时会出现提示信息让你确认,点“Continue”继续下一步。 第 - 165 - 页
    • Step18:设置日期和时间,不必理会,继续下一步Step19:列出了本机的一些硬件信息,采用缺省设置,点“Finish” 第 - 166 - 页
    • 出现提示信息,如图选择,进行下一步Step20:出现登录界面,我们要以 root 用户进行登录,因此先输入 root 第 - 167 - 页
    • 再输入刚才设定的密码 登录后会出现一个提示,以后如果你以 root 用户登录,每次都会出现这个提示,每次均点“Continue”即可。 第 - 168 - 页
    • 这是登录后的界面,它和 Windows 或者 Ubuntu 是十分类似的。4.3.2 添加新用户 为了方便开发,我们通常创建一个普通权限的用户,步骤如下。 Step1:如图打开用户和组管理器: 第 - 169 - 页
    • Step2:出现用户管理窗口Step3:点工具栏的“Add User”按钮,添加新用户,并设置密码: 第 - 170 - 页
    • 点“OK”返回,可以看到已经增加了 plg 用户,同时/home 目录下也增加了 plg 用户目录,如图: 点 Add User 按钮,出现添加新用户窗口,按提示操作就可以了。 第 - 171 - 页
    • 4.3.3 访问 Windows 系统中的文件 无论你使用的是虚拟机还是真实的 Fedora9 系统,都可以佷方便的访问 Windows 中的共享文件,前提是两个系统之间的网络是互通的。 提示:要在虚拟机中使用网络,最简单的方式是设置“Guest”为“Bridges”方式的网络连接,如图: 访问 Windows 系统中共享文件的步骤如下: Step1:在 Windows 中设置共享文件夹“share_f9”(示例) 第 - 172 - 页
    • Step2:在 Fedora9 系统中如图操作:打开如图窗口: 第 - 173 - 页
    • 在 Service type 列表中选择 Windows share,如图:输入所要共享 Windows 主机的 IP 地址和共享文件夹的名字: 第 - 174 - 页
    • 点“Connect”,会出现如下提示窗口: 不必理会,直接点“Connect”即可,就可以看到 Windows 共享文件中的内容了,在此你可以像操作其他目录一样来使用它。 第 - 175 - 页
    • 如果你想在命令行使用这个目录,可以这样操作:说明:在控制台下,TAB 键是一个很好使用的小技巧。要想断开共享目录,只要在桌面的共享文件夹上用右键如图操作就可以了: 第 - 176 - 页
    • 4.3.4 配置网络文件系统 NFS 服务 使用本开发板做开发,NFS 服务并不是必须的,因为 NFS 主要是用于通过网络远程共享文件,我们使用常见的 ftp 或者 SD 卡,基本上也可以达到同样的目的。 NFS 服务对于没有接触过 Linux 的人来讲可能比较难以理解,另外,每个人的网络环境也不尽相同,因此设置和使用并没有严格的标准,这就导致初学者比较难以掌握,所以我们并不推荐使用,在此提供的步骤仅供参考;事实上,网络上有很多爱好者根据自己的情况记录了经验总结,你也可以自己搜索看看,关键词是“mini2440 nfs”,它们都是大同小异的,并且可以适用于 6410 系统。 Step1:设置共享目录 以 root 身份登录 Fedora9,在命令行运行: #gedit /etc/exports 编辑 nfs 服务的配置文件(注意:第一次打开时该文件是空的),添加以下内容: /opt/FriendlyARM/mini6410/linux/root_qtopia_qt4 *(rw,sync,no_root_squash) 其中: /opt/FriendlyARM/mini6410/linux/root_qtopia_qt4 表示将要共享的的目录, 它可以作为开发板的根文件系统通过 nfs 挂接; * 表示所有的客户机都可以挂接此目录 rw 表示挂接此目录的客户机对该目录有读写的权力 no_root_squash 表示允许挂接此目录的客户机享有该主机的 root 身份 说明:实际上该目录目前尚不存在,执行完 4.4 章节的内容之后才会有,在此只是先设置它。 第 - 177 - 页
    • Step2: 启动 NFS 服务 可以通过命令行和图形界面两种方式启动 NFS 服务,我们建立 NFS 服务的目的是通过网络对外提供目录共享服务,但默认安装的 Fedora 系统开启了防火墙,这会导致 NFS 服务无法正常使用。因此先关闭防火墙,在命令行输入“lokkit”命令,打开防火期设置界面: 选择其中(*)Disabled,然后选择“OK”退出,这样就永久的关闭了防火墙。 下面是启动 NFS 服务的方法和步骤: (1)通过命令启动和停止 nfs 服务 在命令行下运行: #/etc/init.d/nfs start 这将启动 nfs 服务,可以输入以下命令检验 nfs 该服务是否启动。 # mount -t nfs localhost: /opt/FriendlyARM/mini6410/root_qtopia_qt4 /mnt/ 如 果 没 有 出 现 错 误 信 息 , 您 将 可 以 浏 览 到 /mnt 目 录 中 的 内 容 和/opt/FriendlyARM/mini6410/root_qtopia_qt4 是一致的。 使用这个命令可以停止 nfs 服务: #/etc/init.d/nfs stop (2)通过图形界面启动 NFS 服务 为了在每次开机时系统都自动启动该服务,可以输入 # serviceconf 打开系统服务配置窗口,在左侧一栏找到 nfs 服务选项框,并选中它,然后点工具栏的“Enable”启动它,如图。 第 - 178 - 页
    • Step3: 通过 NFS 启动系统 当 NFS 服务设置好并启动后,我们就可以把 NFS 作为根文件系统来启动开发板了。通过使用 NFS 作为根文件系统,开发板的“硬盘”就可以变得很大,因为您使用的是主机的硬盘,这是使用 Linux 作为开发经常使用的方法。 设置开发板为 SDBOOT 启动,注意需要进入菜单模式(见 2.4 章节),连接好电源,串口线,网线;打开串口终端,输入以下命令(不需要加引号): console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.111:/opt/FriendlyARM/mini6410/root_qtopia_qt4 ip=192.168.1.70:192.168.1.111:192.168.1.111:255.255.255.0:mini6410.arm9.net:eth0:off 各参数的含义如下: nfsroot 是开发主机的 IP 地址,如果你使用了虚拟机,该地址是虚拟机中 Fedora9 的IP 地址,总之,它是直接提供 NFS 服务的 Linux 系统 IP 地址。 “ip=”后面: 第一项(192.168.1.70)是目标板的临时 IP(注意不要和局域网内其他 IP 冲突); 第二项(192.168.1.111)是开发主机的 IP; 第三项(192.168.1.111)是目标板上网关(GW)的设置; 第四项(255.255.255.0)是子网掩码; 第五项是开发主机的名字(一般无关紧要,可随便填写) eth0 是网卡设备的名称。 由于该命令比较长,容易输入错误,我们已经把它写入了光盘的 nfs.txt 文件中,这样您直接复制过来就可以了,如图,回车后,该启动参数将被自动保存在 NAND 中。 第 - 179 - 页
    • 然后输入 b,按回车就可以通过 nfs 启动系统了。4.3.5 建立交叉编译环境 在 Linux 平台下,要为开发板编译内核,图形界面 Qtopia/Qt4,bootloader,还有其他一些应用程序, 均需要交叉编译工具链, 我们使用的是 arm-linux-gcc-4.5.1,它默认采用 armv6 第 - 180 - 页
    • 指令集,支持硬浮点运算,下面是安装它的详细步骤。 Step1: 将光盘 Linux 目录中的 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 复制到 Fedora9某个目录下如 tmp/,然后进入到该目录,执行解压命令: #cd /tmp #tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C / 注意:C 后面有个空格,并且 C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。 执行该命令,将把 arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录。 Step2:把编译器路径加入系统环境变量,运行命令 #gedit /root/.bashrc 编辑/root/.bashrc 文件,注意“bashrc”前面有一个“.” ,修改最后一行为 exportPATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。 如图,保存退出。 重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入arm-linux-gcc –v,会出现如下信息,这说明交叉编译环境已经成功安装。 第 - 181 - 页
    • 4.4 解压安装源代码及其他工具 本小节将解压安装开发学习过程所用到的全部源代码以及其他一些小工具,这包括: - Linux 内核源代码 - Qtopia-2.2.0 平台源代码(分为 x86 和 arm 平台两个版本) - arm-qt-extended-4.4.3 平台源代码(也就是 Qtopia4, 分为 x86 和 arm 两个版本) - QtE-4.7.0 平台源代码(arm 版本) - busybox-1.17 源代码 - Linux 编程示例源代码 - U-boot 源代码 - 目标文件系统目录 - 目标文件系统映象制作工具(包括 yaffs2 和 UBIFS) - 图形界面的 Linux logo 制作工具 logomaker 注意:所有的源代码和工具都是通过解压方式安装的,所有的源代码均使用统一的编译器 arm-linux-gcc-4.4.1 编译 下面是详细的解压安装过程,并有简要的介绍。4.4.1 解压安装源代码 首先创建工作目录/opt/FriendlyARM/mini6410/linux 在命令行执行 #mkdir –p /opt/FriendlyARM/mini6410/linux 后面步骤的所有源代码都会解压安装到此目录中: 第 - 182 - 页
    • (1)准备好 Linux 源代码包 在 Fedora9 系统中/tmp 目录中创建一个临时目录/tmp/linux #mkdir /tmp/linux 把光盘中 linux 目录中的所有文件都复制到/tmp/linux 目录中 说明:这样做是为了统一下面的操作步骤,其实你可以使用其他目录,也可以直接从光盘解压安装。 (2)解压安装 U-boot 源代码 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ u-boot-mini6410-20101106.tar.gz 将创建生成 u-boot-mini6410 目录,里面包含了完整的 U-boot 源代码 说明:20101106 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。 (3)解压安装 Linux 内核源代码 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ linux-2.6.36-20101115.tar.gz 将创建生成 linux-2.6.36 目录,里面包含了完整的内核源代码 说明:20101115 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。 (4)解压安装目标文件系统 执行以下命令: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ rootfs_qtopia_qt4-20101120.tgz 将创建生成 rootfs_qtopia_qt4 目录 说明:20101120 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准。 (5)解压安装嵌入式图形系统 qtopia 源代码 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ x86-qtopia-20100420.tar.gz #tar xvzf /tmp/linux/ arm-qtopia-20101105.tar.gz 将创建 x86-qtopia 和 arm-qtopia 两个目录,并内含相应的全部源代码。 说明:x86-qtopia 和 arm-qtopia 后面或许会有日期尾缀,它是我们的发行或更新日期标志,请以光盘中实际日期尾缀为准。源代码包中也包含了嵌入式浏览器 konquor 的源代码。 另外,为了方便用户学习开发使用,此源代码包相比 Qt 公司的原始版本已经打过补丁,并做了诸多改进,它们都是源代码方式,我们不再一一赘述,感兴趣者可自行比较。 (6)解压安装嵌入式图形系统 qt-extended-4.4.3 源代码 第 - 183 - 页
    • 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ x86-qt-extended-4.4.3-20101003.tgz #tar xvzf /tmp/linux/ arm-qt-extended-4.4.3-20101105.tgz 将创建 x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 两个目录,并内含相应的全部源代码。 说明:x86-qt-extended-4.4.3 和 arm-qt-extended-4.4.3 后面或许会有日期尾缀,它是我们的发行或更新日期标志,请以光盘中实际日期尾缀为准。 另外,为了方便用户学习开发使用,此源代码包相比 Qt 公司的原始版本已经打过补丁,并做了一些改进,它们都是源代码方式,我们不再一一赘述,感兴趣者可自行比较。 (7)解压安装 QtE-4.7.0 源代码 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/x86-qte-4.6.1-20100516.tar.gz #tar xvzf /tmp/linux/ arm-qte-4.7.0-20101105.tar.gz 将创建 x86-qte-4.6.1 和 arm-qte-4.7.0 两个目录,并内含相应的全部源代码。 说明: x86-qte 和 arm-qte 压缩包后面或许会有日期尾缀, 它是我们的发行或更新日期,请以光盘中实际日期尾缀为准。其中 x86-qte-4.6.1 主要是创建 Creator 开发平台,版本稍微低一些不会影响开发。 (8)解压安装 busybox 源代码 Busybox是一个轻型的linux命令工具集, 在此使用的是busybox-1.13.3 版本。用户可以从其官方网站下载最新版本(http://www.busybox.net)。 在工作目录/opt/FriendlyARM/mini6410/linux 中执行: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ busybox-1.17.2-20101120.tgz 将创建 busybox-1.17.2 目录,内含相应版本的全部源代码。 说明:为了方便用户编译使用,我们做了一个缺省的配置文件 fa.config。 (9)解压安装 Linux 示例程序 执行以下命令: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ examples-mini6410-20101110.tgz 将创建 examples 目录,并包含初学 linux 编程代码示例。 说明: 20101110 是我们的发行更新日期标志, 请以光盘中实际日期尾缀为准。examples目录中的代码均为友善之臂自主开发,并全部以源代码方式提供,它们都是一些基于命令行的小程序。 第 - 184 - 页
    • 4.4.2 解压创建目标文件系统 根据触摸屏的连接配置方式,为了方便用户使用,我们制作了 2 个目标文件系统压缩包: rootfs_qtopia_qt4-20101120.tgz rootfs_qtopia_qt4-s-20101120.tgz 其中:带“-s”的表示适合于采用专业串口触摸屏控制器的 LCD 套餐,它适合于大尺寸的四线电阻触摸屏,会达到更好的效果;不带“-s”的表示采用了 ARM 本身触摸屏控制器,或一线触摸屏(第一次运行时会自动识别)。它们的唯一不同之处在于“/etc/friendlyarm-ts-input.conf”配置文件的定义。 执行以下命令: #cd /opt/FriendlyARM/mini6410/linux #tar xvzf /tmp/linux/ rootfs_qtopia_qt4-20101120.tgz # tar xvzf /tmp/linux/ rootfs_qtopia_qt4-s-20101120.tgz 将创建 rootfs_qtopia_qt4 和 rootfs_qtopia_qt4-s 两个目录, 该目录和目标板上使用的文件系统内容是完全一致的。 说明:20101120 是我们的发行更新日期标志,请以光盘中实际日期尾缀为准,该文件系统包含了前面你所看到的 qtopia-2.2.0,Qtopia4 和 QtE-4.7.0 测试软件等,busybox,还有常用的命令行工具等,和之前的相比,它具有如下特性: - 自动识别 NFS 启动或本地启动 - 自动识别所接的输出显示模块是否接了触摸屏,以判断在第一次开机使用时是否要进行校正。如果没有连接,会自动进入系统,使用鼠标即可;否则会先校正触摸屏。 - 自动识别普通或者高速 SD 卡(最大可支持 32G)和优盘 - 自动检测 USB 鼠标或触摸屏 - 支持 USB 鼠标和触摸屏共存(自 Linux-2.6.36 开始支持)4.4.3 解压安装文件系统映像工具 要把目标文件系统全部写入开发板中, 一般还需要先把目标文件系统目录制作成单个的映像文件以便烧写或者复制, Linux 内核启动时,一般会根据命令行参数挂在不同格式的系统,比如 yaffs2, ubifs, ext2, nfs 等。它们一般都是命令行方式的小程序。 针对 64M 或 128M/256M/512M/1GB 的 mini2440/mcro2440,分别有 2 套制作工具:mkyaffs2image 和 mkyaffs2image-128M。其中 mkyaffs2image 是制作适用于 64M 版本文件系统 映 象 的 工 具 , 它 沿 用 了 以 前 的 名 字 ; mkyaffs2image-128M 是 制 作 适 用 于128M/256M/512M/1GB 版本文件系统映象的工具,为了便于区分,我们把它命名为此。 对于 6410 系统而言,我们没有制作 64M 版本,因此可以沿用 2440 系统所用的mkyaffs2image-128M UBIFS 是近两年流行的另一种针对嵌入式系统的存储器文件系统格式, UBIFS 官方使用的工具比较复杂, 并且参数和步骤都很多, 为了方便使用, 我们也专门设计了 mkubimage 第 - 185 - 页
    • 另外还有 mkext3image,它用来把目标文件系统制作成单个的 EXT3 映像文件,这样就可以在普通的 FAT32/FAT 格式的 SD 卡中安装使用各种类 Linux 系统了,只需要相应的单个系统映像文件复制到 SD 卡中就可以,这不再需要很复杂的步骤。 我们把这些小工具统称为 mktools,下面是它的安装步骤: 执行以下命令: #tar xvzf /tmp/linux/mktools.tar.gz –C / 将会在/usr/sbin 目录下创建生成 mkyaffs2image, mkyaffs2image-128M, mkubimage,mkext3image 注意:C 是大写的,C 后面有个空格,C 是改变解压安装目录的意思 说明: 如果你以前安装过 mini2440 使用的 mkyaffs2image 系列工具, 它们将会被覆盖,请不必担心,它们功能都是相同的。4.4.4 解压安装 LogoMaker LogoMaker 是友善之臂开发的一个 Linux Logo 简易制作工具,网上有很多资料介绍如何使用命令行的工具把 bmp, jpg, png 等格式的图片转换为 Linux Logo 文件,在此我们设计了一个图形化的版本,它是基于 Fedora9 开发。 执行以下命令: #tar xvzf /tmp/linux/logomaker.tgz –C / 注意:C 是大写的,C 后面有个空格,C 是改变解压安装目录的意思 说明: 执行以上命令,LogoMaker 将会被安装到/usr/sbin 目录下,它只有一个文件,安装完之后在命令行输入 logomaker 可出现如下界面,在后面的章节我们会介绍它的使用方法: 第 - 186 - 页
    • 第 - 187 - 页
    • 4.5 配置和编译 U-boot 三星已经为 6410 移植好了 U-boot,并且支持 USB 下载,Nand 启动等,它是开源的,仅此而已。我们在此基础上对 U-boot 做了诸多改进: - 增加了下载菜单,类似 Superboot 的 USB 下载菜单 - 增加了 SD 卡启动配置 - 支持直接下载烧写 yaffs2 文件系统映像 - 支持烧写 WindowsCE BootLoader 之 Nboot - 支持烧写 WindowsCE 映像的功能 - 支持烧写单文件映像文件,就是通常所说的裸机程序 - 支持返回原始 shell - 增加了对 256M DDR RAM 的支持 下面我们就介绍一下它的配置和编译以及使用方法。4.5.1 配置编译支持 NAND 启动的 U-boot 说明:根据开发板不同的内存(DDR RAM)容量,需要使用不同的 U-boot 配置项。 要编译适合于 128M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 #make mini6410_nand_config-ram128;make 将会在当前目录配置并编译生成支持 Nand 启动的 U-boot.bin,使用 SD 卡或者 USB下载到 Nand Flash 即可使用,详见第三章,光盘中 images/linux 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_nand-ram128.bin 要编译适合于 256M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 #make mini6410_nand_config-ram256;make 将会在当前目录配置并编译生成支持 Nand 启动的 U-boot.bin,使用 SD 卡或者 USB下载到 Nand Flash 即可使用,详见第三章,光盘中 images/linux 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_nand-ram256.bin4.5.2 配置编译支持 SD 卡启动的 U-boot 说明:根据开发板不同的内存(DDR RAM)容量,需要使用不同的 U-boot 配置项。 要编译适合于 128M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 第 - 188 - 页
    • #make mini6410_sd_config-ram128;make 将会在当前目录配置并编译生成支持 SD 启动的 U-boot.bin, 使用 SD-Flasher.exe 工具把它烧写到 SD 卡中,设置开发板从 SD 卡启动即可使用了,可以参考 2.2 章节的步骤,只需把其中的 Superboot.bin 改为 U-boot.bin 就可以了。光盘中 images/linux 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_sd-ram128.bin 要编译适合于 256M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 #make mini6410_sd_config-ram256;make 将会在当前目录配置并编译生成支持 SD 启动的 U-boot.bin, 使用 SD-Flasher.exe 工具把它烧写到 SD 卡中,设置开发板从 SD 卡启动即可使用了,可以参考 2.2 章节的步骤,只需把其中的 Superboot.bin 改为 U-boot.bin 就可以了。光盘中 images/linux 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_sd-ram256.bin4.5.3 U-boot 使用说明 未完4.6 配置和编译内核 为了方便用户能够编译出和光盘烧写文件完全一致的内核,我们针对不同的 LCD 输出分别做了相应的内核配置文件: config_mini6410_x35 –适用于 Sony 3.5”LCD,分辨率为 240x320 config_mini6410_n43 –适用于 NEC4.3”LCD,分辨率为 480x272 config_mini6410_l80 –适用于 Sharp 8”(或兼容)LCD,分辨率为 640x480 config_mini6410_a70 –适用于 7 寸真彩屏,分辨率为 800x480 config_mini6410_vga1024x768 –适用于分辨率输出为 1024x768 的 VGA 模块转接板 config_mini6410_vga800x600 –适用于分辨率输出为 800x600 的 VGA 模块转接板 config_mini6410_vga640x480 –适用于分辨率输出为 640x480 的 VGA 模块转接板 config_mini6410_ezvga800x600 –适用于简易 VGA 转接板,输出分辨率为 800x600 如下命令缺省了配置文件 config_n43 来编译内核 #cp config_mini6410_n43 .config ;注意:n43 后面有个空格,然后有个“.”开头的 config #make zImage ;开始编译内核,也可以直接使用 make 命令 第 - 189 - 页
    • 编译结束后,会在 arch/arm/boot 目录下生成 linux 内核映象文件 zImage,你可以使用第三章节介绍的方法把 zImage 下载到开发板测试。 光盘 images/linux 目录中已经提供好了编译好的内核文件,根据不同类型的 LCD 型号,分别有:zImage_n43, zImage_a70 等4.7 配置和编译 busybox 一般从官方网站下载的 busybox 源代码,需要根据所需重新配置一下,才可以编译使用,我们已经做好了一个缺省的配置文件:fa.config,无论是 2440 和 6410 我们均使用了此配置,通过它编译出的 busybox 可以满足绝大部分的需要,进入 busybox 源代码目录,执行: #cp fa.config .config #make 稍等一会, 即可在当前目录编译生成 busybox 目标文件,它和开发板预装的是一样的,一般 busybox 是不需要更新的。 第 - 190 - 页
    • 4.8 制作目标板文件系统映象 请确认你已经按照 4.4.4 一节的步骤安装了 mktools 系列工具,它们是将把同一个目标文件系统目录压制为不同格式的映像文件,以用来安装烧写到 Nand Flash 或者复制到 SD卡中运行。 还请确认你已经做好了 4.4.2 的准备工作,也就是准备了目标文件系统目录。4.8.1 制作 yaffs2 文件系统映像 进入工作目录/opt/FriendlyARM/mini6410/linux,执行以下命令: #mkyaffs2image-128M rootfs_qtopia_qt4 rootfs_qtopia_qt4.img 将把 rootfs_qtopia_qt4 目录压制为 yaffs2 格式的 rootfs_qtopia_qt4.img 映像文件,它和光盘中/images/Linux/目录下的同名文件是相同的,使用 SD 卡或者 USB 下载可以把它烧写到Nand Flash 中,烧写步骤详见第三章。 说明:你也可以使用该命令工具把 rootfs_qtopia_qt4-s 目录压制为 yaffs2 映像文件,在此不再赘述。 第 - 191 - 页
    • 4.8.2 制作 ubifs 文件系统映像 进入工作目录/opt/FriendlyARM/mini6410/linux,执行以下命令: #mkyaffs2image-128M rootfs_qtopia_qt4 rootfs_qtopia_qt4.ubi 将把 rootfs_qtopia_qt4 目录压制为 UBIFS 格式的 rootfs_qtopia_qt4.ubi 映像文件,它和光盘中/images/Linux/目录下的同名文件是相同的,使用 SD 卡或者 USB 下载可以把它烧写到Nand Flash 中,烧写步骤详见第三章。 说明:你也可以使用该命令工具把 rootfs_qtopia_qt4-s 目录压制为 ubifs 映像文件,在此不再赘述4.8.3 制作 ext3 文件系统映像 进入工作目录/opt/FriendlyARM/mini6410/linux,执行以下命令: #mkyaffs2image-128M rootfs_qtopia_qt4 rootfs_qtopia_qt4.ext3 将把 rootfs_qtopia_qt4 目录压制为 EXT3 格式的 rootfs_qtopia_qt4.ext3 映像文件,它和光盘中/images/Linux/目录下的同名文件是相同的, 参考 3.3 章节的说明, 把它复制到 SD 卡就可以直接使用它运行系统了。 说明:你也可以使用该命令工具把 rootfs_qtopia_qt4-s 目录压制为 ext3 映像文件,在此不再赘述4.9 嵌入式 Linux 应用程序示例 本节内容通过嵌入式 Linux 开发最简单的例子,介绍了如何编写和编译 Linux 应用程序,并下载到开发板运行起来。 如果你已经执行了 4.4.1 章节的步骤,就可以在/opt/FriendlyARM/mini6410/examples目录下找到以下示例的源代码,实际可能更多一些,下面仅选几个典型的以作指引。 嵌入式 Linux 资源丰富,我们不可能介绍到每一个细节,本文旨在提供一些嵌入式Linux 经常用到的方法,为你打开奇妙世界的大门。 注意:以下示例程序所使用的编译器为 arm-linux-gcc-4.5.1-v6-vfp,如果你使用了其他版本的交叉编译器,编译完有可能无法在开发板上运行。 要检查交叉编译器的版本类型,可在终端运行命令:arm-linux-gcc –v,如图 第 - 192 - 页
    • 声明:以下 Linux 示例程序均为友善之臂原创,我们发现有的开发板厂商或者个人修改了 copyright 说明,据为己有,虽然国内对这种抄袭行为基本没有法律约束,但我们对这种无耻的盗窃行为予以鄙视,并敬告大家要尊重原厂家的辛苦劳动。4.9.1 Hello,World! Hello,World 源代码位于位于/opt/FriendlyARM/mini6410/linux/examples/hello 目录,其源代码如下:#include <stdio.h>int main(void) { printf("hello, FriendlyARM!n");} Step1:编译 Hello,World 进入源代码目录,并执行 make: #cd /opt/FriendlyARM/mini6410/linux/examples/hello #make 最后将生成 hello 可执行文件, 使用 file 命令可以检查你生成的 hello 可执行文件是否为 ARM 体系和格式版本,能在开发板上正常运行的可执行文件一般如图所示: 第 - 193 - 页
    • Step2: 把 Hello,World 下载到开发板运行 将编译好的可执行文件下载到目标板目前主要四种方式: 第一种:通过 ftp 传送文件到开发板(推荐使用) 第二种:复制到介质(如优盘) 第三种:通过串口传送文件到开发板 第四种:通过 NFS(网络文件系统)直接运行 下面分别进行介绍: (1) 使用 ftp 传送文件(推荐使用) 说明:使用 ftp 登录目标板,把编译好的程序上传;然后修改上传后目标板上的程序的可执行属性,并执行。 首先,在 PC 端执行,如图所示 然后,在目标板一端执行,如图所示 第 - 194 - 页
    • (2) 使用优盘 说明:先把编译好的可执行程序复制到优盘,再把优盘插到目标板上并挂载它,然后把程序拷贝到目标板的可执行目录/bin 步骤: 1. 复制程序到优盘 把优盘插到 PC 的 USB 接口,执行以下命令把程序复制到优盘 #mount /dev/sda1 /mnt ;挂接优盘 #cp hello /mnt ;复制刚才编译好的程序到优盘 #umount /mnt ;卸载优盘 2. 把程序从优盘拷贝到目标板并执行 把优盘插入到开发板的 USB Host 接口,优盘会自动挂载到/udisk 目录,执行以下命令就可以运行 hello 程序了。 #cd /udisk #./hello ;执行 hello 程序 注意:如果此时强制拔出优盘,需要退回到根目录,再执行 umount /udisk 方可为下一次做好自动挂载的准备。 第 - 195 - 页
    • (3)通过串口传送文件到开发板 通过 4.2.5 章节我们学会了如何通过串口传送文件到开发板,你也可以通过相同的方法传送 hello 可执行程序,具体步骤在此不再详细描述,记得传送完毕把文件的属性改为可执行才能正常运行。 #chmod +x hello 说明:有些用户使用 USB 转串口线,因为有些转接器性能是不太好的,所以有时会出现“传输超时”或者根本无法传输到开发板的现象,因此我们建议使用 ftp 传送到开发板。 (4)通过网络文件系统 NFS 执行 Linux 中最常用的方法就是采用 NFS 来执行各种程序, 这样可以不必花费很多时间下载程序,虽然在此下载 hello 程序用不了多久,一旦您的应用程序变得越来越大,您就会发现使用 NFS 运行的方便所在。 如同前面所讲述的那样,请先按照 4.3.4 一节搭建好 NFS 服务器系统,然后在命令行输入以下命令(假定服务器的 IP 地址为 192.168.1.111) : #mount –t nfs –o nolock 192.168.1.111:/opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4 /mnt 挂接成功,您就可以进入/mnt 目录进行操作了,在您的 PC Linux 终端把 hello 复制到opt/FriendlyARM/mini6410/linux/rootfs_qtopia_qt4 目录,然后在开发板的串口终端执行 #cd /mnt #./hello4.9.2 LED 测试程序程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char 第 - 196 - 页
    • 驱动程序名称 mini6410_leds.c设备类型 misc设备名 /dev/leds测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/leds测试程序名称 led.c测试程序可执行文件名称 led测试程序在开发板中的位置说明:LED 驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载。程序清单#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>int main(int argc, char **argv){ int on; int led_no; int fd;/* 检查 led 控制的两个参数,如果没有参数输入则退出。*/ if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 || on < 0 || on > 1 || led_no < 0 || led_no > 3) { fprintf(stderr, "Usage: leds led_no 0|1n"); exit(1); }/*打开/dev/leds 设备文件*/ fd = open("/dev/leds0", 0); if (fd < 0) { fd = open("/dev/leds", 0); } if (fd < 0) { perror("open device leds"); exit(1); }/*通过系统调用 ioctl 和输入的参数控制 led*/ ioctl(fd, on, led_no);/*关闭设备句柄*/ 第 - 197 - 页
    • close(fd); return 0;} 你可以按照上面的 hello 程序的步骤编译出 led 可执行文件,然后下载到开发板运行它。4.9.3 测试按键程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char驱动程序名称 Mini6410_buttons.c设备类型 misc设备名 /dev/buttons测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/buttons测试程序源代码名称 buttons_test.c测试程序可执行文件名称 buttons测试程序在开发板中的位置说明:按键驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载。程序清单#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/select.h>#include <sys/time.h>#include <errno.h>int main(void){ int buttons_fd; char buttons[6] = {0, 0, 0, 0, 0, 0}; buttons_fd = open("/dev/buttons", 0); if (buttons_fd < 0) { perror("open device buttons"); 第 - 198 - 页
    • exit(1); } for (;;) { char current_buttons[6]; int count_of_changed_key; int i; if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) { perror("read buttons:"); exit(1); } for (i = 0, count_of_changed_key = 0; i < sizeof buttons / sizeof buttons[0]; i++) { if (buttons[i] != current_buttons[i]) { buttons[i] = current_buttons[i]; printf("%skey %d is %s", count_of_changed_key? ", ": "", i+1, buttons[i] ==0 ? "up" : "down"); count_of_changed_key++; } } if (count_of_changed_key) { printf("n"); } } close(buttons_fd); return 0;} 你可以按照上面的 hello 程序的步骤手编译出 buttons 可执行文件,然后下载到开发板运行它4.9.4 PWM 控制蜂鸣器编程示例程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char驱动程序名称 Mini6410_pwm.c设备类型 misc设备名 /dev/pwm 第 - 199 - 页
    • 测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/pwm测试程序源代码名称 pwm_test.c测试程序可执行文件名称 Pwm_test测试程序在开发板中的位置说明:PWM 控制蜂鸣器驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载程序清单#include <stdio.h>#include <termios.h>#include <unistd.h>#include <stdlib.h>#define PWM_IOCTL_SET_FREQ 1#define PWM_IOCTL_STOP 2#define ESC_KEY 0x1bstatic int getch(void){ struct termios oldt,newt; int ch; if (!isatty(STDIN_FILENO)) { fprintf(stderr, "this problem should be run at a terminaln"); exit(1); } // save terminal setting if(tcgetattr(STDIN_FILENO, &oldt) < 0) { perror("save the terminal setting"); exit(1); } // set terminal as need newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); if(tcsetattr(STDIN_FILENO,TCSANOW, &newt) < 0) { perror("set terminal"); exit(1); } ch = getchar(); 第 - 200 - 页
    • // restore termial setting if(tcsetattr(STDIN_FILENO,TCSANOW,&oldt) < 0) { perror("restore the termial setting"); exit(1); } return ch;}static int fd = -1;static void close_buzzer(void);static void open_buzzer(void){ fd = open("/dev/pwm", 0); if (fd < 0) { perror("open pwm_buzzer device"); exit(1); } // any function exit call will stop the buzzer atexit(close_buzzer);}static void close_buzzer(void){ if (fd >= 0) { ioctl(fd, PWM_IOCTL_STOP); close(fd); fd = -1; }}static void set_buzzer_freq(int freq){ // this IOCTL command is the key to set frequency int ret = ioctl(fd, PWM_IOCTL_SET_FREQ, freq); if(ret < 0) { perror("set the frequency of the buzzer"); exit(1); } 第 - 201 - 页
    • }static void stop_buzzer(void){ int ret = ioctl(fd, PWM_IOCTL_STOP); if(ret < 0) { perror("stop the buzzer"); exit(1); }}int main(int argc, char **argv){ int freq = 1000 ; open_buzzer(); printf( "nBUZZER TEST ( PWM Control )n" ); printf( "Press +/- to increase/reduce the frequency of the BUZZERn" ) ; printf( "Press ESC key to Exit this programnn" ); while( 1 ) { int key; set_buzzer_freq(freq); printf( "tFreq = %dn", freq ); key = getch(); switch(key) { case +: if( freq < 20000 ) freq += 10; break; case -: if( freq > 11 ) freq -= 10 ; break; 第 - 202 - 页
    • case ESC_KEY: case EOF: stop_buzzer(); exit(0); default: break; } }} 你可以按照上面的 hello 程序的步骤手编译出 buttons 可执行文件,然后下载到开发板运行它4.9.5 I2C-EEPROM 编程示例程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/i2c/busses驱动程序名称 I2c-s3c2410.c设备类型 字符设备设备名 /dev/i2c/0测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/i2c测试程序源代码名称 eeprog.c 24cXX.c测试程序可执行文件名称 i2c测试程序在开发板中的位置说明:I2C 驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载。程序清单注意:以下程序还需同目录下 24cXX.c 程序的支持#include <stdio.h>#include <fcntl.h>#include <getopt.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include "24cXX.h" 第 - 203 - 页
    • #define usage_if(a) do { do_usage_if( a , __LINE__); } while(0);void do_usage_if(int b, int line){ const static char *eeprog_usage = "I2C-24C08(256 bytes) Read/Write Program, ONLY FOR TEST!n" "FriendlyARM Computer Tech. 2009n"; if(!b) return; fprintf(stderr, "%sn[line %d]n", eeprog_usage, line); exit(1);}#define die_if(a, msg) do { do_die_if( a , msg, __LINE__); } while(0);void do_die_if(int b, char* msg, int line){ if(!b) return; fprintf(stderr, "Error at line %d: %sn", line, msg); fprintf(stderr, " sysmsg: %sn", strerror(errno)); exit(1);}static int read_from_eeprom(struct eeprom *e, int addr, int size){ int ch, i; for(i = 0; i < size; ++i, ++addr) { die_if((ch = eeprom_read_byte(e, addr)) < 0, "read error"); if( (i % 16) == 0 ) printf("n %.4x| ", addr); else if( (i % 8) == 0 ) printf(" "); printf("%.2x ", ch); fflush(stdout); } fprintf(stderr, "nn"); return 0;} 第 - 204 - 页
    • static int write_to_eeprom(struct eeprom *e, int addr){ int i; for(i=0, addr=0; i<256; i++, addr++) { if( (i % 16) == 0 ) printf("n %.4x| ", addr); else if( (i % 8) == 0 ) printf(" "); printf("%.2x ", i); fflush(stdout); die_if(eeprom_write_byte(e, addr, i), "write error"); } fprintf(stderr, "nn"); return 0;}int main(int argc, char** argv){ struct eeprom e; int op; op = 0; usage_if(argc != 2 || argv[1][0] != - || argv[1][2] != 0); op = argv[1][1]; fprintf(stderr, "Open /dev/i2c/0 with 8bit moden"); die_if(eeprom_open("/dev/i2c/0", 0x50, EEPROM_TYPE_8BIT_ADDR, &e) < 0, "unable to open eeprom device file " "(check that the file exists and that its readable)"); switch(op) { case r: fprintf(stderr, " Reading 256 bytes from 0x0n"); read_from_eeprom(&e, 0, 256); break; case w: fprintf(stderr, " Writing 0x00-0xff into 24C08 n"); 第 - 205 - 页
    • write_to_eeprom(&e, 0); break; default: usage_if(1); exit(1); } eeprom_close(&e); return 0;}4.9.6 串口编程示例程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/serial/驱动程序名称 S3c6400.c设备名 /dev/ttySAC0,1,2,4测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/comtest测试程序源代码名称 comtest.c测试程序可执行文件名称 armcomtest测试程序在开发板中的位置说明:测试程序编译后可得到 x86 版本和 arm 版本,其源代码是完全一样的程序清单说明:comtest 程序是友善之臂早期开发的一个串口测试程序,它其实是一个十分简易的串口终端程序,类似于 linux 中的 minicom,该程序与硬件无关,因此相同的代码不仅适用于任何 Arm-linux 开发板平台,也可以在 PC linux 上运行使用,方法都是完全一样的。通过该程序你可以了解串口编程的一些常见关键设置,对于 linux 下串口编程很有帮助和借鉴意义,该程序虽然十分短小,但设计极为严谨巧妙,我们对此就不详细解释了,下面是它的完整源代码: 注:本程序版权归属友善之臂所有,任何单位或个人转载或复制均需注明出处,且不得用于商业用途。# include <stdio.h># include <stdlib.h># include <termio.h># include <unistd.h># include <fcntl.h># include <getopt.h># include <time.h> 第 - 206 - 页
    • # include <errno.h># include <string.h>static void Error(const char *Msg){ fprintf (stderr, "%sn", Msg); fprintf (stderr, "strerror() is %sn", strerror(errno)); exit(1);}static void Warning(const char *Msg){ fprintf (stderr, "Warning: %sn", Msg);}static int SerialSpeed(const char *SpeedString){ int SpeedNumber = atoi(SpeedString);# define TestSpeed(Speed) if (SpeedNumber == Speed) return B##Speed TestSpeed(1200); TestSpeed(2400); TestSpeed(4800); TestSpeed(9600); TestSpeed(19200); TestSpeed(38400); TestSpeed(57600); TestSpeed(115200); TestSpeed(230400); Error("Bad speed"); return -1;}static void PrintUsage(void){ fprintf(stderr, "comtest - interactive program of comm portn"); fprintf(stderr, "press [ESC] 3 times to quitnn"); fprintf(stderr, "Usage: comtest [-d device] [-t tty] [-s speed] [-7] [-c] [-x] [-o] [-h]n"); fprintf(stderr, " -7 7 bitn"); 第 - 207 - 页
    • fprintf(stderr, " -x hex moden"); fprintf(stderr, " -o output to stdout toon"); fprintf(stderr, " -c stdout output use colorn"); fprintf(stderr, " -h print this helpn"); exit(-1);}static inline void WaitFdWriteable(int Fd){ fd_set WriteSetFD; FD_ZERO(&WriteSetFD); FD_SET(Fd, &WriteSetFD); if (select(Fd + 1, NULL, &WriteSetFD, NULL, NULL) < 0) { Error(strerror(errno)); }}int main(int argc, char **argv){ int CommFd, TtyFd; struct termios TtyAttr; struct termios BackupTtyAttr; int DeviceSpeed = B115200; int TtySpeed = B115200; int ByteBits = CS8; const char *DeviceName = "/dev/ttyS0"; const char *TtyName = "/dev/tty"; int OutputHex = 0; int OutputToStdout = 0; int UseColor = 0; opterr = 0; for (;;) { int c = getopt(argc, argv, "d:s:t:7xoch"); if (c == -1) break; switch(c) { 第 - 208 - 页
    • case d: DeviceName = optarg; break; case t: TtyName = optarg; break; case s: if (optarg[0] == d) { DeviceSpeed = SerialSpeed(optarg + 1); } else if (optarg[0] == t) { TtySpeed = SerialSpeed(optarg + 1); } else TtySpeed = DeviceSpeed = SerialSpeed(optarg); break;case o: OutputToStdout = 1; break;case 7: ByteBits = CS7; break; case x: OutputHex = 1; break;case c: UseColor = 1; break; case ?: case h: default: PrintUsage(); } } if (optind != argc) PrintUsage();CommFd = open(DeviceName, O_RDWR, 0);if (CommFd < 0)Error("Unable to open device");if (fcntl(CommFd, F_SETFL, O_NONBLOCK) < 0) Error("Unable set to NONBLOCK mode"); 第 - 209 - 页
    • memset(&TtyAttr, 0, sizeof(struct termios)); TtyAttr.c_iflag = IGNPAR; TtyAttr.c_cflag = DeviceSpeed | HUPCL | ByteBits | CREAD | CLOCAL; TtyAttr.c_cc[VMIN] = 1; if (tcsetattr(CommFd, TCSANOW, &TtyAttr) < 0) Warning("Unable to set comm port"); TtyFd = open(TtyName, O_RDWR | O_NDELAY, 0); if (TtyFd < 0) Error("Unable to open tty"); TtyAttr.c_cflag = TtySpeed | HUPCL | ByteBits | CREAD | CLOCAL; if (tcgetattr(TtyFd, &BackupTtyAttr) < 0) Error("Unable to get tty"); if (tcsetattr(TtyFd, TCSANOW, &TtyAttr) < 0) Error("Unable to set tty"); for (;;) { unsigned char Char = 0; fd_set ReadSetFD; void OutputStdChar(FILE *File) { char Buffer[10]; int Len = sprintf(Buffer, OutputHex ? "%.2X " : "%c", Char); fwrite(Buffer, 1, Len, File); }FD_ZERO(&ReadSetFD); FD_SET(CommFd, &ReadSetFD); FD_SET( TtyFd, &ReadSetFD);# define max(x,y) ( ((x) >= (y)) ? (x) : (y) ) if (select(max(CommFd, TtyFd) + 1, &ReadSetFD, NULL, NULL, NULL) < 0) { Error(strerror(errno)); 第 - 210 - 页
    • }# undef max if (FD_ISSET(CommFd, &ReadSetFD)) { while (read(CommFd, &Char, 1) == 1) { WaitFdWriteable(TtyFd); if (write(TtyFd, &Char, 1) < 0) { Error(strerror(errno)); } if (OutputToStdout) { if (UseColor) fwrite("x1b[01;34m", 1, 8, stdout); OutputStdChar(stdout); if (UseColor) fwrite("x1b[00m", 1, 8, stdout); fflush(stdout); } } } if (FD_ISSET(TtyFd, &ReadSetFD)) { while (read(TtyFd, &Char, 1) == 1) { static int EscKeyCount = 0; WaitFdWriteable(CommFd); if (write(CommFd, &Char, 1) < 0) { Error(strerror(errno)); } if (OutputToStdout) { if (UseColor) fwrite("x1b[01;31m", 1, 8, stderr); OutputStdChar(stderr); if (UseColor) fwrite("x1b[00m", 1, 8, stderr); fflush(stderr); } if (Char == x1b) { EscKeyCount ++; if (EscKeyCount >= 3) 第 - 211 - 页
    • goto ExitLabel; } else EscKeyCount = 0; } } }ExitLabel: if (tcsetattr(TtyFd, TCSANOW, &BackupTtyAttr) < 0) Error("Unable to set tty"); return 0;}4.9.7 UDP 网络编程程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/net/驱动程序名称 dm9000.c该驱动的主设备号 无设备名 eth0 (网络设备并不在/dev 目录中出现)测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/udptak测试程序源代码名称 udptalk.c测试程序可执行文件名称 udptalk.c说明:测试程序编译后可得到 x86 版本和 arm 版本,其源代码是完全一样的程序原理分析 TCP/IP 提供了无连接的传输层协议:UDP(User Datagram Protocol,即用户数据报协议)。UDP与 TCP 有很大的区别,因为无连接的 socket 编程与面向连接的 socket 编程也有很大的差异。由于不用建立连接,因此每个发送个接收的数据报都包含了发送方和接收方的地址信息。 在发送和接收数据之前, 先要建立一个数据报方式的套接字, socket 的类型为 SOCK_DGRAM, 该用如下的调用产生: sockfd=socket(AF_INET, SOCK_DGRAM, 0); 由于不需要建立连接,因此产生 socket 后就可以直接发送和接收了。当然,要接收数据报也必须绑定一个端口,否则发送方无法得知要发送到哪个端口。Sendto 和 recvfrom 两个系统调用分别用于发送和接收数据报,其调用格式为: int sendto(int s, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen); int recvfrom(int, s, void *buf, int len, unsigned int flags, struct sockaddr *from, int fromlen); 第 - 212 - 页
    • 其中 s 为所使用的 socket, 和 buf 分别为发送和接收的缓冲区指针, 为缓冲区的长度, msg len flags为选项标志,此处还用不到,设为 0 即可。to 和 from 就是发送的目的地址和接收的来源地址,包含了IP 地址和端口信息。tolen 和 fromlen 分别是 to 和 from 这两个 socket 地址结构的长度。这两个函数的返回值就是实际发送和接收的字节数,返回-1 表示出错。 使用无连接方式通信的基本过程如图所示。 UDP 通信的基本过程 上图描述的是通信双方都绑定自己地址端口的情形,但在某些情况下,也可能有一方不用绑定地址和端口。不绑定的一方的地址和端口由内核分配。由于对方无法预先知道不绑定的一方的端口和 IP地址(假设主机有多个端口,这些端口分配了不同的 IP 地址),因此只能由不绑定的一方先发出数据报,对方根据收到的数据报中的来源地址就可以确定回送数据报所需要的发送地址了。显然,在这种情况下对方必须绑定地址和端口,并且通信只能由非绑定方发起。 与 read()和 write()相似,进程阻塞在 recvfrom()和 sendto()中也会发生。但与 TCP 方式不同的是,接收到一个字节数为 0 的数据报是有可能的,应用程序完全可以将 sendto()中的 msg 设为 NULL,同时将 len 设为 0。程序清单/* * udptalk :Example for Matrix V ;说明:本程序同样适用于 mini2440 * * Copyright (C) 2004 capbily - friendly-arm * capbily@hotmail.com */#include <sys/types.h>#include <sys/socket.h> 第 - 213 - 页
    • #include <arpa/inet.h>#include <stdio.h>#define BUFLEN 255int main(int argc, char **argv){ struct sockaddr_in peeraddr, /*存放谈话对方 IP 和端口的 socket 地址*/ localaddr;/*本端 socket 地址*/ int sockfd; char recmsg[BUFLEN+1]; int socklen, n; if(argc!=5){ printf("%s <dest IP address> <dest port> <source IP address> <source port>n",argv[0]); exit(0); } sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd<0){ printf("socket creating err in udptalkn"); exit(1); } socklen = sizeof(struct sockaddr_in); memset(&peeraddr, 0, socklen); peeraddr.sin_family=AF_INET; peeraddr.sin_port=htons(atoi(argv[2])); if(inet_pton(AF_INET, argv[1], &peeraddr.sin_addr)<=0){ printf("Wrong dest IP address!n"); exit(0); } memset(&localaddr, 0, socklen); localaddr.sin_family=AF_INET; if(inet_pton(AF_INET, argv[3], &localaddr.sin_addr)<=0){ printf("Wrong source IP address!n"); exit(0); } localaddr.sin_port=htons(atoi(argv[4])); if(bind(sockfd, &localaddr, socklen)<0){ 第 - 214 - 页
    • printf("bind local address err in udptalk!n"); exit(2); } if(fgets(recmsg, BUFLEN, stdin) == NULL) exit(0); if(sendto(sockfd, recmsg, strlen(recmsg), 0, &peeraddr, socklen)<0){ printf("sendto err in udptalk!n"); exit(3); } for(;;){ /*recv&send message loop*/ n = recvfrom(sockfd, recmsg, BUFLEN, 0, &peeraddr, &socklen); if(n<0){ printf("recvfrom err in udptalk!n"); exit(4); }else{ /*成功接收到数据报*/ recmsg[n]=0; printf("peer:%s", recmsg); } if(fgets(recmsg, BUFLEN, stdin) == NULL) exit(0); if(sendto(sockfd, recmsg, strlen(recmsg), 0, &peeraddr, socklen)<0){ printf("sendto err in udptalk!n"); exit(3); } } } 测试 将 udptalk.c 编 译 好 后 就 可 以 运 行 了 ,/opt/FriendlyARM/mini6410/linux/examples/udptalk 目录下的 Makefile 指定了两个编译目标可执行文件,一个用于在主机端的 x86-udptalk,一个是用于开发板的 arm-udptalk,运行 make命令将把这两个程序一起编译出来。 可以把 arm-udptalk 使用上面介绍的方法下载到开发板中(预装的 Linux 不含该程序),假设主机的 IP 地址为 192.168.1.108,开发板的 IP 地址为192.168.1.230。 在主机的终端上输入: #./x86-udptalk 192.168.1.230 2000 192.168.1.108 2000 在开发板上的终端输入 #arm-udptalk 192.168.1.108 2000 192.168.1.230 2000 第 - 215 - 页
    • 则运行结果分别如图所示: 在主机上运行 x86-udptalk 第 - 216 - 页
    • 在开发板上运行 arm-udptalk4.9.8 数学函数库调用示例程序源代码说明测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/math测试程序源代码名称 mathtest.c测试程序可执行文件名称 mathtest程序清单注意:使用数学函数的关键是要包含其头文件 math.h,并且在编译的时候加入数学函数库libm。#include <stdio.h>#include <stdlib.h>#include <math.h> ;注意:一定要包含此头文件int main(void){ double a=8.733243; 第 - 217 - 页
    • printf("sqrt(%f)=%fn", a, sqrt(a)); return 0;}Makefile 内容:CROSS=arm-linux-all: mathtest#注意:该处包含了数学函数库 libm, 红色部分mathtest: $(CROSS)gcc -o mathtest main.c -lmclean: @rm -vf mathtest *.o *~ 你可以按照上面的 hello 程序的步骤手工编译出 mathtest 可执行文件,然后下载到开发板运行它4.9.9 线程编程示例程序源代码说明测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/pthread测试程序源代码名称 pthread_test.c测试程序可执行文件名称 pthread_test程序清单注意:使用线程的关键是要包含其头文件 pthread.h,并且在编译的时候加入线程库libpthread。#include<stddef.h>#include<stdio.h>#include<unistd.h>#include"pthread.h" ;注意:一定要包含此头文件void reader_function(void);void writer_function(void);char buffer;int buffer_has_item=0;pthread_mutex_t mutex;main() 第 - 218 - 页
    • { pthread_t reader; pthread_mutex_init(&mutex,NULL); pthread_create(&reader,NULL,(void*)&reader_function,NULL); writer_function();}void writer_function(void){ while(1) { pthread_mutex_lock(&mutex); if(buffer_has_item==0) { buffer=a; printf("make a new itemn"); buffer_has_item=1; } pthread_mutex_unlock(&mutex); }}void reader_function(void){ while(1) { pthread_mutex_lock(&mutex); if(buffer_has_item==1) { buffer=0; printf("consume itemn"); buffer_has_item=0; } pthread_mutex_unlock(&mutex); }}Makefile 内容CROSS=arm-linux-all: pthread#注意:该处包含了线程库 libphread, 红色部分 第 - 219 - 页
    • pthread: $(CROSS)gcc -static -o pthread main.c -lpthreadclean: @rm -vf pthread *.o *~ 你可以按照上面的 hello 程序的步骤手工编译出 pthread 可执行文件,然后下载到开发板运行它4.9.10 管道应用编程示例-网页控制 LED程序源代码说明测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/led-player测试程序源代码名称 led-player.c测试程序可执行文件名称 led-player原理说明 开机后我们可以通过网页发送命令控制开发板上的 LED 闪烁模式,其实这是进程间通信共享资源的一个典型例子,进程间通信就是 IPC(InterProcess Communication),进程间通信的目的一般有: (1)数据传输 (2)共享数据 (3)通知事件 (4)资源共享 (5)进程控制. Linux 支持多种 IPC 机制,信号和管道是其中的两个。 关于更详细的进程间通信的介绍, 一般 Linux编程的书上都有介绍,在此我们不多说了。 通过网页来控制 LED 的闪烁模式就是通过管道机制来实现的,其中 LED 是共享资源,led-player是一个后台程序,它启动的时候就创建了一个命名管道/tmp/ led-control(当然该管道也可以通过命令mknod 来创建,那样程序就要改写了,有兴趣的可以自己试试), 并一直监测输入该管道的数据,根据不同的参数(模式 type 和周期 period)来改变 LED 的显示模式;leds.cgi 是一个网关程序,它接收从网页发送过来的字符形式指令(ping 代表跑马灯模式或者乒乓模式,counter 代表计数器模式,stop 代表停止模式,slow 代表周期为 0.25m,normal 代表周期为 0.125m,fast 代表周期为 0.0625m),并对这些指令进行赋值转换为实际数字,然后调用 echo 命令输送到管道/tmp/ led-control 以此实现对 LED 的控制,以下是各自的程序清单。程序清单#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> 第 - 220 - 页
    • #include <sys/select.h>#include <sys/time.h>#include <string.h>static int led_fd;static int type = 1;static void push_leds(void){ static unsigned step; unsigned led_bitmap; int i; switch(type) { case 0: if (step >= 6) { step = 0; } if (step < 3) { led_bitmap = 1 << step; } else { led_bitmap = 1 << (6 - step); } break; case 1: if (step > 255) { step = 0; } led_bitmap = step; break; default: led_bitmap = 0; } step++; for (i = 0; i < 4; i++) { ioctl(led_fd, led_bitmap & 1, i); led_bitmap >>= 1; }} 第 - 221 - 页
    • int main(void){ int led_control_pipe; int null_writer_fd; // for read endpoint not blocking when control process exit double period = 0.5; led_fd = open("/dev/leds0", 0); if (led_fd < 0) { led_fd = open("/dev/leds", 0); } if (led_fd < 0) { perror("open device leds"); exit(1); } unlink("/tmp/led-control"); mkfifo("/tmp/led-control", 0666); led_control_pipe = open("/tmp/led-control", O_RDONLY | O_NONBLOCK); if (led_control_pipe < 0) { perror("open control pipe for read"); exit(1); } null_writer_fd = open("/tmp/led-control", O_WRONLY | O_NONBLOCK); if (null_writer_fd < 0) { perror("open control pipe for write"); exit(1); } for (;;) { fd_set rds; struct timeval step; int ret; FD_ZERO(&rds); FD_SET(led_control_pipe, &rds); step.tv_sec = period; step.tv_usec = (period - step.tv_sec) * 1000000L; ret = select(led_control_pipe + 1, &rds, NULL, NULL, &step); 第 - 222 - 页
    • if (ret < 0) { perror("select"); exit(1); } if (ret == 0) { push_leds(); } else if (FD_ISSET(led_control_pipe, &rds)) { static char buffer[200]; for (;;) { char c; int len = strlen(buffer); if (len >= sizeof buffer - 1) { memset(buffer, 0, sizeof buffer); break; } if (read(led_control_pipe, &c, 1) != 1) { break; } if (c == r) { continue; } if (c == n) { int tmp_type; double tmp_period; if (sscanf(buffer,"%d%lf", &tmp_type, &tmp_period) == 2) { type = tmp_type; period = tmp_period; } fprintf(stderr, "type is %d, period is %lfn", type, period); memset(buffer, 0, sizeof buffer); break; } buffer[len] = c; } } } close(led_fd); return 0;} 第 - 223 - 页
    • 使用 make 指令可以直接编译出 led-player 可执行文件,它被作为一个服务器放置在开发板的/sbin 目录中。 Leds.cgi 网关程序源代码(该程序在开发板上的位置: /www/leds.cgi),可见该网关程序其实就是一个 shell 脚本,它被网页 leds.html 调用为一个执行“action” ,该脚本清单如下:Leds.cgi 脚本清单#!/bin/shtype=0period=1case $QUERY_STRING in *ping*) type=0 ;; *counter*) type=1 ;; *stop*) type=2 ;;esaccase $QUERY_STRING in *slow*) period=0.25 ;; *normal*) period=0.125 ;; *fast*) period=0.0625 ;;esac/bin/echo $type $period > /tmp/led-controlecho "Content-type: text/html; charset=gb2312" 第 - 224 - 页
    • echo/bin/cat led-result.templateexit 04.9.11 基于 C++的 Hello,World程序源代码说明测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/c++测试程序源代码名称 cplus.c++测试程序可执行文件名称 cplus程序清单#include <iostream>#include <cstring>using namespace std;class String{private: char *str;public: String(char *s) { int lenght=strlen(s); str = new char[lenght+1]; strcpy(str, s); } ~String() { cout << "Deleting str.n"; delete[] str; } void display() { cout << str <<endl; }};int main(void){ 第 - 225 - 页
    • String s1="I like FriendlyARM.";cout << "s1=";s1.display();return 0;double num, ans;cout << "Enter num:";} 你可以按照上面的 hello 程序的步骤手工编译出 cplus 可执行文件,然后下载到开发板运行它4.10 嵌入式 Linux 驱动程序示例 上一节我们介绍了一个简单的 Linux 程序 Hello,World,它是运行于用户态的应用程序,现在我们先从一个运行于内核态的 Hello, World 程序开始,介绍驱动程序的编写和使用。4.10.1 Hello,Module-最简单的嵌入式 Linux 驱动程序模块程序源代码说明源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char源代码文件名称 Mini6410_hello_module.c该驱动的主设备号 无设备名 无测试程序源代码目录 无测试程序名称 无测试程序可执行文件名称 无说明:该驱动装载后不会在 dev 下创建任何设备节点。程序清单#include <linux/kernel.h>#include <linux/module.h>static int __init mini6410_hello_module_init(void){ printk("Hello, Mini6410 module is installed !n"); return 0;} 第 - 226 - 页
    • static void __exit mini6410_hello_module_cleanup(void){ printk("Good-bye, Mini6410 module was removed!n");}module_init(mini6410_hello_module_init);module_exit(mini6410_hello_module_cleanup);MODULE_LICENSE("GPL"); (1)把 Hello,Module 加入内核代码树,并编译 一般编译 2.6 版本的驱动模块需要把驱动代码加入内核代码树,并做相应的配置,如下步骤(注意:实际上以下步骤均已经做好,你只需要打开检查一下直接编译就可以了): Step1:编辑配置文件 Kconfig,加入驱动选项,使之在 make menuconfig 的时候出现 打开 linux-2.6.36/drivers/char/Kconfig 文件,添加如图所示: 保存退出,这时在 linux-2.6.36 目录位置运行一下 make menuconfig 就可以在 DeviceDrivers Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,此意为要把该选项编译为模块方式;再按下空格会变为<*>,意为要把该选项编译到内核中,在此我们选择<M>,如图,如果没有出现,请检查你是否已经装载了缺省的内核配置文件,见 4.5.1 章节。 第 - 227 - 页
    • Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把 mini6410_hello_module.c 编译进去的,还需要在 Makefile 中把内核配置选项和真正的源代码联系起来, 打开 linux-2.6.36/drivers/char/Makefile,如图添加并保存退出: Step3:这时回到 linux-2.6.36 源代码根目录位置,执行 make modules,就可以生成我们所需要的内核模块文件 mini6410_hello_module.ko 了,注意:执行 make modules 之前,必须先执行 make zImage,只需一次就可以了。 至此,我们已经完成了模块驱动的编译。 第 - 228 - 页
    • (2)把 Hello, Module 下载到开发板并安装使用 在此使用 ftp 命令把编译出的 mini6410_hello_module.ko 下载到板子中,并把它移动到/lib/modules/2.6.36-FriendlyARM 目录然后在板子中现在执行 #modprobe mini6410_hello_module 可以看到该模块已经被装载了(注意:使用 modprobe 命令加载模块不需要加“ko”尾缀) 再执行以下命令,可以看到该模块被卸载 #rmmod mini6410_hello_module 注 意 : 要 能 够 正 常 卸 载 模 块 , 必 须 把 模 块 放 入 开 发 板 的/lib/modules/2.6.36-FriendlyARM 目录 另外需要注意的是:因为我们的内核有时会升级更新,如果内核版本已经改变,请依照具体的内核版本重新建立一个模块存放目录,在此为/lib/modules/2.6.36-FriendlyARM 整个过程如下图: 第 - 229 - 页
    • 4.10.2 LED 驱动程序 在上一小节,我们介绍了最简单的 Hello,Module 驱动程序模块, 它只是从串口输出一些信息,并未对应板上的硬件进行操作,在嵌入式 Linux 系统中,大部分的硬件都需要类似的驱动才能操作,比如触摸屏、网卡、音频等,在这里我们介绍的是一些简单典型的例子,实际上复杂的驱动都有参考代码,不必从头写驱动。从本小节开始,我们将介绍一些和硬件密切相关的驱动,它们才是真正的嵌入式 Linux 驱动。 要写实际的驱动,就必须了解相关的硬件资源,比如用到的寄存器,物理地址,中断等,在这里,LED 是一个很简单的例子,它用到了如下硬件资源。 开发板上所用到的 4 个 LED 的硬件资源LED 对应的 IO 寄存器名称 对应的 CPU 引脚LED1 GPK4 R23LED2 GPK5 R22LED3 GPK6 R24LED4 GPK7 R25 要操作所用到的 IO 口,就要设置它们所用到的寄存器,我们需要调用一些现成的函数或者宏, 在此用到的是 readl 和 writel, 它们将直接对相应的寄存器执行读取和写入的操作。在下面的驱动程序清单中,你可以看到它们被调用的情况。除此之外,你可能还需要调用一些 和 设 备 驱 动 密 切 相 关 的 基 本 函 数 , 如 注 册 设 备 misc_register , 填 写 驱 动 函 数 结 构file_operations,以及像 Hello,Module 中那样的 module_init 和 module_exit 函数等。 有些函数并不是必须的,随着你对 Linux 驱动开发的进一步了解和阅读更多的代码,你自然明白。 程序源代码说明 第 - 230 - 页
    • 驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char驱动程序名称 Mini6410_leds.c设备号 Led 属于 misc 设备,设备自动生成设备名 /dev/leds测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/leds测试程序名称 led.c测试程序可执行文件名称 led说明:LED 驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载。程序清单#include <linux/miscdevice.h>#include <linux/delay.h>#include <asm/irq.h>//#include <mach/regs-gpio.h>#include <mach/hardware.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/mm.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/delay.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/errno.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/string.h>#include <linux/list.h>#include <linux/pci.h>#include <asm/uaccess.h>#include <asm/atomic.h>#include <asm/unistd.h>#include <mach/map.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio-bank-e.h>#include <mach/gpio-bank-k.h> 第 - 231 - 页
    • #define DEVICE_NAME "leds"static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ switch(cmd) { unsigned tmp; case 0: case 1: if (arg > 4) { return -EINVAL; } tmp = readl(S3C64XX_GPKDAT); tmp &= ~(1 << (4 + arg)); tmp |= ( (!cmd) << (4 + arg) ); writel(tmp, S3C64XX_GPKDAT); //printk (DEVICE_NAME": %d %dn", arg, cmd); return 0; default: return -EINVAL; }}static struct file_operations dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = sbc2440_leds_ioctl,};static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops,};static int __init dev_init(void){ int ret; { unsigned tmp; 第 - 232 - 页
    • tmp = readl(S3C64XX_GPKCON); tmp = (tmp & ~(0xffffU<<16))|(0x1111U<<16); writel(tmp, S3C64XX_GPKCON); tmp = readl(S3C64XX_GPKDAT); tmp |= (0xF << 4); writel(tmp, S3C64XX_GPKDAT); } ret = misc_register(&misc); printk (DEVICE_NAME"tinitializedn"); return ret;}static void __exit dev_exit(void){ misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("FriendlyARM Inc.");4.10.3 按键驱动程序程序源代码说明驱动源代码所在目录 /opt/FriendlyARM/mini6410/linux/linux-2.6.36/drivers/char驱动程序名称 Mini6410_buttons.c该驱动的主设备号 Misc 设备,设备号将自动生成设备名 /dev/buttons测试程序源代码目录 /opt/FriendlyARM/mini6410/linux/examples/buttons测试程序源代码名称 buttons_test.c测试程序可执行文件名称 buttons说明:按键驱动已经被编译到缺省内核中,因此不能再使用 insmod 方式加载。开发板所用到的按键资源按键 对应的 IO 寄存器名称 对应的中断 第 - 233 - 页
    • K1 GPN0 EINT0K2 GPN1 EINT1K3 GPN2 EINT2K4 GPN3 EINT3K5 GPN4 EINT4K6 GPN5 EINT5K7 GPL11 EINT19K8 GPL12 EINT20程序清单#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/poll.h>#include <linux/irq.h>#include <asm/irq.h>#include <asm/io.h>#include <linux/interrupt.h>#include <asm/uaccess.h>#include <mach/hardware.h>#include <linux/platform_device.h>#include <linux/cdev.h>#include <linux/miscdevice.h>#include <mach/map.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <plat/gpio-cfg.h>#include <mach/gpio-bank-n.h>#include <mach/gpio-bank-l.h>#define DEVICE_NAME "buttons"struct button_irq_desc { int irq; int number; char *name;}; 第 - 234 - 页
    • static struct button_irq_desc button_irqs [] = { {IRQ_EINT( 0), 0, "KEY0"}, {IRQ_EINT( 1), 1, "KEY1"}, {IRQ_EINT( 2), 2, "KEY2"}, {IRQ_EINT( 3), 3, "KEY3"}, {IRQ_EINT( 4), 4, "KEY4"}, {IRQ_EINT( 5), 5, "KEY5"}, {IRQ_EINT(19), 6, "KEY6"}, {IRQ_EINT(20), 7, "KEY7"},};static volatile char key_values [] = {0, 0, 0, 0, 0, 0, 0, 0};static DECLARE_WAIT_QUEUE_HEAD(button_waitq);static volatile int ev_press = 0;static irqreturn_t buttons_interrupt(int irq, void *dev_id){ struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id; int down; int number; unsigned tmp; udelay(0); number = button_irqs->number; switch(number) { case 0: case 1: case 2: case 3: case 4: case 5: tmp = readl(S3C64XX_GPNDAT); down = !(tmp & (1<<number)); break; case 6: case 7: tmp = readl(S3C64XX_GPLDAT); down = !(tmp & (1 << (number + 5))); break; default: down = 0; } 第 - 235 - 页
    • if (down != (key_values[number] & 1)) { key_values[number] = 0 + down; ev_press = 1; wake_up_interruptible(&button_waitq); } return IRQ_RETVAL(IRQ_HANDLED);}static int s3c64xx_buttons_open(struct inode *inode, struct file *file){ int i; int err = 0; for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) { if (button_irqs[i].irq < 0) { continue; } err = request_irq(button_irqs[i].irq, buttons_interrupt, IRQ_TYPE_EDGE_BOTH, button_irqs[i].name, (void *)&button_irqs[i]); if (err) break; } if (err) { i--; for (; i >= 0; i--) { if (button_irqs[i].irq < 0) { continue; } disable_irq(button_irqs[i].irq); free_irq(button_irqs[i].irq, (void *)&button_irqs[i]); } return -EBUSY; } ev_press = 1; 第 - 236 - 页
    • return 0;}static int s3c64xx_buttons_close(struct inode *inode, struct file *file){ int i; for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) { if (button_irqs[i].irq < 0) { continue; } free_irq(button_irqs[i].irq, (void *)&button_irqs[i]); } return 0;}static int s3c64xx_buttons_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){ unsigned long err; if (!ev_press) { if (filp->f_flags & O_NONBLOCK) return -EAGAIN; else wait_event_interruptible(button_waitq, ev_press); } ev_press = 0; err = copy_to_user((void *)buff, (const void *)(&key_values), min(sizeof(key_values), count)); return err ? -EFAULT : min(sizeof(key_values), count);}static unsigned int s3c64xx_buttons_poll( struct file *file, struct poll_table_struct *wait){ unsigned int mask = 0; 第 - 237 - 页
    • poll_wait(file, &button_waitq, wait); if (ev_press) mask |= POLLIN | POLLRDNORM; return mask;}static struct file_operations dev_fops = { .owner = THIS_MODULE, .open = s3c64xx_buttons_open, .release = s3c64xx_buttons_close, .read = s3c64xx_buttons_read, .poll = s3c64xx_buttons_poll,};static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops,};static int __init dev_init(void){ int ret; ret = misc_register(&misc); printk (DEVICE_NAME"tinitializedn"); return ret;}static void __exit dev_exit(void){ misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL"); 第 - 238 - 页
    • MODULE_AUTHOR("FriendlyARM Inc.");4.11 编译 Qtopia-2.2.0 因为配置编译 Qtopia-2.2.0 的过程比较复杂,为了便于初学者学习和使用方便,我们把配置和编译的步骤制作成一个 build 脚本,只要执行该脚本即可编译整个 Qtopia 平台和应其自带的各个小程序;通过”run”脚本则可以运行它们,x86 和 arm 版本的步骤基本相同,而脚本内容则有稍微不同,下面是详细的步骤。4.11.1 解压安装源代码 见 4.4.1 章节4.11.2 编译和运行 x86 版本的 Qtopia-2.2.0 敬告:我们的软件开发和测试全部基于Fedora9 平台做开发,所有的配置和编译脚本也基于此平台,我们没有在其他平台上测试过。如果你对Linux开发佷熟悉,相信你会根据错误提示逐步找到原因并解决,它们一般是你选用的平台缺少了某些库文件或者工具等原因造成 的 ; 否 则 , 我 们 建 议 初 学 者 使 用 和 我 们 一 致 的 平 台 , 即 Fedora 9( 全 称 为 :Fedora-9-i386-DVD.iso) , 你 可 以 在 其 官 方 网 站 下 载(ftp://download.fedora.redhat.com/pub/fedora/linux/releases/9/Fedora/i386/iso/Fedora-9-i386-DVD.iso ,不保证长期有效),也可以在其他地方获取,它们都是一样的,安装时请务必参考我们手册提供的步骤,这是我们经过严格测试的,以免遗漏一些开发时所需要的组件。 Linux 的发行版本众多,我们无法为此一一编写文档解释安装方法,请谅解。 进入工作目录,执行以下命令 #cd /opt/FriendlyARM/mini6410/linux/x86-qtopia #./build-all (该过程比较长,需要运行大概 30 分钟左右) 说明: ./build-all 将自动编译完整的 Qtopia 和嵌入式浏览器, 你还可以先后执行./build和./build-konq 脚本命令分别编译它们,如果你没有顺利执行,请参考上面的红色字体说明。 要运行你刚刚编译出的 Qtopia 系统十分简单,在刚刚编译完的命令终端下输入如下命令: #./run ;注意,“/”前面有个“.”,这表示在当前目录执行 这时你可以看到如下界面 第 - 239 - 页
    • 按照提示点击运行就可以看到 Qtopia 系统了,如下, 注意:我们并没有制作 x86 版本的中文系统。4.11.3 编译和运行 arm 版本的 Qtopia-2.2.0 请确认你所使用的编译器版本为 arm-linux-gcc-4.4.1,运行平台为 Fedora 9,进入工作目录,执行以下命令 #cd /opt/FriendlyARM/mini6410/linux/arm-qtopia #./build-all (该过程比较长,需要运行大概 30 分钟左右) #./mktarget (制作适用于根文件系统的目标板二进制映象文件包,将生成target-qtopia-konq.tgz) 第 - 240 - 页
    • 说明:./build-all 将自动编译完整的 Qtopia 和嵌入式浏览器,并且编译生成的系统支持 Jpeg、GIF、PNG 等格式的图片,您还可以先后执行./build 和./build-konq 脚本命令分别编译它们。如果你没有顺利执行,请参考上一节开头的红色字体说明。 你可以删除开发板中原有的 Qtopia 系统, 只要把/opt 目录下的所有文件都删除就可以了。然后把刚刚生成的 target-qtopia-konq.tgz 通过优盘或者其他方式解压到开发板的根目录,假定我们已经通过 ftp 把它传到了/home/plg 目录下,然后在开发板命令终端执行: #tar xvzf /home/plg/target-qtopia-konq.tgz –C / 其中”C”是 Change 的意思,”C”后面的“/”代表要解压到根目录下,执行完毕,重启开发板, 就可以看到所有的界面都已经变为英文的,并且”FriendlyARM”标签下只有一个浏览器程序,这就是你自己编译得到的整个 Qtopia 系统了,如下图: 注意:新系统可能会使用预装系统的触摸屏校正参数/etc/pointercal,你也可以在删除旧系统的时候,一并删除它,这样开机后就会进入校正界面了。 上面的过程看似很简单,其实所有的秘密都在 build-all 脚本中,网上也有很多关于移植的文章,但本质的步骤都是脚本所记录的那些,你可以使用记事本工具打开自行查看一下,只不过其中没有那些嘻哈打诨的辞藻罢了。4.12 编译 QtE-4.7.04.12.1 解压安装源代码 见 4.4.1 章节 第 - 241 - 页
    • 4.12.2 编译和运行 arm 版本的 QtE-4.7.0 注意,请务必使用我们光盘中提供的交叉编译器 arm-linux-gcc-4.5.1,并基于 Fedora9平台,Fedora9 的安装步骤见 4.3.1,我们不能保证所制作的脚本可以在其他平台环境下顺利执行,对此我们也不提供支持。 和 Qtopia-2.2.0 十分类似,我们也为 QtE-4.7.0 的编译制作了现成的脚本 build-all,进入源代码目录执行: #cd /opt/FriendlyARM/mini6410/linux/arm-qte-4.7.0 #./build-all 这个过程将十分漫长,根据机器配置不同,会有不同的编译时间,请耐心等待。 当顺利执行完毕,再运行 mktarget 脚本,将会从编译好的目标文件目录中,提取出必要的 QtE-4.7.0 库文件和可执行二进制示例,并打包为 target-qte-4.7.0.tgz,把它在开发板的根目录下解压,就可以使用了,如下命令 #tar xvzf target-qte-4.7.0.tgz –C / 这样, 就会在/usr/local/目录下创建生成 Trolltech 目录, 它里面包含了运行所需要的所有库文件和可执行程序。 使用说明:因为目标板中预装的 Linux 已经包含了 QtE-4.7.0,测试之前,你可以先删除原有的,它位于/usr/local/Trolltech 目录,把该目录使用 rm 命令完全删除就可以了。 要运行 QtE-4..6.3,建议先停止正在运行的 Qtopia-2.2.0,点“设置”中的“关机”可出现如下界面,点“Terminate Server”即可关闭 Qtopia-2.2.0 系统。 也可以使用其他的方法,比如在启动脚本/etc/init.d/rcS 中注释掉 qtopia 启动项,再重新系统系统;或者使用 killall 命令杀死相关的进程(比较多;甚至是直接删除/opt 目录中的所有内容重启。 关闭 qtopia-2.2.0 之后,在命令行输入 qt4 命令,即可启动刚刚解压安装的 QtE-4.7.0了,如图: 第 - 242 - 页
    • 4.13 编译 Qtopia4(Qt-Extended-4.4.3)4.13.1 解压安装源代码 见 4.4.1 章节4.13.2 编译和运行 x86 版本的 Qt-Extended-4.4.3 注意,请务必使用我们光盘中提供的交叉编译器 arm-linux-gcc-4.5.1,并基于 Fedora9平台,Fedora9 的安装步骤见 4.3.1,我们不能保证所制作的脚本可以在其他平台环境下顺利执行,对此我们也不提供支持。 和 Qtopia-2.2.0 十分类似,我们也为 Qt-Extended-4.4.3(以下简称 Qtopia4)的编译制作了现成的脚本 build,进入源代码目录执行: #cd /opt/FriendlyARM/mini6410/linux/ x86-qt-extended-4.4.3 #./build 这个过程将十分漫长,根据机器配置不同,会有不同的编译时间,请耐心等待。 要运行你刚刚编译出的 Qtopia4 系统十分简单,在刚刚编译完的命令终端下输入如下命令: #./run ;注意, “/”前面有个“.” ,这表示在当前目录执行 这时你可以看到如下界面,依提示点进去可以看到功能表格,如果你有兴趣,可以自行点击看看里面的功能,在此不再赘述。 第 - 243 - 页
    • 4.13.3 编译和运行 arm 版本的 Qt-Extended-4.4.3 注意,请务必使用我们光盘中提供的交叉编译器 arm-linux-gcc-4.5.1,并基于 Fedora9平台,Fedora9 的安装步骤见 4.3.1,我们不能保证所制作的脚本可以在其他平台环境下顺利执行,对此我们也不提供支持。 和 Qtopia-2.2.0 十分类似, 我们也为 Qt-Extended-4.4.3 的编译制作了现成的脚本 build,进入源代码目录执行: #cd /opt/FriendlyARM/mini6410/linux/ arm-qt-extended-4.4.3 #./build 这个过程将十分漫长,根据机器配置不同,会有不同的编译时间,请耐心等待。 当顺利执行完毕,再运行 mktarget 脚本,将会从编译好的目标文件目录中,提取出必要的 Qt-Extended-4.4.3 库文件和可执行二进制示例,并打包为 target-qtopia4.tgz,把它在开发板的根目录下解压,就可以使用了,如下命令 #tar xvzf target-qtopia4.tgz –C / 这样,就会在/opt 目录下创建生成 Qtopia4.4.3 目录,它里面包含了运行所需要的所有库文件和可执行程序。 使用说明:因为目标板中预装的 Linux 已经包含了 QtE-4.7.0,测试之前,你可以先删除原有的,它位于/opt/ Qtopia4.4.3 目录,把该目录使用 rm 命令完全删除就可以了。 要运行 Qtopia4,建议先停止正在运行的 Qtopia-2.2.0,点“设置”中的“关机”可出现如下界面,点“Terminate Server”即可关闭 Qtopia-2.2.0 系统。 第 - 244 - 页
    • 也可以使用其他的方法,比如在启动脚本/etc/init.d/rcS 中注释掉 qtopia 启动项,再重新系统系统;或者使用 killall 命令杀死相关的进程(比较多;甚至是直接删除/opt 目录中的所有内容重启。 关闭 qtopia-2.2.0 之后,在命令行输入“qtopia4 &”(这里的“&”表示后台运行)命令,即可启动刚刚解压安装的 Qtopia4 了,如图: 第 - 245 - 页
    • 第五章 WindowsCE 6.0 开发指南5.1 体验 WindowsCE6 WindowsCE6 的烧写文件位于光盘“imagesWindowsCE6”目录中。 请按照第三章的方法和步骤下载烧写您所需要的系统(此示例中烧写的是NK_T43-i.bin,它适用于采用一线精准触摸的 4.3”LCD),安装完毕,请把开发板的 S2 开关设置为 Nand Flash 启动系统,系统启动时的画面如图。5.1.1 触摸屏校正 缺省安装的 wince 系统的触摸屏校正参数一般适用于 NEC 4.3”LCD,但因为每个触摸屏的物理特性不同,有时可能不太准确,特别是不同尺寸的时候,这时就需要重新校正,如下步骤: 第 - 246 - 页
    • 请先接上 USB 鼠标,点开始->设置->控制面板,找到“笔针”图标,双击打开“笔针属性”窗口,点“校准”选项卡的“再校准”按钮,开始重新校正。 根据系统提示,使用五点校正法用触摸笔开始校正,校正完毕,将会跳出如下窗口,这时随便点一个位置即可返回“笔针属性”窗口,点“OK”保存退出。 如果您想保存本次校准的参数,请点“开始->挂起”,然后再重新开机就可以了。5.1.2 触摸屏书写效果验证5.1.3 查看系统信息 点“开始”->“设置”->“控制面板”->“系统”,可以打开查看系统信息,如图。 第 - 247 - 页
    • 也可以在桌面右键点“我的设备”-> “属性”(触摸笔常按不放,可以实现右键效果)。5.1.4 设置实时时钟并保存 点任务栏右下角的时间,出现时间设置窗口,根据提示进行设置就可以了,设置完毕,点“OK”退出,设置时间不需要点“挂起”保存。5.1.5 用户存储空间 打开“我的设备”可以看到一个名为“NandFlash”的磁盘驱动器,可以把要保存的数据放在里面,该目录里面的内容掉电不会丢失,如图。 第 - 248 - 页
    • 5.1.6 使用优盘和 SD 卡 在 wince 中使用优盘和使用标准的 windows 使用优盘类似, WINCE 系统启动以后, 当把优盘插入 USB Host 接口,这时板子给优盘供电,优盘的指示灯会闪烁,等待几秒系统就自动加载优盘了,这时可以双击桌面的“我的设备”图标,打开资源管理器,可以看到优盘的盘符:硬盘,双击硬盘即可进入优盘进行数据读写了。把 SD/MMC 卡插入板上的 SD 插槽,资源管理器中就可以看到 SD 卡的盘符:Storage Card,双击打开进入该目录,就可以对SD/MMC 卡进行读写了。5.1.7 播放 mp3 使用 wince 自带的 MediaPlayer 播放器可以播放 mp3,如图5.1.8 测试 LED 打开桌面的“友善之臂”程序组,并找到“LED-Test”,双击运行它,如图,你可以通过点界面上的按钮来控制板上 4 个 LED 的亮灭。 第 - 249 - 页
    • 5.1.9 测试按键 打开桌面的“友善之臂”程序组,并找到“Buttons” ,双击运行它,如图,此时按下开发板上的按键,可以看到程序界面上相应的图标变为蓝色。5.1.10 测试 PWM 控制蜂鸣器 打开桌面的“友善之臂” 程序组,并找到“PWM-Buzzer” 双击运行它, , 如图, “Start” 点按钮可以测试蜂鸣器,点“Stop”可以停止蜂鸣器发出声音。 第 - 250 - 页
    • 5.1.11 录音测试 打开桌面的“友善之臂”程序组,并找到“PWM-Buzzer”,双击运行它,如图 根据提示,点“录音”按钮开始录音,这时对着板上的麦克风说话,程序开始录音,点“停止”按钮结束录音,如图: 此时可以点“播放”按钮会循环播放刚才的录音。 说明:该录音程序并不保存录音结果。5.1.12 串口助手 说明:本开发板提供的 BSP 包含三个串口的标准驱动,分别是 COM2,3,4,而 COM1的普通串口功能驱动尚不可用,要测试这三个串口,需要使用串口扩展小板,如下图所示,使用它分别连接开发板的 CON2,3,4 端口即可。 第 - 251 - 页
    • 在“友善之臂”程序组点击运行“SerialPort” ,运行界面如左下图, 点“设置”按钮,打开设置窗口,设置串口号为 COM2,波特率为 115200,其他设置如图(右上),点确定返回主窗口。 同时,连接好扩展板的 COM2 到 PC 一端,并在 PC 端把相应的串口作相同的设置。 在主窗口中点“打开端口”按钮,此时该按钮会变为“关闭端口” ,在“发送区”输入一些字符,点“发送”按钮,如左下图,这时会在 PC 端的串口终端接收到从开发板发送来的字符,如右下图: 然后,在串口调试助手的主窗口点“接收”按钮(该按钮会改变为“不接收” ,在 )PC 端的串口终端输入一些字符(通过超级终端是无法看到的),在输入的同时,我们看到输入的字符会在开发板串口调试助手的接收区显示,如图: 第 - 252 - 页
    • 我们还可以使用同样的方法测试 COM3,4,在此就不作详细的说明了。5.1.13 CMOS 摄像头预览拍照 未完5.1.14 硬解码播放器 大部分 6410 开发板演示多媒体播放采用的是 "钢铁侠""史瑞克""刺客联盟“那些老片子, 并且没有声音输出,因为那是三星提供的测试程序,采用的是特殊格式的高清片,仅仅是用来测试视频解码的,无法直接正常播放普通影片,现在我们在 6410 平台上实现了更为强大通用的硬解码播放器, 它可以支持 720x480 30fps 或 720x576 25fps 硬解码播放 Mpeg4, H264,H263 等视频,效果非凡! (目前我们也首家实现了 Linux 平台的硬解码播放器)。 和同名其他版本的播放器相比,此版本的优势在于: - 可以自动识别 Mpeg4, H264, H263 格式的影片,并自动切换为硬解码播放,也就是说,如果你的 6410 平台驱动中没有硬解码驱动支持,也是可以播放的,只是在播放效果不够好 - 播放某些影片时没有花屏的现象 - 采用 DirectDraw 技术绘制最终画面,效果更佳 该播放器现在已经集成到默认安装的 WinCE 系统中,为了方便用户的测试,我们专门提供了 2 个测试视频,它们在“光盘 B测试视频”目录中,你可以把它拷贝到 SD 卡中使用,其中一个是 H.264 格式编码的视频,另一个采用 MPEG4 格式。 打开桌面的“超级播放器”程序,如图 注意:新安装的 wince 系统在第一次打开此程序时会比较慢 第 - 253 - 页
    • 点“文件”->“打开文件”找到 SD 卡或你自己的其他视频文件,如图 选中文件,就可以观看硬解码播放的电影了。 使用注意事项:因为 6410 最大仅支持 720x480 的硬解码播放,所以在 7 寸全屏时会稍微有点卡,此时可以点“选项”->"缩放“->"100%"和“选项"->"画面比例"-"原始",再点全屏按钮即可,当使用 4.3”LCD 或其他分辨率的 LCD 播放时,请自行根据实际情况选择缩放,直至达到最佳效果。5.1.15 TV-OUT 测试 打开桌面的“友善之臂”程序组,并找到“multimedia-test”,双击运行它,如图。 第 - 254 - 页
    • 此时把电视输入设置为 CVBS,并与目标板之间使用黄色的视频线连接好,点“TV”,则 LCD 上的输出消失,画面转到了 TV,如图。 在这个画面上,再点击打开“TV”测试程序,选“LCD”即可恢复到 LCD 显示。5.1.16 设置网络参数以连接互联网 只有正确设置了 IP 地址和网关以及 DNS 等参数,才可以使用开发板连接使用互联网或者局域网。 设置网络参数的步骤和标准的 Windows 系统十分相似,点“开始”->“控制面板”,找到网络设置选项,并找到相应的网卡 DM9CE1 如图。 第 - 255 - 页
    • 双击打开 DM9CE1 图标,如图,在这里,你可以设置静态的 IP 地址,也可以设置动态获取 IP 的方式,按照你所在的网络环境实际参数填写即可,如图为缺省的设置参数。 确定网络设置参数无误,就可以打开浏览器上互联网了。5.1.17 使用 SD 无线网卡 开机之前,把 SD-WiFi 模块先接到开发板的 SDIO 排针座上,也就是 CON9,如图。 第 - 256 - 页
    • 系统启动后,SD WiFi 模块上的绿色灯会不停闪烁,如果附近有无线网接入点,系统会自动出现无线网设置窗口,如图 选中一个无线网络,点连接,开始设置无线网,根据自己的实际情况,选择加密类型,并输入密码,如图。 点右上角的“OK”返回,设置窗口会出现连接提示信息,连接成功,如图所示。 第 - 257 - 页
    • 5.1.18 使用 USB 无线网卡 本开发板缺省的 WinCE 系统集成了 Ralink RT2070/RT3070 的 USB 无线网卡驱动,无线网卡驱动,因此可以直接插上使用,设置界面和 SD WiFi 是完全相同的,当插入 USB 无线网卡是,出现如下设置界面: 其他设置和 SD WiFi 是完全一样的,在此就不再赘述了。5.1.19 使用 USB 蓝牙 本开发板缺省的 WinCE 系统集成了 USB 蓝牙驱动,它并不是第三方的驱动,而是WinCE 组件中自带的,因此你只要稍稍配置一下就可以使用了,我们提供的示例工程已经加入该配置选项,因此你可以直接插上 USB 蓝牙适配器使用,需要说明的是,该驱动有一定的局限性,并不支持所有的蓝牙适配器模块。 使用 WinCE 系统自带的软件,可以通过手机或者其他蓝牙设备向板子中发送文件,下面我们介绍一下详细的使用步骤: 把蓝牙模块插到开发板上,打开“控制面板”->“Bluetooth 设备属性”,如图: 点“Scan Device”开始扫描附近的蓝牙设备,结果如图,这里找到的是我的手机设备: 第 - 258 - 页
    • 点“ ”把此设备加入到信任列表,会出现这样的对话框: 点“是”,会出现一个 PIN 验证对话框,随便输入几个数字,如“111”,此时在手机端会出现一个请求对话框,输入同样的“111” ,则信任设备被加入到右边,如图: 这样,我们就建立起了开发板和手机之间的信任通道,此时,在手机端发送一个文件给开发板,在开发板上会出现这样的接收请求: 第 - 259 - 页
    • 点“是”接受发送请求,文件将被接收到开发板的“DocumentsDefaultInbox”目录中。5.1.20 背光调节控制 如果你的系统预装的是 WindowsCE6,或许你已经注意到,如果在差不多半分钟内没有点击触摸屏,LCD 的背光会逐渐熄灭,这正是缺省系统内置的功能。 只有采用一线精准触摸的 4.3”, 7”LCD 模块,才具有背光调节电路,在 WindowsCE系统中,背光调节部分的驱动采用的是标准的系统接口,因此你可以方便的通过编程控制它们。 要设置系统背光,请打开“控制面板”->“显示” ,如图: 点“背景光”页框,如图,在此你可以设置背景光延迟关闭的时间,默认是 30 秒。 第 - 260 - 页
    • 再点下面的“高级”按钮(需要隐藏任务栏) 出现背光调节窗口,如图: 在此,你可以左右滑动按钮,调节 LCD 背光的亮度,点”close”返回上一个界面。5.1.21 与 PC 同步(基于 Windows7) 注意:在 Windows 7 系统中,无需安装 ActiveSync 软件!但需要保证你所用的Windows7 能够上互联网,因为安装“Windows Mobile 设备中心”会自动从网络下载文件。 在 Windows 7 系统中,开发板与 PC 的同步是通过“Windows Mobile 设备中心”(下称“同步中心”)来实现并管理的,它类似于以前的 ActiveSync,它的界面如图所示。 第 - 261 - 页
    • “同步中心”并非在 Windows 7 中自带,而是首次连接移动设备时通过互联网下载安装的,下面是详细的步骤。 说明:如果开发板安装了 WinCE6,用户依然可以通过 Windows XP 系统的 ActiveSync与之相连,具体步骤可以参考老版本的用户手册,在此介绍的步骤仅适用于 Windows 7 系统。 安装 Windows Mobile 设备中心实现 PC 同步 当开发板中安装并运行 WinCE6 系统后,第一次和基于 Windows 7 系统的 PC 通过USB 连接时,会弹出如图窗口 很快,就会在桌面上出现如下提示窗口 此时要保证你的网络是和互联网连通的,系统会自动下载并安装配置相关的软件,如图 第 - 262 - 页
    • 安装完毕,出现如下界面开始自动配置出现“软件许可协议”窗口,点“接受”继续之后,很快就和开发板设备连接成功了,如图点“不设置就进行连接”按钮,继续,出现如图界面 第 - 263 - 页
    • 此时,点“文件管理”之“浏览设备上的内容”就会像打开目录一样打开开发板的根目录,如果开发板上插了优盘或者 SD 卡,也会像优盘一样出现相应的图标。 在此,我们打开“”文件夹,它表示了整个开发板的目录内容,如下图,这时,你就可以通过拖放向开发板中复制文件了,当然也可以从开发板中读取文件。 第 - 264 - 页
    • 5.2 建立 WindowsCE 6.0 开发环境 注意:以下软件和步骤均基于 Microsoft Windows 7 系统(旗舰版) ,其他 Windows系统未经测试。建议把安装软件复制到硬盘安装(ISO 光盘映象文件可借助虚拟光驱) Windows CE 6.0 的安装过程十分繁琐,并且对开发主机的要求比较高(否则会很慢),我们建议用户特别是初学者务必按照我们介绍的步骤安装开发环境。 这里是我们采用的开发主机的关键配置,仅供参考: CPU:Intel Core Duo E8400 内存:DDR2 4GB 硬盘空间:500GB 安装所需的软件列表如下(本公司并不提供 Windows Embedded 6.0 CE 6 的安装文件,用户可以到微软网站自行下载它的试用版): Visual Studio 2005 (试用版下载地址: http://download.microsoft.com/download/e/1/4/e1405d9e-47e3-404c-8b09-489437b27 fb0/En_vs_2005_Pro_90_Trial.img ) Visual Studio 2005 Service Pack 1(文件名:VS80sp1-KB926601-X86-ENU.exe) 下载地址: http://www.microsoft.com/downloads/details.aspx?familyid=bb4a75ab-e2d4-4c96-b39 d-37baf6b5b1dc&displaylang=en Visual Studio 2005 Service Pack 1 Update for Windows Vista (文件名:VS80sp1-KB932232-X86-ENU.exe) 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=90E2942D-3AD1-4873- A2EE-4ACC0AACE5B6&displaylang=en ) Visual Studio 2005 Service Pack 1 ATL Security Update (文件名:VS80sp1-KB971090-X86-INTL.exe) 第 - 265 - 页
    • 下载地址: http://www.microsoft.com/downloads/details.aspx?familyid=7C8729DC-06A2-4538- A90D-FF9464DC0197&displaylang=en Windows Embedded CE 6.0 试用版下载地址: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7e2868 47-6e06-4a0c-8cac-ca7d4c09cb56 Windows Embedded CE 6.0 Platform Builder Service Pack 1 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyId=BF0DC0E3-8575-4860- A8E3-290ADF242678&displaylang=en Windows Embedded CE 6.0 R2 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyId=F41FC7C1-F0F4-4FD6- 9366-B61E0AB59565&displaylang=en Windows Embedded CE 6.0 R3 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=BC247D88-DDB6-4D4 A-A595-8EEE3556FE46&amp;displaylang=ja&displaylang=en 腾讯 QQ(第三方软件) 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=527042f7-bb5b-4831-a6 ad-5081808824ec&displaylang=en WesttekFileViewers6.exe(office 文件浏览器,亦属于第三方软件) 下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyID=d2fd14eb-7d5c-428b-95 1c-343f910047c1&displaylang=en 以上列表顺序基本也说明了这些软件的安装顺序:先安装 Visual Studio 2005 及补丁, 再安装 Windows CE 6.0 及补丁,最后安装第三方软件。 说明:Windows CE 6.0 所使用的 Platform Builder 和以往的 Windows CE 5.0/4.2 等均不同,它并不是独立的开发平台软件,而是作为 VS2005 的一个插件来安装使用的,因此必须先安装 VS2005,以后所有的内核配置编译等开发都基于 VS2005 进行。 下面是详细的步骤。5.2.1 安装 Visual Studio 2005 及补丁Step1:打开 Visual Studio 2005 文件夹,找到 setup.exe,双击运行开始安装。 第 - 266 - 页
    • Step2:出现如图界面,点“Install Visual Studio 2005”,继续 第 - 267 - 页
    • Step3:出现如图界面,稍等片刻,点“Next”继续 第 - 268 - 页
    • Step4:出现如图界面,注意点选红色框的,并输入序列号,点“Next”继续 第 - 269 - 页
    • Step5:出现如图界面,选择安装类型,在此选择完全安装,即“Full”,点“Next”继续 第 - 270 - 页
    • Step6:出现如图界面,开始正式安装 Visual Studio 2005,此过程较长,请耐心等待。 第 - 271 - 页
    • Step7:Visual Studio 2005 安装完毕,出现如下画面,点“Finish”结束安装。 第 - 272 - 页
    • 第 - 273 - 页
    • 接着会出现如图界面,点“Exit”退出即可。 第 - 274 - 页
    • Step8 : 现 在 开 始 安 装 第 一 个 补 丁 文 件 Visual Studio 2005 Service Pack 1 , 双 击 运 行VS80sp1-KB926601-X86-ENU.exe 开始安装,出现如图界面Step9:须稍等片刻,出现如图画面,点“OK”开始正式安装 第 - 275 - 页
    • Step10:接受安装许可协议,点“I accept”继续Step11:出现安装过程界面,此过程较长,请耐心等待Step12:安装完毕,出现如下界面,点“OK”结束本补丁的安装 第 - 276 - 页
    • Step13:接下来安装第二个补丁 Visual Studio 2005 Service Pack 1 Update for Windows Vista,双击运行 VS80sp1-KB932232-X86-ENU.exe,依次出现如图界面Step14:稍等片刻,出现如图界面,点“OK”继续Step15:出现安装许可协议界面,点“I accept”继续 第 - 277 - 页
    • Step16:出现安装过程界面,此过程较长,请耐心等待Step17:安装完毕,出现如下界面,点“OK”结束本补丁的安装Step18:接下来安装第三个补丁 Visual Studio 2005 Service Pack 1 ATL Security Update,双击运行 VS80sp1-KB971090-X86-INTL.exe,依次出现如图界面 第 - 278 - 页
    • Step19:稍等片刻,出现如图界面,点“OK”继续Step20:出现安装许可协议界面,点“I accept”继续 第 - 279 - 页
    • Step21:出现安装过程界面,此过程较长,请耐心等待Step22:安装完毕,出现如下界面,点“OK”结束本补丁的安装至此,基于 Windows7 平台的 Visual Studio 2005 及其补丁已经完全安装完毕。 第 - 280 - 页
    • 5.2.2 安装 Windows CE 6.0 及补丁 接下来开始安装 Windows CE 6.0 的 Platform Builder,注意:在 Windows 7 系统上安装 Windows CE 6.0 及其补丁需要管理员的权限来安装,请不要双击运行安装文件执行安装,否则到后面无法安装成功,请按照如下步骤启动安装文件。 Step1:点“开始”->“程序”->“附件” ,找到“命令行提示符” ,然后点右键出现菜单,点“以管理员身份运行” ,如图 Step2:出现命令行窗口,进入相应的安装目录,并输入安装程序名“Windows EmbeddedCE 6.0.msi”,开始安装,如图 第 - 281 - 页
    • Step3:出现如图界面,点“Next”继续 第 - 282 - 页
    • Step4:输入产品密钥,点“Next”继续 第 - 283 - 页
    • Step5:出现安装许可协议界面,选择“I accept”,点“Next”继续Step6:选择及设置如图,点“Next”继续 第 - 284 - 页
    • Step7:出现如图界面,选择如图,点“Next”继续 第 - 285 - 页
    • Step8:出现如图界面,点“Install”继续 第 - 286 - 页
    • Step9:开始正式安装,如图,此过程时间较长,请耐心等待Step10:安装结束,出现如图界面,点“Finish”结束安装。 第 - 287 - 页
    • Step11: 接下来安装 Windows CE 6.0 的第一个补丁 “Windows Embedded CE 6.0 Platform BuilderService Pack 1.msi”,按照本小节开头 Step1 的方法以管理员的身份进入命令行窗口,并进入相应的目录,输入“Windows Embedded CE 6.0 Platform Builder Service Pack 1.msi”开始安装,如图 第 - 288 - 页
    • Step12:出现如图界面,点“Next”继续 第 - 289 - 页
    • Step13:出现如图界面,选“I accept”,并点“Next”继续Step14:出现如图界面,点“Next”继续 第 - 290 - 页
    • Step15:开始正式安装,如图,此过程时间较长,请耐心等待 第 - 291 - 页
    • Step16:安装结束,出现如图界面,点“Finish”结束安装。Step17:接下来安装 Windows CE 6.0 的第二个补丁“Windows Embedded CE 6.0 R2.msi”,按照本小节开头 Step1 的方法以管理员的身份进入命令行窗口,并进入相应的目录,输入“Windows Embedded CE 6.0 R2.msi”开始安装,如图说明:有的用户可能会下载到单独的 Windows Embedded CE 6.0 R2.msi”安装文件,大小为50MB 左右,但此补丁似乎是不完整的,在安装时可能会遇到缺少“help.cab”文件的问题,导致无法顺利安装,因此我们建议用户使用我们提供的 R2 补丁,它总共 122 个文件,大概1.01GB。 第 - 292 - 页
    • Step18:出现如图界面,点“Next”继续 第 - 293 - 页
    • Step19:出现如图界面,选“I accept”,并点“Next”继续 第 - 294 - 页
    • Step20:出现如图界面,不用做任何改动,点“Next”继续 第 - 295 - 页
    • Step21:出现如图界面,点“Next”继续 第 - 296 - 页
    • Step22:开始正式安装,此过程时间较长,请耐心等待Step23:安装结束,出现如图界面,点“Finish”结束安装 第 - 297 - 页
    • Step24:现在开始安装 Windows CE 6.0 的第三个补丁 R3,按照本小节开头 Step1 的方法以管理员的身份进入命令行窗口,并进入相应的目录,输入“Windows Embedded CE 6.0 R2.msi”开始安装,如图说明:有的用户可能会下载到单独的 Windows Embedded CE 6.0 R3”安装文件,它其实是一个光盘映象文件,为了用户使用方便,我们把它提取出来,做成普通的目录文件方式,它总共有 166 个文件,大小大概是 1.14GB 第 - 298 - 页
    • Step25:出现如图界面,点“Next”继续 第 - 299 - 页
    • Step26:出现如图界面,选“I accept”,并点“Next”继续 第 - 300 - 页
    • Step27:出现如图界面,点“Next”继续 第 - 301 - 页
    • Step28:开始正式安装,此过程时间较长,请耐心等待Step29:安装结束,出现如图界面,点“Finish”结束安装 第 - 302 - 页
    • 5.2.3 安装第三方软件腾讯 QQ 在 Windows CE 6.0 R3 补丁中,微软还正式提供了可选的第三方的软件,分别有腾讯QQ 和 File Viewers,我们已经把它们放入资料光盘,用户也可以在微软网站下载到它们,地址如下:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=bc247d88-ddb6-4d4a-a595-8eee3556fe46#filelist (此地址有可能会失效,请用户到微软网站自行查询) 我们后面的例子中,实际中用到腾讯 QQ,因此我们只安装 QQ,其他软件用户可以自行安装测试。 说明:Step1:进入 QQ 安装目录,双击运行 setup.exe 开始安装,如图 第 - 303 - 页
    • Step2:出现如图界面,点“Next”继续 第 - 304 - 页
    • Step3:使用缺省配置,不作任何改动,点“Next”继续 第 - 305 - 页
    • Step4:出现如图界面,选择“I accpet”,点“Next”继续 第 - 306 - 页
    • Step5:出现如图界面,点“Next”继续 第 - 307 - 页
    • Step6:出现如图界面,稍等片刻 第 - 308 - 页
    • Step7:出现如图界面,点“Close”结束安装 第 - 309 - 页
    • 5.2.4 安装 BSP 及内核工程示例 Mini6410 的BSP和示例工程等文件只有一个安装文件Mini6410-WinCE6-Suite-1030(尾缀 1030 是年周日期版本标识,请以光盘为准),其中包含所有的BSP源代码以及内核工程示例、SDK工程示例,用户可以在 http://www.arm9.net网站点“下载”查找最新的版本,下面是详细的安装过程。 Step1:找到 Mini6410-WinCE6-Suite-1030 可执行安装文件,并双击运行 第 - 310 - 页
    • Step2:保持各项设置不变,点“Install”继续Step3:出现安装过程界面,因为安装的文件很小,安装会很快结束 第 - 311 - 页
    • Step4:安装结束,出现如图界面,点“Close”结束安装安装完毕,会在 WinCE600PLATFORM 目录下创建 SMDK6410 BSP 目录,如图 第 - 312 - 页
    • 并在 WinCE600OSDesigns 目录下创建内核示例工程文件目录,如图可以看到有 3 个目录,它们分别是代表了三个语言版本: Mini6410 – 简体中文 Mini6410-en – 英文(English) Mini6410-tw – 繁体中文 至此,Windows CE 6.0 的开发环境就已经完全创建了。5.3 配置和编译 WindowsCE 6.0 内核及 Bootloader 因为 Windows CE6 的内核配置比较复杂,佷容易因配置不对而导致无法编译通过,众所周知 Windows CE 平台的编译是十分耗时的,因此我们特意制作了内核工程示例,以便供用户参考,用户按照下面的步骤直接打开编译就可以了,光盘中 images WindowsCE6 目录 第 - 313 - 页
    • 中有相应的编译好的内核映象文件。5.3.1 编译缺省内核示例工程 现在,我们启动 VS2005 来编译刚刚安装的 mini6410 BSP,第一次启动 VS2005 时有些事项要注意一下,如下步骤: Step1:点“开始”->“程序”->“Microsoft Visual Studio 2005”-> “Microsoft VisualStudio 2005”(下称 VS2005),如图 Step2:这时会出现如下提示窗口,请先不要点“Continue” ,在这里微软建议你采用管理员身份运行该程序,因此点“Exit Visual Studio”退出。 Step3:我们先把 VS2005 设置为管理员执行权限,点“开始”->“程序”->“VS2005”->“VS2005” ,然后右键出现如图菜单,点“属性” 第 - 314 - 页
    • Step4:出现如图窗口,点“兼容性”选项卡,并作如图勾选,点“确定”返回。 Step5:这时再点“开始”->“程序”->“VS2005”->“VS2005”,又会出现刚才的提示窗口,如图,点“Contonue”继续,此时将以管理员身份运行 VS2005 第 - 315 - 页
    • Step6:出现如图界面,这是 VS2005 的工作界面,在此就不再对该界面赘述了,请用户参考常用的 VS2005 资料即可 Step7:点 File->Open->Project/Solution…,如图 Step8 : 出 现 文 件 选 择 窗 口 , 找 到 mini6410 的 缺 省 内 核 项 目 文 件 ( 路 径 为 :C:WINCE600OSDesignsMini6410),点“Open”打开它,如图 第 - 316 - 页
    • Step9:稍等片刻,mini6410 的缺省内核项目被载入工作区,出现如图界面 Step10:点“Build->Advanced Build Commands->Clean Sysgen”开始编译内核,如图,此过程较长,请耐心等待 第 - 317 - 页
    • Step11:编译完毕,结果如图所示,此时会生成内核映象文件 NK.bin 和 NK.nb0,路径如下: C:WINCE600OSDesignsMini6410Mini6410RelDirMini6410_ARMV4I_Release5.3.2 在 BSP 中修改 LCD 类型及串口输出功能 说明:我们提供的 BSP 目前支持以下型号的液晶屏: NEC 4.3”LCD 带触摸 统宝 3.5”LCD 带触摸 群创 7”LCD 带触摸 Sharp 8”LCD(或兼容)带触摸 第 - 318 - 页
    • LCD2VGA 转接模块:分别有 1024x768,800x600, 640x480 三种分辨率 EZVGA: 一种简易的 VGA 转接板,支持 800x600(或以内)分辨率输出 通过修改SMDK6410SRCINCoptions.h 头文件中 LCD_TYPE 的定义,可以选择相应的 LCD 类型: #define LCD_N43 – 默认适用于 NEC4.3”LCD //#define LCD_T35 //#define LCD_L80 //#define LCD_A70 //#define LCD_VGA1024768 //#define LCD_VGA800600 //#define LCD_VGA640480 //#define LCD_EZVGA 在 options.h 文件中,用户也可以修改串口的输出功能:作为普通串口功能或者调试输出(仅限于串口 1),如下定义: // --- by customer #define KITL_NONE - 默认设置 //#define KITL_SERIAL_UART0 //#define KITL_SERIAL_UART1 这里缺省的定义是作为普通串口功能(目前 COM1 作为普通串口尚有问题),如果要把串口 1 作为调试信息输出使用,则应该定义为: //#define KITL_NONE #define KITL_SERIAL_UART0 //#define KITL_SERIAL_UART15.3.3 在 BSP 中配置使用一线精准触摸屏 为了达到更好的触摸效果,我们特意设计了一线精准触摸电路,并集成到 LCD 的驱动板上,它采用专业的触摸屏控制芯片 ADS7843(或兼容),配合一个单片机,构成一个独立的四线电阻触摸屏采集电路, 可以实现更好的数据采集, 去抖处理, 最后通过一个普通的 GPIO口把处理过的数据发送出去,在开发板上与之相连的是 PWM1 口,实际上我们只使用了它的GPIO 功能,也就是 GPF15。 我们已经把一线精准触摸的驱动程序做成 dll 文件(文件名为 touch_1wire.dll)放入 BSP中, 但还需要在编译之前修改相关的设置, 才可以让编译出的 WinCE 内核支持一线精准触摸,可以按照下面的步骤修改 BSP 中的相关设置。 打开“C:WINCE600PLATFORMSMDK6410 SMDK6410.bat”,找到如下定义项,大概在 15 行:set BSP_NOTOUCH=set BSP_NOTOUCH_ADC=1 第 - 319 - 页
    • set BSP_NOTOUCHCOM=1set BSP_NOTOUCH_1WIRE= 如何理解上面的定义呢? 当定义项设置为空时,表示系统将支持该定义项;当设置为“1”时,表示编译出的系统将不支持此项,因此,如果你打算使用 ARM 本身自带的触摸屏控制,可以这样定义set BSP_NOTOUCH=set BSP_NOTOUCH_ADC=set BSP_NOTOUCHCOM=1set BSP_NOTOUCH_1WIRE=1 如果你打算使用串口触摸屏控制,则需要这样定义:set BSP_NOTOUCH=set BSP_NOTOUCH_ADC=1set BSP_NOTOUCHCOM=set BSP_NOTOUCH_1WIRE=1 在此默认的支持为一线精准触摸。 为了和不支持一线精准的 WinCE 系统内核文件区分开来,我们为其加上“-i”尾缀,如光盘中的 NK_A70-i.bin 等,你也可以自己编译出支持串口触摸屏控制器的内核文件,我们之前是以“-s”结尾作为区分的。 为了测试触摸效果,你可以使用系统中自带的一个“小画笔”软件,在桌面上就可以找到,文件名为“Painter” ,测试效果如图,可以看到书写十分平滑,没有抖动。5.3.4 关于 BootLoader 在 Mini2440 系统中,WindowsCE5/6 所用的 Bootloader 为 Nboot,它是用 ADS 软件来编译的;而在 Mini6410 中,我们依然把 Bootloader 命名为 Nboot,但它的源代码是和 BSP放在一起的,需要通过 VS2005 来编译。 第 - 320 - 页
    • Nboot 源代码位置:C:WINCE600PLATFORMSMDK6410SRCBOOTLOADER 该目录下包含了两个 Nboot: nbootRAM128:适用于内存为 128M 的开发板平台 nbootRAM256:适用于内存为 256M 的开发板平台 这 2 个 Nboot 将会一起编译出来。 在功能上来讲,Mini6410 所用的 Nboot 和 Mini2440 很相似,它们都是一个十分简单的 bootloader,其大小不超过 8K(Mini2440 的 Nboot 不超过 4K),一般被烧写到 Nand Flash 的Block 0 位置用来启动 WinCE 内核,Nboot 原由三星提供,我们对此做了很多改进,目前有如下特色功能: 支持开机画面快速显示 支持加载 WinCE 内核的动态进度条 快速启动 WinCE 需要注意的是,Nboot 并不具备烧写功能,它只能读取已经烧写处理好的文件:开机画面(BootLogo)和 WinCE 内核。 Nboot 具有佷方便的定制性, 你可以通过头文件定义修改开机画面的显示位置、 背景,以及进度条的颜色、位置、长宽等,这些定义位于 options.h 文件中,该头文件是和 BSP 共用的,它位于 SMDK6410SRCINC 文件夹中。#define KITL_NONE//#define KITL_SERIAL_UART0//#define KITL_SERIAL_UART1//通过更改定义,选择相应的 LCD 型号, 此处默认选择为 NEC 4.3”LCD#define LCD_N43//#define LCD_T35//#define LCD_L80//#define LCD_A70//#define LCD_VGA1024768//#define TOUCH_SCREEN_WIDTH 1024//#define TOUCH_SCREEN_HEIGHT 768//设置开机背景色#define BACKGROUND_R 0x00#define BACKGROUND_G 0x00#define BACKGROUND_B 0x7F//设置进度条的颜色#define PROGRESS_BAR_R 0xFF#define PROGRESS_BAR_G 0xFF#define PROGRESS_BAR_B 0x00 第 - 321 - 页
    • //设置开机图片的位置#define LOGO_POS_TOP 0#define LOGO_POS_LEFT 0//设置启动条的位置和长宽#define PROGRESS_BAR_TOP 240#define PROGRESS_BAR_LEFT 50#define PROGRESS_BAR_WIDTH 400#define PROGRESS_BAR_HEIGHT 4 编译 Nboot 其实,在上面的步骤中,我们已经编译好了 Nboot,可用的目标文件为:Nboot.nb0,它的格式和 ADS 编译出的 bin 格式是一样的,因此我们需要把它烧写到开发板中。该文件位于:C:WINCE600OSDesignsmini6410mini6410RelDirSamsung_SMDK6410_Release 目录中。 编译一次 WinCE 内核所花的时间是很久的,但你可以单独编译 Nboot,在如图浏览栏中,找到 Nboot 的源代码目录,右键点击“Build”即可单独编译了。 你可以把生成的 Nboot.nb0 通过 USB 下载或者 SD 卡把它烧写到 Nand Flash 中使用,详见第三章的步骤。5.3.5 创建 SDK SDK 适用于:当开发主机只安装了 VS2005,但没有安装 Windows CE 6.0 的 PlatformBuilder 插件时,这时开发人员想通过 VS2005 开发 min64140 的应用程序,就需要一个 SDK, 第 - 322 - 页
    • 它类似于 Embedded Visual C++所需的 SDK。 当你编译完缺省内核,此时可以通过 VS2005 平台创建相应的 SDK,注意:这里的SDK 仅适用于 VS2005 开发环境,它不能安装到 EVC,也不能安装到 VS2008,下面是创建SDK 的详细步骤。 Step1:运行 VS2005 并打开已经编译过的缺省内核示例工程 mini6410,找到如图位置,并右键点击“Mini6410-CE6-SDK”出现菜单,点 Build 开始创建 SDK Step2:稍等片刻,SDK 创建完毕,如图所示 Step3:在 C:WINCE600OSDesignsmini6410mini6410SDKsmini6410sdk 目录下,可以看到已经生成 Mini6410-CE6-SDK.msi 安装文件 第 - 323 - 页
    • 5.3.6 安装 SDK 提示:如果你不想自己制作生成 SDK,光盘中已经包含了现成的 SDK 安装程序,它位于:WindowsCE6 Mini6410-SDK.msi 要通过 VS2005 为 mini6410 开发应用程序,需要先安装刚才生产的 SDK,步骤如下 Step1:双击运行 Mini6410- SDK.msi,出现如下界面,点“Next”继续 Step2:如图选择“I accept”,点“Next”继续 第 - 324 - 页
    • Step3:出现如图界面,输入用户名和公司名,点“Next”继续Step4:出现如图界面,点“Complete”继续 第 - 325 - 页
    • Step5:出现如图界面,点“Next”继续Step6:出现如图界面,点“Install”继续Step7:出现如图安装进度界面,稍等片刻 第 - 326 - 页
    • Step8:出现安装结束界面,点“Finish”结束至此,SDK 已经安装完毕。 第 - 327 - 页
    • 第六章 Android 开发指南 之前,针对 Android 系统,我们主要解决了 Android 所使用的 UBIFS 文件系统的快速烧写问题,并提供了通过 SD 卡运行 Android 的方法,它们的使用步骤都十分简单。 经过一段时间的探索和学习,我们已经掌握了 Android 系统应用开发基本知识,现在我们提供的最新的 Android 系统, 已经包含了很多常用的功能, 如当前最热门的 3G 无线上网,USB 蓝牙,优盘的自动挂载识别,图形界面有线网卡的设置等等。特别是 3G 拨号上网,它可以自动识别 USB 上网卡的拨号程序,并支持 WCDMA, CDMA2000, TD-SCDMA 等多种制式的上网卡。 目前光盘中最新版本为 Android-2.1。 Android 所用的 BootLoader 与内核和传统的 Linux 系统差别不是很大,编译的方法和步骤基本没有区别, 只是配置文件稍微不同。 Android 的主要奥妙之处在于它的文件系统部分,我们所指的 Android 系统也将是它, 所以本节中所指的 Android 系统实际就是 Android 系统所用的目标文件系统。 进行本节之前,建议你先了解并掌握本手册 4.3-4.9 的内容。6.1 安装和使用 Android6.1.1 安装 Android 说明:使用内存容量为 128M 的开发板时,通过 SD 卡直接运行 ext3 格式的 Android有时可能会无法顺利运行;使用内存容量为 256M 的开发板则没有问题,因此我们建议把Android 烧写到 Nand Flash 中运行。 你可以使用 USB 下载或者 SD 卡安装 Android 到开发板中, 详细步骤见本手册第三章。 你也可以不必安装它,把光盘中的必要文件拷贝到 SD 卡中即可运行体验它,步骤如下: Step1: 使用 SD-Flasher.exe 工具,把 Superboot 烧写到 SD 卡中,见本手册 2.2.1 或者2.2.2 章节说明 Step2: 把光盘中的 image 目录复制到 SD 卡中 Step3: 打 开 SD 卡 imagesFriendlyARM.ini 配 置 文 件 , 修 改 ”Action=Run” , 修改”OS=Android” Step4: 把开发板 S2 设置为 SDBOOT,并插入 SD 卡,开机上电,即可运行 Android了。 第 - 328 - 页
    • 第一次运行,会先出现触摸屏校正界面,依次点击“十”字形中心位置直到结束,这时 Android 系统开始启动,第一次启动会慢一些,请耐心等待,直到出现如下界面。 注意:有些开发板先使用模拟器提取文件系统,这样 Android 的第一次运行已经交给模拟器了,所以通过模拟器提取的 Android 系统在开发板上运行时会显的快一些。而我们是使用的脚本提取制作 Android 系统的,这样能够保证最原始的数据,而且制作过程更加透明,方便,更加利于用户理解底层的内容。 这时你可以尝试运行各个小程序或者设置,我们就不再一一介绍了。 说明:通过 SD 卡运行 Android 系统,实际上只用到了 2 个文件: - azImage : 内核文件,对于不同型号的 LCD,分别有不同的内核文件 - rootfs_android.ext3 : EXT3 格式的文件系统映像文件,制作方法见后面的章节 关于按键布局 本开发板总共有 8 个用户按键,它们在 android 系统中的定义如下表所示:按键编号 功能定义 按键编号 功能定义K6 上 K8 OKK5 下 K7 CancelK4 左K3 右K2 Menu(长按 menu 可旋转屏幕显示)K1 Home 第 - 329 - 页
    • 6.1.2 触摸屏校准 当你安装了 Android 系统,第一次使用时,会出现一个校准界面,如图,校准程序会自动检测你使用的触摸屏设备,如果采用了一线触摸,将显示:/dev/touchscreen-1wire 如果使用的是 ARM 本身带的触摸屏控制器,会显示:/dev/touchsreen,如图。 根据提示,依次点击十字中心点进行校准,直到进入系统,如果你点的位置比较偏,或有校准时有抖动,将会进行循环校正。6.1.3 旋转屏幕显示 正如前面你所见到的,Android 2.1 在启动后是竖屏显示的,要切换为横屏显示,可以长按开发板的 Menu 按键(也就是 K2)即可,切换后的显示效果如图。 第 - 330 - 页
    • 6.1.4 播放 mp3 Android 系统可以自动识别 SD 卡中的 mp3 文件,当你播放 mp3 时,可能会听不到声音,这时请尝试点击“暂停”按钮,再重新播放,一般就可以听到声音了,我们目前尚不清楚原因,在以后的更新中,我们会尽量解决这个问题,感兴趣的用户,也可以自己查看一下原因。下面是播放 mp3 的界面。 第 - 331 - 页
    • 6.1.5 使用 SD-WiFi 上网 开机之前,把 SD-WiFi 模块先接到开发板的 SDIO 排针座上,也就是 CON9,如图。 然后开机进入 Android 系统,按 Menu(K2)键点 Setting,出现如图界面菜单 第 - 332 - 页
    • 点 Wireless & network,出现如图菜单,点一下“Wi-Fi”,会开启 SD-WiFi 模块,这时右边的方框勾号会变为绿色,如图 再点下面的“Wi-Fi settings” ,系统会自动搜索附近的无线网接入点,如图 第 - 333 - 页
    • 点你所要连接的无线网接入点,输入密码,如图连接成功,如图 第 - 334 - 页
    • 这时按 Home 按键返回 Android 主界面,点浏览器,输入网址,就可以上网浏览了,如图。6.1.6 使用 CMOS 摄像头 Mini6410 使用的 CMOS 摄像头和 mini2440 是可以共用的,因为它们的摄像头接口定义是完全相同的, 开机之前, CAM130 模块接到开发板的 CMOS 摄像头接口上(在 mini6410 把上是 CON10),如图。 第 - 335 - 页
    • 在主界面中找到“Camera”程序,并点击打开它,如图这时可以看到如图所示界面,看起来窗口比较小长按 Menu 键(对应开发板的 K2),可以旋转画面,如图 第 - 336 - 页
    • 6.1.7 图形界面的有线网络设置 开发板预装的 Android 系统,在桌面有一个以太网设置程序,如图: 点击进入,出会出现如图提示信息,通知你还没有设置好网络参数: 第 - 337 - 页
    • 1. 手工设置 IP 地址等网络参数 接上面的步骤,点“Close”继续,点“Setting”按钮开始设置网络参数。 可以看到第一行“Ethernet Network”是被勾选的,这表明以太网是可用的,它和我们通常所见的“ifconfig eth0 up”是等效的。 再看第二行“Use static IP”也是被勾选的,这表明你需要手工设置 IP 地址 点第三行的“IP address” ,出现设置窗口,根据你的网络环境设置好相应的 IP 地址,点 OK 返回。 按照同样的方法依次设置好其他网络参数:Gateway, Netmask, DNS,注意,如果你要 第 - 338 - 页
    • 上互联网,就一定要设置好 DNS。 设置完毕,按下开发板的“K1”按键(menu),返回上一级界面,这时可以看到正在设置的动画界面,当分配完毕,就可以看到如图绿色的显示图标了 点击图标,可以查看当前的网络参数信息,如图: 2. 使用 DHCP 自动设置 IP 地址 在网络参数设置界面,如果“Use static IP ”选项被勾选,此时点击它一下,会取消勾选,同时下面的提示文字也会变为“Using DHCP” ,如图: 需要注意的是,使用 DHCP,并不会自动分配 DNS 地址,所以你还需要自行设置, 第 - 339 - 页
    • 设置完毕,按开发板的 K1 按键(menu)返回上一级界面,会出现如图使设置生效的动画过程: 如果 IP 地址分配成功,就会出现一个绿色的图标,点此图标,可以看到分配到的 IP地址等网络参数,如图: 网络参数设置完毕,会在顶层的状态栏出现一个有线网络已经连接好的图标,这时你就可以使用上网,QQ,上优酷等网络应用程序了。 第 - 340 - 页
    • 6.1.8 使用 3G 上网卡拨号上网 为了方便使用,我们特意为 Android 平台设计开发了一个 3G 拨号上网程序,它可以自动检测并支持 100 多种型号的 USB 上网卡, 这主要是依据上网卡内部使用的芯片型号而定的, 涵盖了 WCDMA, CDMA2000, TD-SCDMA 等多种制式的网络。下面我们以使用 HUAWEIE1750 连 WCDMA 网为例说明一下它的使用步骤,其他型号或网络制式请自行验证。 Step1 先把 SIM 卡装好,如图 Step2 把上网卡插到开发板上,并打开 3G 拨号程序 Step3 拨号程序将会自动检测到 E1750 上网卡,因为我们已经测试过该卡是适用于WCDMA 网络,所以在程序中将其标识为(WCDMA),点击该型号的图标继续 第 - 341 - 页
    • Step4 在拨号程序界面中, 可以看到一个带减号的橙色图标, 这表示网络还没有连接, ,点拨号程序下面的按钮“Connect”开始连接。下面也有文字说明“Disconnected” Step5 这是连接的过程,稍等片刻 Step6 连接成功,橙色图标变为带勾的绿色,下面的文字变为“Connected”,同时会出现友善之臂网站的链接接图标和网址,而系统顶层状态栏也会出现 3G 的图标,如图。 Step7 点一下绿色的图标,可以查看当前的网络连接信息,如图 第 - 342 - 页
    • Step8 连网后为了适应其他网络应用程序,可以点“Hide”按钮把拨号程序放在后台。 Step9 在连接的任何时候,都可以通过下拉滑动顶层状态栏,返回到拨号程序界面,你可以在拨号界面中点“Disconnect”按钮断开网络连接。 Step10 上优酷看看吧,速度还是不错的 第 - 343 - 页
    • 6.1.9 使用 USB 蓝牙 因为 Linux 内核对蓝牙模块驱动的支持比较齐全,所以在 Android 系统中可以支持比较多型号的 USB 蓝牙适配器,不像 WinCE 那样仅支持有限的一些型号。 把 USB 蓝牙适配器,插入到开发板的 USB Host 端口: 这时,系统不会有任何反应,按开发板的 K2 按键,出现 Setting,点击进入系统设置主界面。 第 - 344 - 页
    • 点“Wireless & networks”进入无线网络设置界面,如图: 可以看到 Bluetooth 尚未打开,点击一下打开它,这时就可以看到系统顶层状态栏出现一个蓝牙图标了。 点 Bluetooth settings,可以进入蓝牙相关的设置界面,如设备名称,设置隐藏,扫描蓝牙设备等 第 - 345 - 页
    • 至此,你就可以像普通的 Android 系统那样通过蓝牙和其他蓝牙设备连接了,在此不再赘述。6.1.10 使用优盘 本开发板附带的 Android 系统可以支持优盘即插即用,可以支持最大 32G 优盘(注意,优盘需要为 FAT32 格式才可以)。 把优盘插入开发板的 USB Host 端口,注意状态栏的提示信息,稍等片刻,就会在左上角出现一个优盘的图片,如图: 滑动下拉顶层的任务栏,如图: 可以看到优盘已经被挂载的状态信息,点击它进入,如图: 第 - 346 - 页
    • 在此界面, “Umount USB mass storage” 点 可以安全卸载优盘, “Open folder brower” 点可以通过文件管理器打开浏览优盘内容,点击打开如图: 在这里出现的是 SD 卡的目录,点绿色向上方向的箭头,去上一级目录,再找到优盘对应的/udisk 目录,点击打开它,如下图:6.1.11 背光调节设置 在以上使用 Android 系统的过程中,或许你已经注意到了,当在一段时间内没有点击屏幕时,背光会逐渐熄灭,在系统设置主界面中,点“Sound & display” 第 - 347 - 页
    • 找到“Display settings”设置段,点“Brightness”,打开背光设置窗口,在此你可以设置背光亮度,点“Screen timeout”,在此窗口,你可以设置背光延时关闭的时间 第 - 348 - 页
    • 6.2 建立 Android 开发环境 说明:此处的 Android 开发环境,是指编译创建 Android 内核及基本系统所需要的开发环境,而不是指 Android 应用程序所需的开发环境;因时间原因, 我们将在以后增加 Android应用开发环境方面的说明,请留意我们网站的更新。6.2.1 关于开发平台和交叉编译器 Android 开发环境和标准的 Linux 基本相同,主要就是安装 Fedora9 开发平台,以及安装交叉编译器和 mktools 工具链, 它所使用的编译器和标准 Linux 是相同的, 详细步骤见本手册 4.3 章节。 注意:编译安装 Android 整个系统至少需要 5G 的硬盘空间!6.2.2 解压安装源代码 首先创建工作目录/opt/FriendlyARM/mini6410/android 在命令行执行 #mkdir –p /opt/FriendlyARM/mini6410/android 后面步骤的所有源代码都会解压安装到此目录中,目前它里面是空的。 (1)准备好 Android 源代码包 在 Fedora9 系统中/tmp 目录中创建一个临时目录/tmp/android #mkdir /tmp/android 把光盘中 Android 目录中的所有文件都复制到/tmp/Android 目录中 说明:这样做是为了统一下面的操作步骤,其实你可以使用其他目录,也可以直接从光盘解压安装。 (2)解压安装 u-boot 源代码 第 - 349 - 页
    • 在工作目录/opt/FriendlyARM/mini6410/android 中执行: #cd /opt/FriendlyARM/mini6410/android #tar xvzf /tmp/android/u-boot-mini6410-20100730.tar.gz 将创建生成 u-boot-mini6410 目录,里面包含了完整的内核源代码 说明:20100622 是发行更新日期标志,请以光盘中实际日期尾缀为准。 (3)解压安装 Android 内核源代码 在工作目录/opt/FriendlyARM/mini6410/android 中执行: #cd /opt/FriendlyARM/mini6410/android #tar xvzf /tmp/android/android-kernel-2.6.28-20100812.tar.gz 将创建生成 linux-2.6.28.6-android 目录,里面包含了完整的内核源代码 说明:20100812 是发行更新日期标志,请以光盘中实际日期尾缀为准。 (4)解压安装 Android 系统源代码包 在工作目录/opt/FriendlyARM/mini6410/android 中执行: #cd /opt/FriendlyARM/mini6410/android #tar xvzf /tmp/android/android-2.1-fs-20100812.tar.gz 将创建 Android-2.1 目录。 说明:20100812 是发行或更新日期标志,请以光盘中实际日期尾缀为准;源代码包中也包含了编译创建 Android-2.1 系统所需的所有源代码和脚本。 (5)解压 Android 系统 通过从源代码编译的方式创建文件系统需要很久的时间,有时你可能不需要从头编译,rootfs_android 就是我们已经编译好的 android 系统包。 在工作目录/opt/FriendlyARM/mini6410/android 中执行: #cd /opt/FriendlyARM/mini6410/android #tar xvzf /tmp/android/ rootfs_android-20100812.tar.gz 将创建 rootfs_android 目录。 说明: ,20100812 是发行或更新日期标志,请以光盘中实际日期尾缀为准。6.3 配置和编译 U-boot 说明:Android 所用的 U-boot 其实和标准 Linux 是一样的,根据开发板不同的内存(DDR RAM)容量,需要使用不同的 U-boot 配置项。 要编译适合于 128M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 #make mini6410_nand_config-ram128;make 将会在当前目录配置并编译生成支持 Nand 启动的 U-boot.bin,使用 SD 卡或者 USB下载到 Nand Flash 即可使用,详见第三章,光盘中 images/linux 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_nand-ram128.bin 第 - 350 - 页
    • 要编译适合于 256M 内存的 U-boot,请按照以下步骤: 进入 U-boot 源代码目录,执行: #cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410 #make mini6410_nand_config-ram256;make 将会在当前目录配置并编译生成支持 Nand 启动的 U-boot.bin,使用 SD 卡或者 USB下载到 Nand Flash 即可使用,详见第三章,光盘中 images/Android 目录中已经提供了编译好的该文件,为了便于区分,我们把它重新命名为 u-boot_nand-ram256.bin6.4 配置和编译 Linux 内核 Android 所用的 Linux 内核和标准的 Linux 内核有所不同,但使用的方法和步骤是相似的;如果你对配置 Linux 内核不熟悉,建议你使用我们提供的缺省内核配置。 要编译适用于 N43 型号 LCD 的内核,请这样使用缺省内核配置: #cd /opt/FriendlyARM/mini6410/android/ linux-2.6.28.6-android #cp config_android_n43 .config ;注意 config 前面有个”.” #make 最后会在 arch/arm/boot 目录下生成 zImage,我们把它重新命名为 azImage_n43 放入光盘中,以便区分 要编译适用于 A70 型号 LCD 的内核,请这样使用缺省内核配置: #cd /opt/FriendlyARM/mini6410/android/ linux-2.6.28.6-android #cp config_android_a70 .config ;注意 config 前面有个”.” #make 最后会在 arch/arm/boot 目录下生成 zImage,我们把它重新命名为 azImage_n70 放入光盘中,以便区分。6.5 从源代码开始创建 Android 正如你所看到的,Android 系统十分庞大,很多初学者都不能顺利的成功编译它,而且编译一次所需的时间很长(1.5-4 小时,甚至更长),为了方便大家使用,我们特意准备好了现成的源代码包,并且制作了 3 个脚本分别用来编译和创建 Andoid 系统:build-android、genrootfs.sh 和 genrootfs-s.sh 在命令行执行: #cd /opt/FriendlyARM/mini6410/android/Android-2.1 #./build-android 就开始编译 Android-2.1 系统,你需要等待很长的时间,建议开发 Android 系统不要使用虚拟机编译,使用多核的 CPU 加真实的 Linux 系统会快一些。 然后,再执行脚本: #./genrootfs.sh 就可以从编译完的 Android 系统提取出我们需要的目标文件系统了,最后会生成 第 - 351 - 页
    • rootfs_dir 目录,如图,它和上面提到的 rootfs_android 内容是完全相同的。 提示:使用 genrootfs-s.sh 脚本,可以编译出适用于串口触摸屏控制器的 LCD 套餐。 至此,我们已经从源代码开始,创建了在开发板上运行运行 Android 所需的所有核心系统文件:Bootloader, 内核和文件系统6.6 制作安装或运行文件系统映像 要在开发板上安装 Android 系统,还需要把上面生成的各部分文件烧写到 Nand Flash中才可以。其中,Bootloader 和内核已经是单文件映像形式,它们都可以很方便的通过 USB下载烧写,或者复制到 SD 卡中;而文件系统部分则是一个目录,这就需要 mktools 系列工具先把它制作成单个映像文件,才能方便使用。根据你想要选用的不同文件系统格式,下面分别介绍它们的制作方法 说明:你可以使用通过源代码方式编译生成的 android 系统来制作映像文件,也可以使用解压我们已经编译好的 android 文件系统包来制作以下的映像文件;下面的步骤基于前者。6.6.1 制作 yaffs2 格式的文件系统映像 使用 mkyaffs2image-128M 工具,可以把目标文件系统目录制作成 yaffs2 格式的映像文件,当它被烧写入 Nand Flash 中启动时,整个根目录将会以 yaffs2 文件系统格式存在,缺省的 Android 内核已经支持该文件系统,在命令行输入: #cd /opt/FriendlyARM/mini6410/android/Android-2.1 #mkyaffs2image-128M rootfs_dir rootfs_android.img 将会在当前目录下生成 rootfs_android.img 文件,你可以参考第三章的步骤方法,通过 USB 或者 SD 把它烧写到 Nand Flash 中。 提示: 如果你使用了串口触摸屏控制器, 则需要使用 rootfs_android-s 目标文件系统包。 第 - 352 - 页
    • 6.6.2 制作 UBIFS 格式文件系统映像 使用 mkubimage 工具,可以把目标文件系统目录制作成 UBIFS 格式的映像文件,当它被烧写入 Nand Flash 中启动时,整个根目录将会以 UBIFS 文件系统格式存在,缺省的Android 内核已经支持该文件系统,在命令行输入: #cd /opt/FriendlyARM/mini6410/android/Android-2.1 #mkubimage rootfs_dir rootfs_android.ubi 稍等片刻,将会在当前目录下生成 rootfs_android.ubi 文件,你可以参考第三章的步骤方法,通过 USB 或者 SD 把它烧写到 Nand Flash 中。 注意: UBIFS 格式文件系统具有一定的压缩性, 因此制作出的映像会比 yaffs2 格式的小一些,这样也可以烧写的更快一些。 提示: 如果你使用了串口触摸屏控制器, 则需要使用 rootfs_android-s 目标文件系统包。6.6.3 制作 ext3 格式的文件系统映像 使用 mkext3image 工具,可以把目标文件系统目录制作成 EXT3 格式的映像文件,把它拷贝到 SD 卡中,这样你就可以在 SD 卡中直接运行它了,而不必烧写入 Nand Flash 中,缺省的 Android 内核已经支持该文件系统,缺省的配置文件 FriendlyARM.ini 也已经支持启动ext3 映像文件,在命令行输入: #cd /opt/FriendlyARM/mini6410/android/Android-2.0 #mkext3image rootfs_dir rootfs_android.ext3 稍等片刻,将会在当前目录下生成 rootfs_android.ext3 文件,一般你把它直接复制到SD 卡中的 images/Android/目录中,并覆盖掉同名文件就可以使用它了;当然你也可以改为其他名字,同时修改配置文件 FriendlyARM.ini 中“Android-RootFs-RunImage =”的定义为你的文件名就可以了。 注意:EXT3 格式文件系统是可以保存数据的,使用 mkext3image 工具制作的映像文件一般比实际目录容量要大 30%,目的就是为了保存一些常用的配置文件,对于小于 64M 的目标文件系统,则以 64M 为基本容量计算,也就是说,最小的 ext3 文件映像为 64M x 1.3 =83.2M。 提示: 如果你使用了串口触摸屏控制器, 则需要使用 rootfs_android-s 目标文件系统包。 第 - 353 - 页
    • 第七章 嵌入式 Ubuntu 安装及使用说明 本开发板所用的 Ubuntu 为 0910 版本, 它是使用 ARMV6 指令编译器编译的最终版本,也就是说, 2010 年以后发布的 ARM 版 Ubuntu 都是 ARMV7 指令编译器,它们是不能在 6410上运行使用的;因为 S3C6410 最高支持 ARMV6 指令集。 Ubuntu 系统比较大(600M 多),一般不把它烧写到 Nand Flash 中使用,而是通过 SD卡运行;大部分人的做法是先在 Linux 下把 SD 卡格式化为 ext2/3 格式,再把系统文件拷贝到 SD 卡中,并修改相应的内核启动参数,从而实现从 SD 卡运行 Ubuntu;其中的很多步骤对于初学者来讲比较难以理解,而且不易操作;我们的做法是在 Linux 下使用一个命令把Ubuntu 系统制作成 EXT3 映像文件,然后把它复制到普通的 FAT32/FAT 格式的 SD 卡就可以了,并且光盘中已经有做好的映像文件。 另外,在 6410 上运行 Ubuntu 基本只能说明“这件事是可以做到的” ,Ubuntu 本来是为桌面系统设计的,虽然它可以运行,但我们认为它目前并不是一个实用的嵌入式系统,所以,本章节的内容主要介绍制作在 6410 上运行 Ubuntu 的基本系统步骤,并不涉及更多的细节,感兴趣的可以自行研究看看。 需要特别说明的是,自从 Superboot-20100917 开始,已经支持通过 SD 卡脱机烧写把Ubuntu 安装到 1GB Nand Flash 中,因此可以达到更好的运行效果。 对于采用内存(DDR RAM)为 256M 的开发板,也可以直接从 SD 卡运行 EXT3 映像文件,效果也不错。而使用内存为 128M 的开发板,运行速度比较慢。7.1 安装运行 Ubuntu7.1.1 把 Ubuntu 安装到开发板中运行 请参考 3.2.6 章节7.1.2 使用 SD 卡运行 Ubuntu 我们提供了方便的工具和方法,可以让你使用 SD 卡快速简单地运行完整的 Ubuntu系统,或许你已经在前面的章节体验过了,在此我们再简单介绍一下。 Step1: 使用 SD-Flasher.exe 工具,把 Superboot 烧写到 SD 卡中,见本手册 2.2.1 或者2.2.2 章节说明 Step2: 把光盘中的 image 目录复制到 SD 卡中 Step3: 打 开 SD 卡 imagesFriendlyARM.ini 配 置 文 件 , 修 改 ”Action=Run” , 修 第 - 354 - 页
    • 改”OS=Ubuntu” Step4: 把开发板 S2 设置为 SDBOOT,并插入 SD 卡,开机上电,即可运行 Ubuntu了。 第一次运行,会先出现触摸屏校正界面,依次点击“十”字形中心位置直到结束,这时 Ubuntu 系统开始启动,如下界面。 我们配置的 Ubuntu 系统,使用了 XFCE 窗口管理器,而不是 GNOME 系统,因为GNOME 太庞大了,整个系统几乎无法运行。进入系统之后,你可能看不到有趣的的应用程序,大部分都是基本设置,如果使用触摸笔不太方便,你也可以接 USB 鼠标试试,整个系统运行的很慢,你需要很大的耐心去体验才行。如果过段时间不动,系统会进入屏保状态,就像 PC 一样。 使用 XFCE 窗口管理器的 Ubuntu 桌面如图所示,可以看到,它可以自动识别到 SD卡,并在桌面上显示出来。 这是它的一些设置菜单截图。 第 - 355 - 页
    • 说明:通过 SD 卡运行 Ubuntu 系统,实际上只用到了 2 个文件: - uzImage : 内核文件,对于不同型号的 LCD,分别有不同的内核文件 - rootfs_ubuntu.ext3 : EXT3 格式的文件系统映像文件,制作方法见后面的章节 提示:如果你使用了串口触摸屏控制器,则需要指定 rootfs_ubuntu-s.ext37.2 建立 Ubuntu 开发环境 说明:此处的 Ubuntu 开发环境,仅是指编译创建相应内核及 Bootloader 需要的开发环境,而不是指整个 Ubuntu 文件系统。7.2.1 关于开发平台和交叉编译器 Ubuntu 开发环境和标准的 Linux 基本相同,主要就是安装 Fedora9 开发平台,以及安装交叉编译器和 mktools 工具链,它所使用的编译器和标准 Ubuntu 是相同的,详细步骤见本手册 4.3 章节。7.2.2 解压安装内核源代码 首先创建工作目录/opt/FriendlyARM/mini6410/ubuntu 在命令行执行 #mkdir –p /opt/FriendlyARM/mini6410/ubuntu 后面步骤的所有源代码都会解压安装到此目录中,目前它里面是空的。 (1)准备好 Ubuntu 系统文件包 在 Fedora9 系统中/tmp 目录中创建一个临时目录/tmp/ubuntu #mkdir /tmp/ubuntu 把光盘中 Ubuntu 目录中的所有文件都复制到/tmp/ubuntu 目录中 说明:这样做是为了统一下面的操作步骤,其实你可以使用其他目录,也可以直接从光盘解压安装。 第 - 356 - 页
    • (2)解压安装 u-boot 源代码 在工作目录/opt/FriendlyARM/mini6410/ubuntu 中执行: #cd /opt/FriendlyARM/mini6410/ubuntu #tar xvzf /tmp/ubuntu/ubuntu-kernel-2.6.28-20100622.tar.gz 将创建生成 u-boot-mini6410 目录,里面包含了完整的内核源代码 说明:20100622 是发行更新日期标志,请以光盘中实际日期尾缀为准。 (3)解压安装内核源代码 在工作目录/opt/FriendlyARM/mini6410/ubuntu 中执行: #cd /opt/FriendlyARM/mini6410/ubuntu #tar xvzf /tmp/ubuntu/ ubuntu-kernel-2.6.28-20100622.tar.gz 将创建生成 linux-2.6.28.6-ubuntu 目录,里面包含了完整的内核源代码 说明:20100622 是发行更新日期标志,请以光盘中实际日期尾缀为准。 (4)解压安装 ARM 版 Ubuntu 目标文件系统 在工作目录/opt/FriendlyARM/mini6410/ubuntu 中执行: #cd /opt/FriendlyARM/mini6410/ubuntu #tar xvzf /tmp/ubuntu/rootfs-ubuntu-0910-20100917.tar.gz #tar xvzf /tmp/ubuntu/rootfs-ubuntu-s-0910-20100917.tar.gz 将创建 rootfs-ubuntu-0910 和 rootfs-ubuntu-0910-s 目录。 说明:20100622 是发行或更新日期标志,请以光盘中实际日期尾缀为准;源代码包中也包含了编译创建 ubuntu 系统所需的所有源代码和脚本。rootfs-ubuntu-0910-s 适合于带串口触摸屏控制器的 LCD 套餐。7.3 制作安装或运行文件系统映像7.3.1 制作 UBIFS 格式文件系统映像 使用 mkubimage 工具,可以把目标文件系统目录制作成 UBIFS 格式的映像文件,当它被烧写入 Nand Flash 中启动时, 整个根目录将会以 UBIFS 文件系统格式存在, 缺省的 Ubuntu内核已经支持该文件系统,在命令行输入: #cd /opt/FriendlyARM/mini6410/ubuntu1 #mkubimage rootfs-ubuntu-0910 rootfs-ubuntu-0910.ubi 稍等片刻,将会在当前目录下生成 rootfs-ubuntu-0910.ubi 文件,你可以参考第三章的步骤方法,通过 USB 或者 SD 把它烧写到 Nand Flash 中。 注意: UBIFS 格式文件系统具有一定的压缩性, 因此制作出的映像会比 yaffs2 格式的小一些,这样也可以烧写的更快一些。 提示:如果你使用了串口触摸屏控制器,则需要使用 rootfs-ubuntu-0910-s 目标文件系统包。 第 - 357 - 页
    • 7.3.2 创建 EXT3 格式的 Ubuntu 系统映像文件 使用 mkext3image 工具,可以把目标文件系统目录制作成 EXT3 格式的映像文件,把它拷贝到 SD 卡中,这样你就可以在 SD 卡中直接运行它了,而不必烧写入 Nand Flash 中,缺省的 Ubuntu 内核已经支持该文件系统,缺省的配置文件 FriendlyARM.ini 也已经支持启动ext3 映像文件,在命令行输入: #cd /opt/FriendlyARM/mini6410/ubuntu #mkubimage rootfs-ubuntu-0910 rootfs-ubuntu-0910.ext3 稍等片刻,将会在当前目录下生成 rootfs-ubuntu-0910.ext3 文件,一般你把它直接复制到 SD 卡中的 images/Ubuntu/目录中,并覆盖掉同名文件就可以使用它了;当然你也可以改为其他名字,同时修改配置文件 FriendlyARM.ini 中“Ubuntu-RootFs-RunImage =”的定义为你的文件名就可以了。 注意:EXT3 格式文件系统是可以保存数据的,使用 mkext3image 工具制作的映像文件一般比实际目录容量要大 30%,目的就是为了保存一些常用的配置文件,对于小于 64M 的目标文件系统,则以 64M 为基本容量计算,也就是说,最小的 ext3 文件映像为 64M x 1.3 =83.2M。 提示:如果你使用了串口触摸屏控制器,则需要使用 rootfs-ubuntu-0910-s 目标文件系统包。7.4 更多信息 未完结束语本手册详细地向您介绍了如何开发和使用 Linux 或者 WindowsCE,这些都是一些基础性的东西,实际上,使用任何开发板都有一个类似的过程;我们相信,只要有兴趣,并且耐心的按照本手册去做了,您一定会掌握它,并体会到其中的乐趣;俗话说“师父领进门,修行在个人”,在技术不断更新和变革的今天,我们每个人都需要不断的学习和补充,我们希望能和您一起成长。 第 - 358 - 页