yiffer的个人空间 https://blog.eetop.cn/edesign [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

nano2410A 嵌入式linux移植

已有 4028 次阅读| 2009-5-21 23:01 |个人分类:Linux移植

Nano2410A V2.0 用户手册(V1.0)
广州友善之臂计算机科技有限公司
提示:使用Nano2410A V2.0 开发套件 + Arm-Linux/WindowsCE 不需要任何仿真器!
Nano2410A V2.0 用户手册
1
一、模块简介..................................................................................................................................................3
1.1 模块特性............................................................................................................................................3
1.2. 使用模块进行开发的优点....................................................................................................................3
1.3. 开发环境及工具简介...........................................................................................................................4
1.4. 关于本手册........................................................................................................................................4
二、快速安装指南...........................................................................................................................................5
2.1. 套件内容............................................................................................................................................5
2.2 硬件安装连接图解...............................................................................................................................6
2.3. 初步体验.......................................................................................................................................... 11
2.3.1 通过串口终端操作目标板.......................................................................................................... 11
2.3.2 测试LED................................................................................................................................. 12
2.3.3 测试按键.................................................................................................................................. 12
2.3.4 测试AD 输入............................................................................................................................ 12
2.3.5 播放mp3.................................................................................................................................. 13
2.3.6 录音测试.................................................................................................................................. 14
2.3.7 telnet 和ftp................................................................................................................................ 14
2.3.8 使用优盘或移动硬盘................................................................................................................. 16
2.3.9 使用SD/MMC 卡....................................................................................................................... 17
2.3.10 使用硬盘................................................................................................................................ 18
2.3.11 使用鼠标或触摸屏................................................................................................................... 19
2.3.12 使用USB摄像头..................................................................................................................... 19
2.3.13 串口通信测试.......................................................................................................................... 20
2.3.14 Flash 数据保存测试................................................................................................................... 20
三、硬件参考................................................................................................................................................ 21
3.1 Nano2410A V2.0 引脚定义.................................................................................................................. 21
3.2 开发套件介绍 ................................................................................................................................... 24
3.3 子模块介绍........................................................................................................................................ 25
3.3.1 存储系统.................................................................................................................................. 26
3.3.2 串口......................................................................................................................................... 26
3.3.3 USB 接口.................................................................................................................................. 26
3.3.4 SD/MMC 卡接口........................................................................................................................ 26
3.3.5 LCD 接口.................................................................................................................................. 27
3.3.6 IDE 接口................................................................................................................................... 27
3.3.7 以太网接口............................................................................................................................... 27
3.3.8 音频输入与输出........................................................................................................................ 27
3.3.9 用户LED................................................................................................................................. 27
3.3.10 用户按键................................................................................................................................ 27
3.3.11 实时时钟................................................................................................................................ 27
3.3.12 Jtag 接口................................................................................................................................. 27
3.3.13 I2C 接口.................................................................................................................................. 27
3.3.14 SPI 接口.................................................................................................................................. 27
3.3.15 电源输入................................................................................................................................ 27
四、安装开发环境......................................................................................................................................... 28
4.1 建立主机开发环境............................................................................................................................. 28
Nano2410A V2.0 用户手册
2
4.2 安装目标板系统................................................................................................................................ 29
4.2.1 嵌入式linux 开发简介............................................................................................................... 29
4.2.2 快速安装指南(Windows XP 下) .................................................................................................. 30
4.2.3 快速安装指南(Linux 下)............................................................................................................. 33
4.2.4 编译和烧写bootloader/vivi......................................................................................................... 37
4.2.5 编译和烧写内核........................................................................................................................ 39
4.2.6 编译busybox............................................................................................................................ 41
4.2.7 制作和烧写根文件系统.............................................................................................................. 41
4.3 更新目标板............................................................................................................错误!未定义书签。
4.3.1 更新bootloader/vivi........................................................................................错误!未定义书签。
4.3.2 更新内核.......................................................................................................错误!未定义书签。
4.3.3 更新文件系统................................................................................................错误!未定义书签。
4.3.4 bk 和bs..........................................................................................................错误!未定义书签。
五、应用开发与移植指南............................................................................................................................... 42
5.1.1 Hello, World! .............................................................................................................................. 42
5.2.2 测试LED................................................................................................................................. 43
5.1.3 测试按键.................................................................................................................................. 44
5.1.4 AD 数据采集.............................................................................................................................. 45
5.1.5 UDP 网络编程............................................................................................................................ 46
六、驱动程序开发示例................................................................................................................................. 51
6.1 驱动程序开发简要介绍...................................................................................................................... 51
6.2 驱动程序示例................................................................................................................................... 52
6.2.1 LED 驱动.................................................................................................................................. 52
6.2.2 中断驱动的按键驱动................................................................................................................. 56
6.2.3 实时时钟RTC 驱动................................................................................................................... 62
6.2.4 ADC 驱动................................................................................................................................. 74
七、嵌入式图形系统之Qt/Embedded............................................................................................................. 79
7.1 解压安装Qt 源代码............................................................................................................................ 80
7.2 使用build 脚本编译Qt/Embedded ....................................................................................................... 80
7.3 Hello,Qt(PC)....................................................................................................................................... 81
7.4 Hello,Qt(ARM) ................................................................................................................................... 83
7.5 常见问题.......................................................................................................................................... 83
7.5.1 执行build 时出现的错误............................................................................................................ 84
7.5.2 编译hello 时出现的错误............................................................................................................ 85
7.5.3 编译hello 时出现的第二种错误错误信息如下: .......................................................................... 85
附录 A Windows 超级终端使用图解............................................................................................................. 86
附录 B minicom 的使用方法........................................................................................................................... 89
附录 C sjf2410 使用指南.............................................................................................................................. 93
Nano2410A V2.0 用户手册
3
一、模块简介
1.1 模块特性
作为一种高级嵌入式系统控制主模块,Nano2410A V2.0 具有如下特性:
l 超小尺寸:58(W) x 36(L) x 11(H)mm
l ARM9 CPU:S3C2410A,系统主频最高可达266Mhz
l 大存储量(使用Nand Flash):64M Byte
l 更多的动态存储容量(SDRAM):32M byte
l 内置看门狗
l 内置实时时钟
l 3 个串口(均可扩展为485 接口)
l 小型的系统总线接口(可扩展以太网、IDE 等外设)
l 丰富的常用嵌入式系统接口:
SPI x 1
I2C x 1
I2S x 1 (一般用来外接音频输入与输出,也可用作GPIO)
AD x 2 (10 位精度)
PWM x 1
l 8 个外部中断
l 板载四线电阻触摸屏接口
l USB Host (可外接优盘、鼠标、摄像头、打印机、键盘等设备)
l USB Slave 接口
l 3 个外部中断
l 标准 JTAG 接口
l 外部复位信号
l 支持各种 STN 伪彩、TFT 真彩LCD,最高分辨率可达1024 x 768
l 2.0mm 间距112 针双列直插,使用极其方便
l 支持标准 Linux 2.4.18(可升级至2.6 版本内核)、WindowsCE 等高级嵌入式操作系统
1.2. 使用模块进行开发的优点
高度集成,快速开发!
高集成度的模块化设计能明显加快客户的开发速度.我们提供专业的"设计支持"服务,可以按照客户的要
求重新定义核心模块的引脚定义.这种方法比客户"从零开始"的开发更加迅捷而有效.
灵活设计,快速上市!
OS-ready 解决方案是一种随时可运行的ARM 核心引擎, 它加快了您产品的面市周期. 使用嵌入式
Linux/WindowsCE,客户可以更快的将最新应用引入市场中.
专业服务,后枕无忧!
通过各种实用的开发工具和示例代码,用户也可以按照我们提供的各种示例,开发自己专用的软件系统
Nano2410A V2.0 用户手册
4
1.3. 开发环境及工具简介
我们提供了一套完整的开发套件(Nano2410A V2.0 SDK2.0)给用户进行开发,该套件包含一个底板和各
种软件工具,您可以通过该套件测试Nano2410A V2.0 的各个功能.下面是关于主要软件开发工具的简要说明:
1. arm-linux-toolchains
安装在Linux下的GNU交叉编译器,用来编译嵌入式Linux内核, 驱动, 应用等程序
2.Cygwin
一种Windows下仿真Linux的软件, 可以使用它来编译各种Linux驱动和应用程序.
3.arm-linux-uclibc-toolchains
基于uclibc的交叉编译工具链,可以用来编译小型的嵌入式Linux应用程序
4.EVC
微软公司提供的嵌入式Visual C++集成开发环境,可以用来编译制作基于WindowsCE的应用程序。
5.ActiveSync
PC同步软件,可用来更新WindowsCE用户程序和数据。
6.Jtag烧写器
当系统完全崩溃时,可以使用它从头烧写系统。
1.4. 关于本手册
本手册适用于 Nano2410A V2.0 核心模块板,更新的文档版本请留意我们的网站通告http://www.arm9.net,恕不
另行通知.
Nano2410A V2.0 用户手册
5
二、快速安装指南
本节介绍了 Nano2410A V2.0 开发套件的组成和快速安装指南.通过本节您可以快速熟悉该模块所支持
的各种功能和使用方法。
2.1. 套件内容
Nano2410A V2.0 开发套件由以下几部分组成:
1. 一片装有 Nano2410A V2.0 核心板的底板Nano2410A V2.0 SDK20
2. 一张 DVD 数据光盘
3. 一只 Jtag 烧写器
4. 一条 USB电缆
5. 一条 DB9 直连串口线
6. 一条对等网线
7. 一只 12V/2A 开关电源
图 2-1 Nano2410A V2.0-SDK20 开发套件内容
Nano2410A V2.0 用户手册
6
2.2 硬件安装连接图解
Step1:打开包装
图 2-2 打开Nano2410A V2.0-SDK 包装
Step2:检查套件内容
如图 2-1 所示检查套件内容是否齐全。
注:液晶屏为选配件,不含在该套件以内。
Step3:连接LCD
使用套件中提供的电源适配器,连接至板上的电源插孔,并按照下图连接好液晶屏和开发板。
Nano2410A V2.0 用户手册
7
图 2-3 连接 LCD
Step4:开机画面(预装Linux)
l LCD 显示
当您打开电源开关之后,稍等片刻,将会看到Qt/Embedded Qtopia 的开机画面,如图2-4 所示。
图 2-3 打开电源,稍等片刻,出现中文Qtopia 开机界面
l 串口信息
Nano2410A V2.0 用户手册
8
打开超级终端(WindowsXP 系统)或者minicom(Linux 系统),按照附录说明设置好,将会从串口终端显示
如下ARM Linux 启动信息(实际的打印信息可能不会与此完全相同)。
VIVI version 0.1.4 (yang@capdev) (gcc version 2.95.3 20010315 (release)) #0.1.4 Mon Aug 15 16:57:01 2005
MMU table base address = 0x31DFC000
Succeed memory mapping.
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
Found saved vivi parameters.
Press Return to start the LINUX now, any other key for vivi
Copy linux kernel from 0x00030000 to 0x30008000, size = 0x00100000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock/0 console=ttyS0"
MACH_TYPE = 193
NOW, Booting Linux......
Uncompressing Linux............................................................. done, booting the kernel.
Linux version 2.4.18-rmk7-pxa1 (root@capdev) (gcc version 2.95.3 20010315 (release)) #1 五 6 月 10
02:37:54 CST 2005
CPU: ARM/CIRRUS Arm920Tsid(wb) revision 0
Machine: Samsung-SMDK2410
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: noinitrd root=/dev/mtdblock/0 console=ttyS0
DEBUG: timer count 15626
Console: colour dummy device 80x30
Calibrating delay loop... 99.94 BogoMIPS
Memory: 32MB = 32MB total
Memory: 30204KB available (1500K code, 414K data, 92K init)
Dentry-cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode-cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
CPU clock = 200.000 Mhz, HCLK = 100.000 Mhz, PCLK = 50.000 Mhz
Initializing S3C2410 buffer pool for DMA workaround
S3C2410 USB Controller Core Initialized
USB Function Character Driver Interface - 0.5, (C) 2001, Extenex Corp.
usbctl: Opened for usb-char
Nano2410A V2.0 用户手册
9
usbctl: Started for usb-char
Starting kswapd
devfs: v1.10 (20020120) Richard Gooch (rgooch@atnf.csiro.au)
devfs: boot_options: 0x1
ttyS%d0 at I/O 0x50000000 (irq = 52) is a S3C2410
ttyS%d1 at I/O 0x50004000 (irq = 55) is a S3C2410
ttyS%d2 at I/O 0x50008000 (irq = 58) is a S3C2410
Console: switching to colour frame. buffer device 80x30
Installed S3C2410 frame. buffer
pty: 256 Unix98 ptys configured
leds initialized
S3C2410 Real Time Clock Driver v0.1
block: 64 slots per queue, batch=16
Uniform. Multi-Platform. E-IDE driver Revision: 6.31
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
eth0: cs8900 rev K(3.3 Volts) found at 0xd0000300
cs89x0 media RJ-45, IRQ 37
Linux video capture interface: v1.00
SCSI subsystem driver Revision: 1.00
scsi0 : SCSI host adapter emulation for IDE ATAPI devices
UDA1341 audio driver initialized
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)
bon0: 00000000-00030000 (00030000) 00000000
bon1: 00030000-00130000 (00100000) 00000000
bon2: 00130000-03ff4000 (03ec4000) 00000000
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-ohci.c: USB OHCI at membase 0xe9000000, IRQ 26
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
port #1 suspened!
port #0 alived!
hub.c: 1 port detected
usb.c: registered new driver usblp
printer.c: v0.8:USB Printer Device Class driver
usb.c: registered new driver ov511
ov511.c: v1.48a for Linux 2.4 : OV511 USB Camera Driver
usb.c: registered new driver serial
usbserial.c: USB Serial support registered for Generic
usbserial.c: USB Serial Driver core v1.4
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
NET4: Linux TCP/IP 1.0 for NET4.0
Nano2410A V2.0 用户手册
10
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 2048)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
##########################################################################
# #
# FriendlyARM YAFFS Module (http://www.arm9.net) #
# Copyright by Guangzhou FriendlyARM (Tel: +86 (20) 85201025) #
# 2005-04-08 #
##########################################################################
yaffs: dev is 7936 name is "1f:00"
VFS: Mounted root (yaffs filesystem).
Mounted devfs on /dev
Freeing init memory: 92K
========================================
= Friendly-ARM Tech. Ltd. =
= http://www.arm9.net =
= http://www.arm9.com.cn =
========================================
init started: BusyBox v0.60.5 (2003.09.05-09:25+0000) multi-c 鵯l binary
Using /lib/input.o
Using /lib/keybdev.o
Using /lib/mousedev.o
mice: PS/2 mouse device common for all mice
Using /lib/evdev.o
Using /lib/hid-core.o
insmod: unresolved symbol hidinput_connect
insmod: unresolved symbol hidinput_hid_event
insmod: unresolved symbol hidinput_disconnect
Using /lib/usbmouse.o
usb.c: registered new driver usb_mouse
usbmouse.c: v1.6:USB HID Boot Protocol mouse driver
Using /lib/usbkbd.o
usb.c: registered new driver keyboard
usbkbd.c: :USB HID Boot Protocol keyboard driver
Using /lib/mmcsd_core.o
Warning: loading mmcsd_core will taint the kernel: non-GPL license - Not GPL, Proprietary License
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Using /lib/mmcsd_slot.o
Warning: loading mmcsd_slot will taint the kerneM: non-GPL licenMe - Not GPL, PrCprietary Licens/
See http://Sww.tux.org/lkmlD/#export tainted for infSormationlabout tainted modules
ot initialized
Using /lib/mmcsd_disk.o
Nano2410A V2.0 用户手册
11
Warning: loading mmcsd_disk will taint the kernel: non-GPL license - Not GPL, Proprietary License
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
[03/Sep/2030:05:41:22 +0000] boa: server version Boa/0.94.13
[03/Sep/2030:05:41:22 +0000] boa: server built Feb 28 2004 at 21:47:23.
[03/Sep/2030:05:41:22 +0000] boa: starting server pid=37, port 80
Please press Enter to activate this console.
2.3. 初步体验
通过初步体验,您可以了解开发板的各项功能和使用方法,对于不熟悉Linux 的用户,您可以体会到嵌
入式Linux 的乐趣所在。
2.3.1 通过串口终端操作目标板
基于嵌入式 Linux 开发,一般通过串口终端或telnet 终端与目标系统进行交互,如图2-4 所示为Windows
下的超级终端窗口(关于如何打开和设置超级终端请参考本手册的附录A)。
图 2-4 Windows 下的超级终端
通过超级终端,可以操作各种Linux 命令。当您复位系统,看到串口终端出现“Please press Enter to activate
this console.”信息时,就可以按下回车进入系统进行各种操作了,接下来的各种测试程序一般都是通过它来
执行的。
注意:如果按下回车串口打印类似“^@^@^@^@”这样的信息时,请重新复位系统,并在系统启动过
程中不要操作键盘。
Nano2410A V2.0 用户手册
12
2.3.2 测试LED
(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
将点亮 LED3
2.3.3 测试按键
buttons 是一个简单的读取Nano2410A V2.0 SDK20 上按键的程序。
运行 buttons 后,当按下K1 时,将打印“1”,松开时打印“129”;
运行 buttons 后,当按下K2 时,将打印“2”,松开时打印“130”;
运行 buttons 后,当按下K3 时,将打印“3”,松开时打印“131”;
运行 buttons 后,当按下K4 时,将打印“4”,松开时打印“132”。
其中松开后的键值是按下的键值与“0x80”相或后得到的。
注意:因为使用Ctrl+C 键无法中止程序运行,所以运行buttons 程序的时候最好使用后台方式,即:
#buttons &
2.3.4 测试 AD 输入
adtest 是用来测试ad 输入的一个实用程序,在串口终端如下输入:
#adtest &
将会不停的打印 AD 转换的结果,旋转开发板上的可调电阻旋钮,可以看到打印的数值会随着电压的改
变而相应改变。
Nano2410A V2.0 用户手册
13
下面是一些打印输出结果:
AIN0 = 3.2968 AIN1 = 2.2204
AIN0 = 3.2774 AIN1 = 2.1656
AIN0 = 3.2968 AIN1 = 2.0271
AIN0 = 3.2968 AIN1 = 1.8369
AIN0 = 3.2968 AIN1 = 1.5018
2.3.5 播放 mp3
madplay是友善之臂移植的一个基于控制台下的mp3播放器。它有多种播放控制模式,可以运行“madplay
-h”查看其使用帮助,如下:
#madplay -h
Usage: madplay [OPTIONS] FILE [...]
Decode and play MPEG audio FILE(s).
Verbosity:
-v, --verbose show status while decoding
-q, --quiet be quiet but show warnings
-Q, --very-quiet be quiet and do not show warnings
--display-time=MODE use default verbose time display MODE
(remaining, current, overall)
Decoding:
--downsample reduce sample rate 2:1
-i, --ignore-crc ignore CRC errors
--ancillary-output=PATH write ancillary data to PATH
Audio output:
-o, --output=[TYPE:]PATH write output to PATH with format TYPE (below)
-b, --bit-depth=DEPTH request DEPTH bits per sample
-R, --sample-rate=HERTZ request HERTZ samples per second
-d, --no-dither do not dither output PCM samples
--fade-in[=DURATION] fade-in songs over DURATION (default 0:05)
-a, --attenuate=DECIBELS attenuate signal by DECIBELS (-)
-a, --amplify=DECIBELS amplify signal by DECIBELS (+)
-A, --adjust-volume=DECIBELS override per-file volume adjustments
Channel selection:
-1, --left output first (left) channel only
-2, --right output second (right) channel only
-m, --mono mix left and right channels for monaural output
-S, --stereo force stereo output
Playback:
Nano2410A V2.0 用户手册
14
-s, --start=TIME skip to begin at TIME (HH:MM:SS.DDD)
-t, --time=DURATION play only for DURATION (HH:MM:SS.DDD)
-z, --shuffle randomize file list
-r, --repeat[=MAX] play files MAX times, or indefinitely
--tty-control enable keyboard controls
--no-tty-control disable keyboard controls
Miscellaneous:
-V, --version display version number and exit
--license show copyright/license message and exit
-h, --help display this help and exit
Supported output formats:
cdda CD audio, 16-bit 44100 Hz stereo PCM (*.cdr, *.cda)
aiff Audio IFF, [16-bit] PCM (*.aif, *.aiff)
wave Microsoft RIFF/WAVE, [16-bit] PCM (*.wav)
snd Sun/NeXT audio, 8-bit ISDN mu-law (*.au, *.snd)
raw binary [16-bit] host-endian linear PCM
hex ASCII hexadecimal [24-bit] linear PCM
null no output (decode only)
最简单的使用方法是:
#madplay your.mp3
该命令将以缺省模式播放 your.mp3 文件。
2.3.6 录音测试
你可以把麦克风接入到开发板上的mic 接口,使用鼠标单击运行Qtopia 里面的录音机程序,选择合适
的采样频率进行录音测试。
2.3.7 telnet 和ftp
进行本功能测试之前,请先按照实际的网络环境来设置开发板。如下:
#route add gw default 192.1.68.1.1
设置网关为 192.168.1.1
#ifconfig eth0 192.168.1.230
设置开发板 IP 地址为192.168.1.230
(1)telnet
telnet 是一个经常被使用的远程登录工具,使用telnet 功能,可以从开发板登录到其他提供了telnet 服务
器的主机,如图2-5 所示,使用telnet 登录“华南木棉bbs”。
Nano2410A V2.0 用户手册
15
图 2-5 使用telnet 登录bbs
(2) Telnet 服务器- inetd
当开发板启动以后,它将在后台执行inetd 服务程序,该程序提供了telnet 服务和ftp 服务,使得开发板
可以作为服务器被访问。
开发板的缺省 IP 地址被设置为192.168.0.230,则在Windows 系统中,点“开始->运行”中敲入以下命
令:
telnet 192.168.0.230
输入用户名 root,不需要密码按回车,即可登录目标板。
(3) 远程文件传送– ftp
ftp 的使用方法与标准Linux 是相同的,假定您的ftp 服务器IP 地址是192.168.0.80,在shell 命令提示符
下输入:
#ftp 192.168.0.80
如下图所示,就可以正常使用ftp 的命令了。
Nano2410A V2.0 用户手册
16
图 2-6 使用ftp 进行登录
(4)Ftp 服务器– inetd
当系统正常运行后,将会通过inetd 启动ftp 服务,此时目标板可作为一台ftp 服务器被别的机器访问。
在同样网域的计算机上输入:
C:>ftp 192.168..230
用户名:fa
密码:fa
即可登陆目标板。
2.3.8 使用优盘或移动硬盘
在开发板 Linux 系统中,移动存储设备对应的设备文件是/dev/scsi/host1/bus0/target0/lun0/part*,为了
能够和标准Linux 系统中的优盘设备名兼容,这里创建一个连接
#ln –s /dev/scsi/host1/bus0/target0/lun0/part1 /dev/sda1
该命令已经写入/etc/init.d/rcS 启动脚本中,因此系统启动后就已经可以直接使用/dev/sda1 了。当优盘接
入USB HOST 口(或者接入USB HUB),可以用以下命令把优盘设备挂接到系统的某一个目录上:
#mount /dev/sda1 /mnt
表示把优盘挂接到了/mnt 目录。
一般情况下,当优盘插入以后,您将在串口终端看到如图2-7 所示信息,以下命令根据信息提示直接把
优盘设备挂接到/mnt 目录:
#mount /dev/scsi/host1/bus0/target0/lun0/part1 /mnt
Nano2410A V2.0 用户手册
17
图 2-7 使用优盘
2.3.9 使用 SD/MMC 卡
SD 或MMC 的使用方法和优盘十分类似,插入存储卡之后,一般会跳出如图2-8 所示信息,同时会在
/dev/mmc 目录下出现对应的设备,使用以下命令挂接SD/MMC 卡设备到/mnt 目录,就可以对它进行操作了。
#mount /dev/mmc/disc0/part1 /mnt
注:经测试,系统支持8M - 1G 容量的各种SD/MMC 卡。
Nano2410A V2.0 用户手册
18
图 2-8 使用SD/MMC 卡
2.3.10 使用硬盘
本开发板上带有一个 DMA IDE 接口,用户可以使用44 pin 扁平电缆挂接一个2.5 寸小硬盘。由于采用
了DMA 方式,因此访问硬盘的读写速度平均可达5M byte/秒,这比IO 方式的硬盘连接设计平均要快6-8 倍。
注意:在开机使用之前,请务必先连接好硬盘和目标板,不可以在上电之后连接!!!
开机进入系统之后,您可以在/dev 目录下找到相应的硬盘设备文件,如图2-10 所示。
使用以下命令可以挂接小硬盘。
#mount /dev/ide/host0/bus0/target0/lun0/part1 /mnt
该命令表示把硬盘的第一个分区挂接到/mnt 目录。
说明:如果您的硬盘是NTFS 文件系统格式,则不能挂接。
Nano2410A V2.0 用户手册
19
图 2-9 连接小硬盘和开发板
图 2-10 硬盘在Linux 设备目录下的位置(part1 part2 分别代表2 个分区)
2.3.11 使用鼠标或触摸屏
开发板支持 USB 接口的鼠标,或四线电阻式触摸屏。缺省系统安装的Linux 内核和嵌入式图形系统
Qt/Embedded Qtopia 支持USB鼠标和键盘同时使用。如果您需要使用触摸屏,可自行烧写相应的系统程序。
说明:USB接口的鼠标和触摸屏不能同时在Qt/Embedded Qtopia 中使用。
2.3.12 使用 USB 摄像头
目前,开发板系统仅支持使用OV511 芯片的USB摄像头。使用摄像头时,可借助一个Usb Hub 同时连
接USB鼠标和USB摄像头,进入系统之后,用鼠标在Qtopia 主界面中点“摄像头”程序,即可以看到动态
的显示效果,如图2-11 所示。
Nano2410A V2.0 用户手册
20
图 2-11 使用摄像头动态显示外景
2.3.13 串口通信测试
暂无。
2.3.14 Flash 数据保存测试
由于本系统采用了可读写文件系统 yaffs(在嵌入式系统中,专门管理Flash 存储器的一种文件系统),因
此可以很方便的动态保存数据,掉电后不会丢失。开机后在串口终端运行以下命令:
#cp /root/Documents/shanghaitan.mp3 /home/fa
此时将在/home/fa 目录下复制一个同样的文件,然后关机,重新开启系统,可以查看到/home/fa 目录下
的文件依然存在。
Nano2410A V2.0 用户手册
21
三、硬件参考
本节描述了 Nano2410A V2.0 核心模块及开发板套件硬件系统的各个部分。
3.1 Nano2410A V2.0 引脚定义
图 3-1 Nano2410A V2.0 引脚定义
下表是Nano2410A V2.0缺省的端口引脚定义和可配置的端口说明。
表3-1 Nano2410A V2.0引脚配置说明
引脚 缺省功能 复用功能 所使用的CPU引脚注释
P1 端口引脚定义
P1.1 VD23 GPD15 P4
P1.2 VD22 GPD14 T4
P1.3 VD21 GPD13 U3
P1.4 VD20 GPD12 T3
P1.5 VD19 GPD11 U2
P1.6 VD18 GPD10 R4
P1.7 VD15 GPD7 U1
P1.8 VD14 GPD6 R2
Nano2410A V2.0 用户手册
22
P1.9 VD13 GPD5 T1
P1.10 VD12 GPD4 P2
P1.11 VD11 GPD3 P3
P1.12 VD10 GPD2 P1
P1.13 VD7 GPC15 N3
P1.14 VD6 GPC14 N1
P1.15 VD5 GPC13 M2
P1.16 VD4 GPC12 M4
P1.17 VD3 GPC11 M3
P1.18 VD2 GPC10 L4
P1.19 VD1 GPC9 L2
P1.20 VD0 GPC8 L1
P1.21 VFRAME. GPC3 K4
P1.22 VLINE GPC2 J6
P1.23 VCLK GPC1 J2
P1.24 VM GPC4 K2
P1.25 TDI - J1
P1.26 TMS - J3
P1.27 TDO - J5
P1.28 nTRST - H5
P1.29 TCK - H6
P1.30 nReset - J12
P1.31 SDCLK GPE5 T6
P1.32 SDCMD GPE6 P6
P1.33 SDDATA3 GPE10 R7
P1.34 SDDATA2 GPE9 P7
P1.35 SDDATA1 GPE8 N7
P1.36 SDDATA0 GPE7 R6
P1.37 PWM GPB0 F2
P1.38 nCD_SD EINT18/GPG10 P10
P1.39 LDATA0 - B8
P1.40 LDATA1 - A8
P1.41 LDATA2 - D7
P1.42 LDATA3 - E7
P1.43 LDATA4 - C7
P1.44 LDATA5 - B7
P1.45 LDATA6 - A7
P1.46 LDATA7 - C6
P1.47 LDATA8 - F7
P1.48 LDATA9 - B6
P1.49 LDATA10 - D6
P1.50 LDATA11 - A5
P1.51 LDATA12 - C5
P1.52 LDATA13 - B5
Nano2410A V2.0 用户手册
23
P1.53 LDATA14 - D5
P1.54 LDATA15 - A4
P1.55 VDD3.3V - -
P1.56 VDD3.3V - -
P2 端口引脚定义
P2.1 GND - -
P2.2 GND - -
P2.3 TSXP - -
P2.4 TSXM - -
P2.5 TSYP - -
P2.6 TSYM - -
P2.7 AIN0 - U16
P2.8 AIN1 - T15
P2.9 L3DATA TOUT3/GPB3 G3
P2.10 L3MODE TOUT2/GPB2 F4
P2.11 I2SLRCK GPE0 T5
P2.12 L3CLOCK TCLK0/GPB4 G4
P2.13 I2SSDO GPE4 U6
P2.14 I2SSDI GPE3 U5
P2.15 CDCLK GPE2 N6
P2.16 I2SSCLK GPE1 P5
P2.17 SPIMOSI GPE12 U7
P2.18 SPIMISO GPE11 T7
P2.19 SPICLK GPE13 P8
P2.20 nSS_SPI EINT10/GPG2 T8
P2.21 DP0 - P13
P2.22 DN0 - T12
P2.23 DP1 - M10
P2.24 DN1 - N11
P2.25 I2CSCL GPE14 L7
P2.26 I2CSDA GPE15 M8
P2.27 RXD0 GPH3 K17
P2.28 TXD0 GPH2 K15
P2.29 RXD1 GPH5 K14
P2.30 TXD1 GPH4 K16
P2.31 RXD2 GPH7 K12
P2.32 TXD2 GPH6 K13
P2.33 EINT0 GPF0 N14
P2.34 EINT1 GPF1 N17
P2.35 EINT2 GPF2 M16
P2.36 EINT3 GPF3 M17
P2.37 EINT4 GPF4 M15
P2.38 EINT19 GPG11 R11
P2.39 EINT9 GPG1 U8
Nano2410A V2.0 用户手册
24
P2.40 EINT11 GPG3 L9
P2.41 VDDRTC - M12
P2.42 nWAIT - G13
P2.43 nGCS1 GPA12 E15
P2.44 nGCS2 GPA13 E16
P2.45 nGCS3 GPA14 E14
P2.46 LnWBE1 - B16
P2.47 LnOE - C16
P2.48 LnWE - E13
P2.49 LADDR24 - B9
P2.50 LADDR4 - B13
P2.51 LADDR3 - C13
P2.52 LADDR2 - A14
P2.53 LADDR1 - D14
P2.54 LADDR0 GPA0 B14
P2.55 nXDACK0 GPB9 H2
P2.56 nXDREQ0 GPB10 H3
3.2 开发套件介绍
如图 3-2 所示为+Nano2410A V2.0 SDK20 开发板布局图,通过该板,可以向Nano2410A V2.0 提供电源,
以及引出一些标准接口(如串口,LAN 口,USB,Jtag 等)。
Nano2410A V2.0 用户手册
25
图 3-2 Nano2410A SDk20 接口布局图
3.3 子模块介绍
下面介绍 Nano2410A V2.0 各个子模块系统:
Nano2410A V2.0 用户手册
26
3.3.1 存储系统
Nano2410A V2.0 的存储系统主要由两部分组成:32M SDRAM 和 64M Nand Flash,如图3-3 所示,其
中SDRAM 采用16 位数据总线与CPU 连接使用。
图 3-3 Nano2410A V2.0 的存储系统
Linux 系统启动以后的地址分配如下:
SDRAM:0x30000000 – 0x32000000
Flash:0x00000000 – 0x04000000
3.3.2 串口
Nano2410A V2.0 带有3 个三线串口,均从CPU S3C2410A 内部直接引出,电平为TTL 电平。Nano2410A
V2.0 SDK20 开发套件已经通过Max3232CSE 芯片把其转为RS232 标准电平,用户可以直接和PC 相连。
注意:开发套件附带的串口线为直连的母口线。
3.3.3 USB 接口
Nano2410A V2.0 带有1 个Usb Slave 接口和1 个Usb Host 接口。Nano2410A V2.0 SDK20 开发套件分别
使用标准USB接口将其引出,在系统预装的嵌入式Linux 系统中,可以直接支持USB Hub、优盘、USB 移动
硬盘、USB 鼠标、USB 键盘、基于OV511 芯片的USB 摄像头。
另外,开发板上所提供的USB Slave 接口,暂无提供任何驱动程序。
3.3.4 SD/MMC 卡接口
Nano2410A V2.0 支持标准的SD/MMC 卡,开板板提供了标准的SD/MMC 卡插座,预装的Linux 系统
Nano2410A V2.0 用户手册
27
提供了相应的驱动程序,用户把SD/MMC 卡直接插入即可使用。
3.3.5 LCD 接口
根据实际情况,Nano2410A V2.0 引出了S3C2410A CPU 内部LCD 相关的大部分信号线,可以接使用各
种STN、TFT 等液晶。
3.3.6 IDE 接口
Nano2410A V.20 支持DMA 方式IDE 接口硬盘,预装的Linux 系统直接支持2.5 寸小硬盘,使用方法可
以参考前面章节。
3.3.7 以太网接口
Nano2410A V2.0 引出16 位系统数据总线和部分地址总线以及控制线, 开发板使用 CS8900 芯片扩展了
一个10M 以太网口。
3.3.8 音频输入与输出
Nano2410A V2.0 引出了S3C2410A CPU 自带的I2S 总线,通过UDA1341 芯片,可以播放声音和录制声
音。
3.3.9 用户LED
Nano2410A V2.0 SDK2.0 为用户提供了四个User Led,他们使用了S3C2410A 的SPI 接口。
3.3.10 用户按键
Nano2410A V2.0 SDK2.0 为用户提供了4 个中断方式按键。
3.3.11 实时时钟
S3C2410A 内置实时时钟,Nano2410A V2.0 通过Vrtc 信号引脚向该时钟供电,用户需要自行提供该电
池。
3.3.12 Jtag 接口
Nano2410A V2.0 引出了S3C2410A 内部全部的JTAG 引脚,以方便下载和调试,Nano2410A V2.0 SDK20
带有一个标准的20 针JTAG 座,用户可以使用Multi ICE 等在线仿真工具来调试非Linux/WindowsCE 系统。
3.3.13 I2C 接口
Nano2410A V2.0 带有一个I2C 总线接口, Nano2410A V2.0 SDK20 暂时没有提供该接口功能测试。
3.3.14 SPI 接口
Nano2410A V2.0 带有一个标准的SPI 接口,Nano2401A SDK 把该SPI 接口用作为普通IO 口,来控制4
个User LED
3.3.15 电源输入
Nano2410A V2.0 需要3.3V 直流电源输入,Nano2410A V2.0 SDK20 使用12V 电源输入。
Nano2410A V2.0 用户手册
28
四、安装开发环境
本节介绍如何在Redhat 9.0 上安装arm- linux 开发环境。
4.1 建立主机开发环境
建立开发环境包括安装交叉编译器、内核源代码、busybox以及文件系统制作工具等。以下步骤均在PC
Linux(推荐为Redhat 9.0)上执行。
Step1:挂接光盘
#mount /dev/cdrom /mnt
Step2:安装Nano2410A V2.0 Linux SDK
#cd /mnt/cdrom
#tar xvzf Nano2410AV2-SDK10.tgz –C /
将生成/usr/local/arm/2.95.3和/opt/FriendlyARM/Nano2410A_V2两个主要目录, 其中:
/usr/local/arm/2.95.3是arm-linux-gcc编译器所在的地方。
/opt/FriendlyARM/Nano2410A_V2的目录结构如下:
/opt/FriendlyARM/Nano2410A_V2
|___kernel_2.4.18 开发板所用的内核源码
|___Qt Qt/Embedded源代码
|___root_dir 目标板所使用的文件系统(包含uClibc库)
|___root_nfs 开发板的NFS文件系统
|___images 可以直接烧写到开发板的映象文件
|___examples 示例代码
|___Jflash 烧写工具
|___Documents 文档和手册
Step3:设置环境变量
1) 打开/etc/profle文件,增加下图红框所示文字,设置环境变量(注意:需要重启才生效):
Nano2410A V2.0 用户手册
29
图4-1 设置环境变量
2) 打开/etc/exports文件,增加如下一行,设置NFS服务(注意:每次修改此文件,需要重启NFS服务,
新的设置才生效):
/opt/FriendlyARM/Nano2410A_V2/root_nfs *(rw,sync,no_root_squash)
/opt/FriendlyARM/Nano2410A_V2/root_nfs是代表要作为Nano2410A_v2的根文件系统的共享目录;*代表
所有的客户机都可以挂接此文件系统目录;rw代表客户机以读写许可来挂接它们的根文件系统;
no_root_squash选项允许客户机以主机上的root身份挂接根文件系统。请阅读exports的手册获取更详细的信息。
3) 打开/etc/rc.local文件,在文件后面增加如下两行,设置主机ip和网关,您也可以使用自己的参数,
为了方便下文叙述,现在暂且认为你也跟我们一样设置:
ifconfig eth0 192.168.1.104
route add default gw 192.168.1.1 eth0
4) 仍然打开/etc/rc.local文件,在文件后面增加一行“/etc/init.d/nfs start”,以使开机后自动启
动NFS服务,你也可以运行如下命令启动、停止或重启NFS服务:
#/etc/init.d/nfs start
#/etc/init.d/nfs start
#/etc/init.d/nfs start
4.2 安装目标板系统
下面介绍如何编译安装 Arm-Linux 系统到目标板。
4.2.1 嵌入式linux 开发简介
一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:
1. 引导加载程序bootloader
以x86作为类比,bootloader相当于BIOS,用于初始化、检测目标板和引导linux内核。
Nano2410A V2.0 用户手册
30
2. Linux 内核
特定于嵌入式板子的定制内核以及内核的启动参数。
3. 文件系统
包括根文件系统和建立于Flash 内存设备之上文件系统,通常用 ram disk 来作为root fs。对于嵌入式
Linux初学者来说,“文件系统”这个名词有几种不同的含义,要根据上下文才能加以区分:
a. 指一种特定的文件格式。例如,我们说linux的文件系统有Ext2,MSDOS的文件系统是FAT16,而
Windows NT的文件系统是NTFS或FAT32。在使用flash作为存储介质的嵌入式设备上,非常流行的文件系统为
jffs2、yaffs。
b. 指按特定格式进行了“格式化”的一块存储介质。当我们说“安装”(mount)、或“拆卸”(umount)
一个文件系统时就是这个意思
c. 指操作系统中用来管理文件系统以及对文件进行管理的机制及其实现。比如本开发板使用yaffs文件
系统,你可以在kernel_2.14.18/fs/yaffs目录下看见若干文件,它们就是用来实现yaffs文件系统的。通常我们说
移植某某“文件系统”时,指的就是这个意思。
4. 用户应用程序
特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。
本开发板使用的bootloader为SAMSUNG公司提供的vivi,linux内核使用MIZI公司提供的mizi-linux,文件
系统为yaffs。以下依次介绍如何在开发板上搭建linux环境。
4.2.2 快速安装指南(Windows XP 下)
在 Windows XP 下安装开发板的Linux 系统的步骤大致是:先使用Jtag 下载板通过并口烧写
bootloader/vivi,再使用vivi 进行分区,然后通过USB分别下载内核和文件系统二进制映象文件。下面一步一
步进行详细的介绍:
Step1:使用Jtag 工具烧写bootloader/vivi
首先根据光盘中的“sjf2410 安装指南.pdf”安装驱动程序,然后使用sjf2410.exe 烧写vivi,如图4-2
所示。
Nano2410A V2.0 用户手册
31
图 4-2 使用sjf2410 烧写vivi
Step2:使用vivi 的bon 命令分区
当 vivi 烧写完毕,打开Windows XP 系统自带的超级终端(附件->超级终端,详见附录C),设置波特率
为115200,无流控制,其他默认。按住键盘的空格键,打开开发板电源进入vivi 模式,在提示符下输入分区
命令:
FriendlyARM>bon part 0 192k 1216k
注意:分区过程和分区完毕暂时先不要关掉电源,也不能复位系统。
分区完毕,此前烧写的vivi 已经被擦除,这时可以通过串口的xmodem 协议重新下载一次:
FriendlyARM>load flash vivi x
如图 4-3 所示。
Nano2410A V2.0 用户手册
32
图 4-3 使用vivi 进行分区和重新下载vivi
Step3:通过USB 下载内核
等分区完毕,并把vivi 通过xmodem 协议重新下载烧写完,请关闭开发板电源,按住键盘的空格键,重
新打开开发板电源,进入vivi 提示符模式,此时可以通过USB下载内核和文件系统。
输入“load flash kernel u”,此时出现USB已经连接的提示(当第一次使用USB下载时,会提示
用户安装相应的USB驱动,请按照提示安装),并等待USB下载,此时打开dnw.exe 程序,点击菜单的“USB
Port->Tansmit”,选择要下载的内核文件,下载完毕,内核文件会自动烧写到Flash 的相应分区,如图4-4 所
示。
Nano2410A V2.0 用户手册
33
图 4-4 通过USB下载烧写内核
Step4:通过USB 下载文件系统映象文件
当内核下载烧写完毕,就可以使用loadyaffs 命令通过USB接着进行下载和烧写文件系统映象文件。
输入“loadyaffs – e root u”,此时出现USB 已经连接的提示(当第一次使用USB下载时,会提示用
户安装相应的USB驱动,请按照提示安装),并等待USB下载,此时打开dnw.exe 程序,点击菜单的“USB Port
->Tansmit”,选择要下载的文件系统映象文件,下载完毕,稍等片刻,文件系统就会自动烧写到Flash 的相
应分区,如图4-5 所示。
烧写完毕,就可以在vivi 提示符下输入“boot”或者重新启动开发板进入系统了。
图 4-5 通过USB下载文件系统映象文件
4.2.3 快速安装指南(Linux 下)
在Linux烧写开发板Linux的步骤和Windows下大体相似,其步骤是:先使用Jflash-s3c2410烧写程序通过
Jtag接口烧写bootloader/vivi,然后再通过xmodem协议下载烧写内核文件,最后通过网络文件系统烧写开发
板的文件系统。
Step1: 使用JTAG工具烧写bootloader/vivi
使用JTAG接口下载程序需要一条JTAG下载电缆和一个Jflash烧写程序。把JTAG电缆连接Nano2410A
V2.0和主机的并口,然后打开目标板电源开关。
Jflash工具Jflash-s3c2410在/opt/FriendlyARM/Nano2410A_V2/Jflash目录下,如果您已经把该目录
加入到系统环境变量PATH中,就可以直接执行如下命令即可看到用法:
#Jflash-s3c2410 --help
对应不同类型的Flash,Jflash程序使用不同的选项参数,因为我们使用的是64M三星Nand Flash,因此使用
“/t=5”(/t是类型选择的意思)。 执行以下命令开始烧写vivi:
Nano2410A V2.0 用户手册
34
#cd /opt/FriendlyARM/Nano2410A_V2/images
#Jflash-s3c2410 vivi /t=5
如图4-6所示。
图4-6 在Linux下使用Jflash烧写bootloader/vivi
Step2:通过xmodem下载内核
当vivi烧写完毕后,启动Linux自带的串口终端程序minicom,选择波特率115200,8 N 1(8位数据位,1
位停止位,无流控);按复位键,在vivi启动后迅速敲击键盘任意键进入vivi控制控制面。
输入“load flash kernel x”开始下载内核,下载完毕内核文件会自动烧写到flash的相应分区。
提示:运行此命令后,先按下“Ctrl”,不要松开,再按下“a”键,然后同时松开,再按下“s”键,进入下载
模式,选择“xmodem”发送文件。通常第一次发送文件会出现传送失败情况,如图4-7所示。此时回到vivi提示
Nano2410A V2.0 用户手册
35
符界面,再次输入“load flash kernel x”,回车后快速操作以上步骤,因为刚刚输入的文件已经保存了位置,
一般选择xmodem以后快速回车即可,这样就可以正常下载了,如图4-8所示。
图4-7 第一次一般会出现传送的错误
图4-8 正常下载过程
Step3:启动主机的nfs服务
在Linux下烧写文件系统需要借助网络文件系统,首先设置主机的IP地址(如果已经设置,可跳过此步):
#ifconfig eth0 192.168.1.101 //设置主机的IP地址为192.168.1.102
然后设置NFS共享目录,编辑/etc/exports文件如下:
/opt/FriendlyARM/Nano2410A_V2/root_nfs *(rw,sync,no_root_squash)
保存退出,然后手工启动NFS服务:
/etc/init.d/nfs start
Nano2410A V2.0 用户手册
36
Step4:通过NFS下载烧写文件系统
首先设置网络启动参数,按住空格键,打开开发板电源或者复位开发板,进入vivi提示符模式,如下输
入网络启动参数:
param set linux_cmd_line "console=ttyS0 root=/dev/nfs nfsroot=your_pc_ip:nfs_directory
ip=board_ip:your_pc_ip:board_gateway:netmask::eth0:off"
参数说明:
your_pc_ip 主机的ip,可以使用ifconfig命令查看
nfs_directory 主机上nfs目录,在前面设置的/etc/exports的内容
board_ip 开发板的ip,随意取一个,与主机ip在同一网段即可
board_gateway 网关,与主机相同,可以使用route命令查看
netmask 子网掩码,与主机相同,可以使用ifconfig命令查看
如果在前面您依照说明设置了主机ip和网关,可以使用如下命令:
param set linux_cmd_line "console=ttyS0 root=/dev/nfs
nfsroot=192.168.1.102:/opt/FriendlyARM/Nano2410A_V2/root_nfs
ip=192.168.1.70:192.168.1.102:192.168.1.102:255.255.255.0:Nano2410A_V2.arm9.net:eth0:off"
再输入boot命令就可以启动系统。
为了方便客户通过nfs烧写或更新系统,我们把通过nfs安装的命令写了两个批处理文件,分别是:bk和
bs。
根据bk和bs后面有不同的参数,可以烧写适应不同系统的程序:
1) 要使用不带触摸屏的640x480分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_6448
#bs_nano2410v2_6448
2) 要使用不带触摸屏的240x320分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_2432
#bs_nano2410v2_2432
3) 要使用不带触摸屏的800x600分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_8060
#bs_nano2410v2_8060
4) 要使用不带触摸屏的800x480分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_8048
#bs_nano2410v2_8048
5) 要使用带触摸屏的640x480分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_6448_tp
#bs_nano2410v2_6448_tp
6) 要使用不带触摸屏的240x320分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_2432_tp
#bs_nano2410v2_2432_tp
7) 要使用不带触摸屏的800x600分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_8060_tp
#bs_nano2410v2_8060_tp
8) 要使用不带触摸屏的800x480分辨率的TFT LCD,请使用以下命令:
#bk_nano2410v2_8048_tp
#bs_nano2410v2_8048_tp
下面将分别介绍如何编译、制作、烧写自己的映象文件:
Nano2410A V2.0 用户手册
37
4.2.4 编译和烧写 bootloader/vivi
在嵌入式系统中,不像PC那样,在主板上有一个CMOS,用来存放固件(firmware)。而是使用一个被称作
bootloader的程序,用以启动系统和作简单的管理。
实际上,在一个稍微复杂的嵌入式系统中,bootloader是十分重要的,它有如下作用:
? ? . 把内核(kernel)从flash复制到RAM,然后启动它
? ? . 初始化硬件
? ? . 下载映象文件并写入flash(一般通过串口或者网口先把内核下载到RAM中,然后写入到flash)
? ? . 检测目标板(bootloader会有一些简单的代码用以测试目标板硬件的好坏)
vivi是什么?
vivi是由mizi 公司设计为ARM处理器系列设计的一个bootloader,因为vivi 目前只支持使用串口和主机
通信,所以您必须使用一条串口电缆来连接目标板和主机。在Nano2410A V2.0中,使用的是一条标准母对母
串口线。
Bootloader/vivi 的代码在/opt/FriendlyARM/Nano2410A_V2/bootloader_vivi 目录下,您可以如下编
译:
首先,进入vivi源代码目录:
#cd /opt/FriendlyARM/Nano2410A_V2/vivi
然后配置和编译它,如下步骤:
执行“make menuconfig”命令开始配置vivi,实际上,你不需要自己手工选择配置它,已经配置好
了,只需装载一个缺省的配置文件即可,使用这个配置文件生成的vivi正好适合于目标板,这个配置文件在
vivi/arch目录中,该目录包含了一些适合于各种板的配置文件。
装载“arch/nano2410v2”,然后保存该设置,并执行“make”命令编译vivi。
#cd /opt/FriendlyARM/Nano2410A_V2/vivi
#make menuconfig
配置上述命令后,进入如图4-9所示配置界面:
Nano2410A V2.0 用户手册
38
图4-9 进入vivi配置界面
配置在跳出的窗口中选择“Load on Alternate Configuration File”菜单,然后输入“arch/nano2410v2”,如图
4-10 示:
图4-10 装载缺省配置文件
Nano2410A V2.0 用户手册
39
再选择“OK”,图4-9又会出现一次,这时选择退出,跳出如图4-11所示界面。选择“Yes”保存刚才的配置。
图4-11 保存配置
保存完毕,执行以下命令:
#make
如果编译过程顺利,将会在当前目录下生成vivi二进制映象文件。
如果您的目标板还没有安装vivi,则可以使用JTAG 工具将生成的vivi 烧写到板子上;如果已经安装了
vivi,可以进入vivi 控制界面,使用如下命令将您新生成的vivi 烧到板子上(注意,下面命令的“vivi”是指分区
的名字):
#load flash vivi x
4.2.5 编译和烧写内核
内核的编译和烧写,与上面vivi类似:
a. 进入内核目录
#cd /opt/FriendlyARM/Nano2410A_V2/kernel_2.4.18
b. 配置内核
方法与vivi类似,您可以在配置窗口中选择“Load on Alternate Configuration File”菜单,然后输入
“arch/arm/nano2410v2”,如图4-5、4-6所示使用默认的配置选项,然后保存退出。
#make menuconfig // 进入内核配置界面
Nano2410A V2.0 用户手册
40
图4-5 进入kernel配置界面
图4-6 配置kernel
c. 编译内核
Nano2410A V2.0 用户手册
41
#make zImage // 编译内核
最后在arch/arm/boot目录下生成zImage,然后,您可以进入vivi控制界面,使用如下命令将生成的zImage
文件通过串口烧写到flash上:
FriendlyARM>load flash kernel x //通过xmodem烧写内核映象文件
也可以通过USB下载烧写:
FriendlyARM>load flash kernel u //通过usb烧写内核映象文件
4.2.6 编译 busybox
busybox是多个linux工具的集合,在嵌入式linux中,使用busybox带来很大的便利。本开发板使用
busybox1.00,代码在/opt/FriendlyARM/busybox1.00目录下,编译方法与前述类似:
#cd /opt/FriendlyARM/Nano2410A_V2/busybox1.00 // 进入源码目录
#make menuconfig // 进入busybox配置界面
#make // 编译busybox
在busybox配置界面中,您可以选择“Load on Alternate Configuration File”菜单,然后输入“nano2410v2”,
使用默认的配置选项。
“make”命令结束后,将在当前目录下生成可执行文件”busybox”,及文件”busybox.link”。busybox中包含
的每个工具,在文件busybox.link中都有一项,在后续制作文件系统时,将为每个工具都创建到busybox的链接。
为什么称busybox是一个工具的集合呢?我们知道linux中有很多工具(或称为命令),比如ls、vi、telnetd、
cd等等,数量成百上千。把这些工具一个个都找到是一件困难的事,把它们一个个放入开发板上的flash中,
恐怕容量也不足。而使用busybox的话,只需要一个文件。比如要使用ls命令时,我们可以如下运行:
#busybox ls
为了更方便地使用busybox,可以为某一个命令建一个到busybox的同名链接,然后直接执行此命令即可。
比如对于ls命令,可以使用如下命令建立一个到busybox的链接:
#ln – s busybox ls // 建立到busybos的链接ls
然后,直接运行ls命令即可。
上述所说的制作链接,也无需我们一个个地动手,这将在下一节”制作和烧写文件系统”中介绍。
4.2.7 制作和烧写根文件系统
首先,将文件系统目录制作成yaffs文件系统映象:
#cd /opt/FriendlyARM/Nano2410A_V2
#mkyaffsimg /opt/FriendlyARM/root_dir root_yaffs.img
然后通过vivi下载到flash上:
#loadyaffs – e root u
Nano2410A V2.0 用户手册
42
五、应用开发与移植指南
本节介绍如何编写、编译下载应用程序到开发板。
5.1.1 Hello, World!
Step1:编辑源代码
在 PC 上编辑以下源代码,并保存为hello.c
#include <stdio.h>
int main(void)
{
printf("Hello, World\n");
return 0;
}
Step2:编译hello
使用以下命令编译:
#arm-linux-gcc –o hello hello.c
将生成 hello 可执行文件。
Step3:下载并运行
将可执行文件移动到开发板目前主要有两种方式:
(1)复制到介质(下面以优盘为例)
把优盘插入 PC 的USB,然后执行以下命令把hello 复制到优盘
#mount /dev/sda1 /mnt
#cp hello /mnt
#umount /mnt
把优盘拔下来插入到开发板的 USB HOST 端口,按照以下命令操作:
#mount /dev/sda1 /mnt ;挂接优盘
#cp /mnt/hello /bin ;把hello 复制到bin 目录
#hello ;执行hello
(2)通过网络移动(推荐使用)
通过网络下载程序的主要步骤是:先把hello 复制到ftp 共享目录,然后在开发板上使用ftp 下载,并修改
执行权限运行,如下:
在 PC 端执行:
#cp hello /home/ftp ;把hello 复制到ftp 共享目录
在开发板端执行:
#cd /bin ;进入bin 目录
#ftp 192.168.0.1 ;登录ftp 服务器
Nano2410A V2.0 用户手册
43
>get hello ;下载hello
>bye ;退出ftp 登录
#chmod a+x hello ;改变hello 的可执行权限
#hello ;执行hello
5.2.2 测试LED
led 控制程序的源代码位于/opt/FriendlyARM/Nano2410A_V2/examples/led 目录下,下面是程序清单及注
释。
程序清单:
#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|1\n");
exit(1);
}
/*打开/dev/leds 设备文件*/
fd = open("/dev/leds", 0);
if (fd < 0) {
perror("open device leds");
exit(1);
}
/*通过系统调用ioctl 和输入的参数控制led*/
ioctl(fd, on, led_no);
/*关闭设备句柄*/
close(fd);
return 0;
}
Nano2410A V2.0 用户手册
44
你可以按照上面的 hello 程序的步骤手工编译出led 可执行文件,然后下载到开发板运行它。
5.1.3 测试按键
按键测试程序 buttons 的源代码位于/opt/FriendlyARM/Nano2410A_V2/examples /buttons 目录下,下面是
程序清单及注释:
/*
* Buttons Example for Nano2410A V2.0
*
* Copyright (C) 2004 capbily - FriendlyARM
* capbily@163.com
*/
#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;
int key_value;
/*打开键盘设备文件*/
buttons_fd = open("/dev/buttons", 0);
if (buttons_fd < 0) {
perror("open device buttons");
exit(1);
}
for (;;) {
fd_set rds;
int ret;
FD_ZERO(&rds);
FD_SET(buttons_fd, &rds);
/*使用系统调用select 检查是否能够从/dev/buttons 设备读取数据*/
ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL);
Nano2410A V2.0 用户手册
45
/*读取出错则退出程序*/
if (ret < 0) {
perror("select");
exit(1);
}
if (ret == 0) {
printf("Timeout.\n");
}
/*能够读取到数据*/
else if (FD_ISSET(buttons_fd, &rds)) {
/*开始读取键盘驱动发出的数据,注意key_value 和键盘驱动中定义为一致的类型*/
int ret = read(buttons_fd, &key_value, sizeof key_value);
if (ret != sizeof key_value) {
if (errno != EAGAIN)
perror("read buttons \n");
continue;
} else {
/*打印键值*/
printf("buttons_value: %d\n", key_value);
}
}
}
/*关闭设备文件句柄*/
close(buttons_fd);
return 0;
}
你可以按照上面的 hello 程序的步骤手工编译出buttons 可执行文件,然后下载到开发板运行它
5.1.4 AD 数据采集
AD 数据测试程序adtest 的源代码位于/opt/FriendlyARM/Nano2410A_V2/examples /ad 目录下,下面是程
序清单:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <fcntl.h>
Nano2410A V2.0 用户手册
46
#include "s3c2410-adc.h"
#define ADC_DEV "/dev/adc/0raw"
static int adc_fd = -1;
static int GetADresult(int channel)
{
int PRESCALE=0XFF;
int data=ADC_WRITE(channel, PRESCALE);
write(adc_fd, &data, sizeof(data));
read(adc_fd, &data, sizeof(data));
return data;
}
int main(void)
{
int i;
float d;
void * retval;
if((adc_fd=open(ADC_DEV, O_RDWR))<0){
printf("Error opening %s adc device\n", ADC_DEV);
exit(0);
}
while(1 ){
d=((float)GetADresult(0)*3.3)/1024.0;
printf("AIN0 = %8.4f\t ", d);
d=((float)GetADresult(1)*3.3)/1024.0;
printf("AIN1 = %8.4f\t ", d);
printf("\r\n");
sleep(1);
}
return 0;
}
你可以按照上面的 hello 程序的步骤手工编译出buttons 可执行文件,然后下载到开发板运行它
5.1.5 UDP 网络编程
TCP/IP 提供了无连接的传输层协议:UDP(User Datagram Protocol,即用户数据报协议)。UDP 与TCP 有
很大的区别,因为无连接的socket 编程与面向连接的socket 编程也有很大的差异。由于不用建立连接,因此
每个发送个接收的数据报都包含了发送方和接收方的地址信息。
Nano2410A V2.0 用户手册
47
在发送和接收数据之前,先要建立一个数据报方式的套接字,该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);
其中 s 为所使用的socket,msg 和buf 分别为发送和接收的缓冲区指针,len 为缓冲区的长度,flags 为选
项标志,此处还用不到,设为0 即可。to 和from 就是发送的目的地址和接收的来源地址,包含了IP 地址和
端口信息。tolen 和fromlen 分别是to 和from 这两个socket 地址结构的长度。这两个函数的返回值就是实际发
送和接收的字节数,返回-1 表示出错。
使用无连接方式通信的基本过程如图 6-2 所示。
图 5-1 UDP 通信的基本过程
上图描述的是通信双方都绑定自己地址端口的情形,但在某些情况下,也可能有一方不用绑定地址和端口。
不绑定的一方的地址和端口由内核分配。由于对方无法预先知道不绑定的一方的端口和IP 地址(假设主机有多
个端口,这些端口分配了不同的IP 地址),因此只能由不绑定的一方先发出数据报,对方根据收到的数据报中
的来源地址就可以确定回送数据报所需要的发送地址了。显然,在这种情况下对方必须绑定地址和端口,并
且通信只能由非绑定方发起。
与 read()和write()相似,进程阻塞在recvfrom()和sendto()中也会发生。但与TCP 方式不同的是,接收到
一个字节数为0 的数据报是有可能的,应用程序完全可以将sendto()中的msg 设为NULL,同时将len 设为0。
下面是一个基于以上原理分析的一个 udp 编程的例子(源代码位于/friendly-arm/examples/udptalk 目录):
/*
* udptalk :Example for Matrix V
*
* Copyright (C) 2004 capbily - friendly-arm
* capbily@hotmail.com
Nano2410A V2.0 用户手册
48
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#define BUFLEN 255
int 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 udptalk\n");
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){
printf("bind local address err in udptalk!\n");
exit(2);
Nano2410A V2.0 用户手册
49
}
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/Nano2410A_V2/exampls/udptalk 目录下的Makefile
指定了两个编译目标可执行文件,一个用于在主机端的x86-udptalk,一个是用于开发板的arm-udptalk,运行
make 命令将把这两个程序一起编译出来。可以把arm-udptalk 使用上面介绍的方法下载到开发板中(预装的
Linux 不含该程序),假设主机的IP 地址为192.168.0.1,开发板的IP 地址为192.168.0.230。
在主机的终端上输入:
#./x86-udptalk 192.168.0.230 2000 192.168.0.1 2000
在开发板上的终端输入
#arm-udptalk 192.168.0.1 2000 192.168.0.230 2000
则运行结果分别如图 6-3、图6-4 所示:
Nano2410A V2.0 用户手册
50
图 6-3 在主机上运行x86-udptalk
图 6-4 在开发板上运行arm-udptalk
Nano2410A V2.0 用户手册
51
六、驱动程序开发示例
6.1 驱动程序开发简要介绍
linux操作系统将所有的设备(而不仅是存储器里的文件)全部都看成文件,都纳入文件系统的范畴,都通过
文件的操作界面进行操作.用户程序不能直接操作硬件而是使用统一的接口函数调用硬件驱动程序。这组接口
在交叉工具链的文件fcntl.h、unistd.h、sys/ioctl.h等文件中定义,您可以/usr/local/arm/2.95.3/include目录下找到
这些文件:
extern int open (__const char *__file, int __oflag, ...) __THROW;
extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __THROW;
extern ssize_t write (int __fd, __const void *__buf, size_t __n) __THROW;
extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
……
对于上述每个接口函数,驱动程序中都有一个与之对应的函数,我们可以从linux内核的include/fs.h文件
的file_operations结构中看到这些函数的类型:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};
当我们的用户程序使用open函数打开某个设备时,其驱动程序的file_operations结构中的open函数就会被
调用;当用户程序使用read、write、ioctl等函数时,驱动程序file_operations结构中的相应函数(read、write、ioctl
等)就会被调用。所以从这个角度来说,编写驱动程序就是为具体硬件的file_operations结构编写各个函数(并不
需要全部实现file_operations结构中的成员)。
那么,当我们的用户程序open、read、write某个设备文件时,linux系统怎么知道去调用哪个驱动程序的
file_operations结构中的open、read、write函数呢?设备文件一般分为字符设备、块设备,比如PC机上的串口
Nano2410A V2.0 用户手册
52
属于字符设备,硬盘属于块设备。您可以通过”ls /dev/ttyS0 /dev/hda1”查看,结果如下:
brw-rw---- 1 root disk 3, 1 Jan 30 2003 /dev/hda1
crw -rw---- 1 root uucp 4, 64 Jan 30 2003 /dev/ttyS0
“brw-rw----“中的’ b’表示/dev/hda1是个块设备,它的主设备号为2,次设备号为1;“crw-rw----“中的’ c’表
示/dev/ttyS0是个块设备,它的主设备号为4,次设备号为64。
驱动程序有一个入口函数,在安装驱动程序时会调用它。在入口函数中,会将驱动程序的file_operations
结构,连同其主设备号向内核进行注册。对于字符设备、块设备,分别使用如下两个函数进行注册:
int register_chrdev(unsigned int major, const char * name, struct file_operations *fops);
int register_blkdev(unsigned int major, const char * name, struct block_device_operations *bdops);
这样,用户程序操作设备文件时,linux系统就会根据设备文件的类型(是字符设备还是块设备)、主设备号
找到在内核中注册的file_operations结构(对于块设备为block_device_operations结构),次设备号供驱动程序自身
用来分辨是同类设备的第几个。
综上所述,可以简单地说,编写驱动程序

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 20

    获赞
  • 69

    评论
  • 3705

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 21:01 , Processed in 0.030305 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部