1 ds2sdk是什么？

ds2sdk是应用层和驱动层的一个接口。它是GCC编译器，ds2硬件驱动库，一些开源库和一个例子的集合。
它被发行的目的是为了帮助程序爱好者开发能在DSTWO上运行的程序。


2 ds2sdk可以用来做什么？

ds2sdk可以看作是一个多媒体开发工具包。硬件层主要提供音频和视频传输功能，通过ds2sdk上层接口，你可以
将音频数据和视频数据传送到NDS，同样，你可以把NDS的硬件信息和实时时钟信息返回给上层应用程序。所以，
如果你是一个程序爱好者，利用ds2sdk，凡是与音频、视频相关事情，你都可以尝试去做。
比如，你可以在上面开发或者移植自己的阅读软件，或者你觉得官方的iReader有什么可以修改的地方，
你愿意的话也可以自己修改(目前最新版的iReader源码也将要全面对外发布)。你可以移植、改进相关的模拟器，或者
做自己的自制软件，比如MP3播放器，MPLAYER播放器，你甚至可以做自己的小游戏。总之，只要你是一个软件爱好者，
ds2sdk就有你施展的舞台。


3 如何使用ds2sdk？

为了使用ds2sdk，你需要做以下几件事情：
( 1 ) 建立开发环境，包括linux环境和交叉编译环境。
( 2 ) 你的程序中必须有应用程序入口： ds2_main(), 就像一般程序中的main函数一样。
( 3 ) 初始化相关软硬件（包括视频、音频和其它输入输出设备等待）：由函数ds2io_init()或者函数ds2io_initb()完成。
( 4 ) 初始化控制台：由函数ConsoleInit()完成。
( 5 ) 初始化文件系统：由函数fat_init()完成。此文件系统只能读写DSTWO上的SD卡。
( 6 ) 进入用户主程序，至此，控制权交给用户应用程序。
示例，具体可以参照ds2sdk的example：
void ds2_main(void) //( 2 )
{
	//( 3 ) 初始化视频、音频和其它输入输出设备及相关结构
	ds2io_init(1024); 

	//( 4 ) 初始化控制参，以便能够使用printf函数
	ConsoleInit(WHITE_COLOR, BLACK_COLOR, UP_SCREEN, 10);
	
	//( 5 ) 初始化文件系统
	 fat_init();

	//( 5 ) 跳到用户主函数
	main(0, 0);
}

在用户应用程序中，你需要调用以下函数来完成音频和视频的传送：

音频：
ds2_checkAudiobuff()//检查有多少个音频缓冲被占用，返回被占用的缓冲数量
ds2_getAudiobuff()//获取音频缓冲地址
ds2_updateAudio()//刷新音频数据，使音频数据从音频缓冲送至ds2io层，进入数据发送等待队列

视频：
ds2_flipScreen() //更新视频数据，使数据从缓冲送至屏幕


4 如何建立ds2sdk开发环境？

为了建立交叉编译环境，linux环境是需要的。如果你的电脑安装的操作系统恰好是linux，那就是最好不过的了。
不过现在的情况是，很多人使用的操作系统都是Windows，怎么办呢？幸运的是有很多方法可以在Windows上模拟出linux环境，
比如Cygwin和VM(Virtual Machine) technology能做到这一点。由于Cygwin必须依赖DLL库，并且存在版本兼容问题，因此
不建议使用Cygwin，虽然它占用的CPU资源和硬盘空间都比较少。最有效可行的方法是在Windows上安装VM，比如，VMware Workstation
和VirtualBox。虽然它们占用CPU资源和硬盘空间都比较多，但兼容性会更好，你碰到的问题也会尽可能的少。我个人建议使用
VMware Workstation。在这里我们使用VMware Workstation 6和Fedora 9建立一个linux环境。


5 如何编译ds2sdk里面的例子？

在你完成了linux环境的建立后，并且你已经从网上下载了ds2sdk开发工具压缩包到你的硬盘，这时候该如何建立交叉编译环境和
编译ds2sdk里面的例子呢？你需要设置虚拟机共享文件夹（关于VMware Workstation共享问题，不同版本的VMware Workstation，
有不同的方法，在这里不作一一介绍），使虚拟机能够访问到ds2sdk工具包，或者你可以直接把ds2sdk工具拷贝到你的虚拟机所安装的
linux操作系统内，然后解压。在这里顺便提一下，你每次最好以root身份登陆，不然后面可能会碰到的权限问题会让你很头疼。
例如：你的ds2sdk目录： ~/， 你的工作目录是： ~/opt
到这里，你可以打开你的终端，输入命令如下：

mkdir -p ~/opt
cd ~/opt
tar xjf ~/ds2sdk/gcc/mipsel-4.1.2-nopic.tar.bz2
export PATH=$PATH:~/opt/mipsel-4.1.2-nopic/bin

In fact, enter ds2sdk directory, just: make. the makefile will decompress
compiler to ~/opt directory and compiling the open source library libds2a.a and
example files.


6 跟以前发布的SDK相比，本次发布的SDK有哪些不同？

本次发布的SDK最大的亮点在于包含有底层硬件代码，也就是libds2b.a的源码，具体来说就是JZ与FPGA/NDS通信的源代码，我想这也是SDK拥有者最想看到的部分。
唯一的遗憾是你不能看到，也不能修改FPGA的程序，因为必须要保持产品的兼容性，所以FPGA部分不会轻易被改动。不过留给我们的空间已经很大了，
例如，配合NDS程序，如果感兴趣的话你可以自己来优化DS2数据传输，或者发布性能更加强大，更具实用性和操作性的SDK。
另外，还可以利用本次发布的SDK在DS2上开发Linux，这或许是令很多人心动的，并且期待已久的事情。