Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2273472
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2008-06-04 07:59:05

虽然想写《vivi软件架构分析》,但是对软件架构并没有清晰的认识。只是以学习的态度,去尽可能的理解吸收vivi的设计思想,以后可以应用到自己的设计中。
 
    vivi的软件架构分为三个层次:vivi配置bootloader stage1bootloader stage2。另外,Vivi还提供了测试程序和工具,并且有简明的文档。具体如图1所示。

    下面进行详细分析。
 
    1 获取源代码
    mizi公司提供vivi的源代码,如果你不知道下载的地址,那么到百度或者google搜索一下,很容易找到。在这里多说两句,搜索引擎之争很激烈。不过你没有必要关注那么多,你所需要的是尽可能快的找到你所需要的有价值的资料。一般而言,百度是土生土长的,搜索时用中文关键词比较合适,而google 搜索最好用英文关键词。vivi是国外公司的产品,推荐用google搜索。在google中输入vivi download,很容易发现: http://www.mizi.com/developer/s3c2410x/download/vivi.html。不过很不幸,现在下载地址已经失效了。这时你也许放弃了,我也曾经放弃过。但是你如果使用ftp尝试一下就会发现,就会得到你想要的结果:
 
[armlinux@lqm vivi]$ ftp ftp.mizi.com
Connected to ftp.mizi.com (203.236.241.50).
220 ProFTPD 1.3.0 Server (MIZI Research, Inc. FTP Server) [::ffff:203.236.241.50]
Name (ftp.mizi.com:armlinux): anonymous
331 Anonymous login ok, send your complete email address as your password.
Password:
230-
230-
230- ftp.mizi.com俊 坷脚巴阑 券康钦聪促.
230- ftp.mizi.com篮 固瘤 府辑摹(林)俊辑 款康窍绰 FTP 辑滚 涝聪促.
230-
230- 固瘤 府椽胶 硅器魄篮 力傍阑 吝窜钦聪促.
230- 捞寇 绢敲府纳捞记 棺 包访 磊丰绰 力傍登绊 乐嚼聪促.
230-
230- Warez啊 酒聪骨肺 惑侩绢敲府纳捞记阑 诀肺靛 窍绰巴篮 阂啊钦聪促.
230-
230- 立加磊 : anonymous
230- 肺弊牢 矫埃 : Wed Jul 25 01:38:38 2007
230- 立加 IP : ::ffff:122.4.41.168
230- 立加磊 荐 : 泅犁 (3) / 弥措 (25)
230-
230-
230-
230-
230 Anonymous access granted, restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (203,236,241,50,234,217).
150 Opening ASCII mode data connection for file list
drwxrwxr-x 3 root users 72 Jan 18 2007 incoming
drwxr-xr-x 14 root root 336 Dec 23 2006 pub
d-wx-wx--x 2 (?) staff 48 Nov 18 2004 uploads
-rw-r--r-- 1 root root 399 Jun 29 08:10 welcome.msg
226 Transfer complete.
ftp> cd pub
250 CWD command successful
ftp> ls
227 Entering Passive Mode (203,236,241,50,163,137).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 6 root root 456 Sep 6 2002 baekmuk
drwxr-xr-x 7 root root 232 Oct 27 2004 file
drwxr-xr-x 2 root root 344 Feb 27 2004 hanIM
drwxr-xr-x 2 root root 672 Dec 18 2000 htm
drwxr-xr-x 2 root root 376 Jun 7 2000 hwpview
drwxr-xr-x 2 root root 152 May 8 2006 i519
drwxr-xr-x 7 root root 200 Sep 1 2006 kernel
drwxr-xr-x 3 root root 72 Jun 27 2006 linuette
drwxr-xr-x 8 root root 208 Nov 7 2005 misc
drwxr-xr-x 2 root root 344 Dec 20 2001 pen
drwxr-xr-x 6 yjseo cvs 192 Dec 23 2006 prizm
drwxr-xr-x 2 root root 136 Jun 8 2000 xmath
226 Transfer complete.
ftp> cd linuette
250 CWD command successful
ftp> ls
227 Entering Passive Mode (203,236,241,50,215,24).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 3 root root 72 Jun 27 2006 SDK
226 Transfer complete.
ftp> cd SDK
250 CWD command successful
ftp> ls
227 Entering Passive Mode (203,236,241,50,184,89).
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 root root 96 Jun 27 2006 iso
226 Transfer complete.
ftp> cd iso
250 CWD command successful
ftp> ls
227 Entering Passive Mode (203,236,241,50,132,159).
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 yjseo cvs 640122880 Jun 27 2006 sdk15-S3C2410-tk-20030630.iso
226 Transfer complete.
ftp>
 
    可见,网站改版后,mizi公司把所有的工具都做成iso文件了,600多M。你把该文件下载下,使用搜索功能,可以找到target/box/boot/vivi-20030629.tar.bz2。如果这样的方法还不能找到,那就需要到论坛求助了。
 
    2 解压分析
    解压就不必多说,完成后可以利用tree工具查看一下代码树。(注:tree是Linux下查看目录树的小工具,你可以从下载,现在的最新版本是1.5.1)。
 
[armlinux@lqm vivi]$ tree -L 3
… …
45 directories, 233 files
 
    可见vivi的源代码一共有45个文件夹,233个文件。
 
[armlinux@lqm vivi]$ tree -L 1
.
|-- COPYING
|-- CVS
|-- Documentation
|-- Makefile
|-- Makefile.newSDK
|-- Rules.make
|-- arch
|-- drivers
|-- include
|-- init
|-- lib
|-- scripts
|-- test
`-- util

10 directories, 4 files
 
    可以看出,vivi的代码的组织是模仿Linux的内核,如果看过kernel的架构,那么应该会很熟悉。不过现在,我们要分析vivi的核心代码架构,先对上述文件做一下简要的说明。
 

COPYING:GPL协议声明,Gnu General Public License,这里是version 2。如果要具体了解一下GPL协议,那么可以仔细读一下该文件。

CVS: Control version system,一种版本控制的工具。使用cvs,可以很方便的进行版本的控制,节约大量的时间。不过该部分并不属于vivi核心软件架构。

Documentation:帮助文档。关于vivi的简单介绍,如何进行编译,如何booting ARM都有简要的描述。拿到源代码,首先应该看该文件夹,了解一下,它是什么,可以如何进行操作。不过,里面有些帮助文档是韩语,看不懂。

Makefile Makefile.newSDK Rules.make:工程管理。Linux下用make来进行工程管理,对Makefile应该不会陌生。读源代码,首先了解Makefile的内容,会很有帮助。

arch: 处理器架构相关的核心代码。这是vivi bootloader stage1的实现部分。如果要支持其他架构,也需要放到这个文件夹下面。

drivers: 通用的驱动程序。

include: 包含的头文件

init: 初始化的核心代码。这是vivi bootloader stage2的实现部分。

lib: 库文件

scripts: Shell脚本。vivi提供了一种交互式配置机制,实现部分是利用shell脚本来完成的。这也是一个重要的研究内容。

test: 测试文件

util: 小工具。现在包含两个文件,ecc.c, imagewrite.c。

   
    现在首先要去掉不必要的部分。首先,COPYING可以去掉,CVS也可以去掉,Documentation在读完后就可以去掉了,没什么太复杂的东西。
 

[armlinux@lqm bootloader]$ cp vivi architecture –rf //备份先

[armlinux@lqm bootloader]$ cd architecture/
//观察architecture

[armlinux@lqm architecture]$ find . \( -name COPYING -o -name Documentation -o -name CVS -o -name

test -o -name util \) | xargs rm -rf
[armlinux@lqm architecture]$ ls
Makefile Makefile.newSDK Rules.make arch drivers include init lib scripts
//下面分析一下Makefile Makefile.newSDK有什么区别

[armlinux@lqm architecture]$ diff -uN Makefile Makefile.newSDK
--- Makefile 2007-07-25 10:32:55.000000000 +0800
+++ Makefile.newSDK 2007-07-25 10:32:55.000000000 +0800
@@ -14,7 +14,7 @@
 #
 # change this to point to the Linux include directory
 #
-LINUX_INCLUDE_DIR = /opt/host/armv4l/include/
+LINUX_INCLUDE_DIR = /opt/kernel/armv4l/include/
 
 
 VIVIPATH = $(TOPDIR)/include
@@ -22,8 +22,7 @@
 HOSTCC = gcc
 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
 
-CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-unknown-linux-
-#CROSS_COMPILE = /opt/host/armv4l/bin/armv4l-redhat-linux-
+CROSS_COMPILE = /opt/kernel/armv4l/bin/armv4l-mizi-linux-
 
 #
 # Include the make variables (CC, etc...)
@@ -85,8 +84,7 @@
 #
 # Location of the gcc arm libs.
 #
-ARM_GCC_LIBS = /opt/host/armv4l/lib/gcc-lib/armv4l-unknown-linux/2.95.2
-#ARM_GCC_LIBS = /opt/host/armv4l/lib/gcc-lib/armv4l-redhat-linux/2.95.3
+ARM_GCC_LIBS = /opt/kernel/armv4l/lib/gcc-lib/armv4l-mizi-linux/2.95.2
 
 OBJCOPYFLAGS = -R .comment -R .stab -R .stabstr
//可见只是更改了三个宏定义,而这也是移植需要更改的,所以,把Makefile.newSDK删掉

[armlinux@lqm architecture]$ rm Makefile.newSDK
[armlinux@lqm architecture]$ ls
Makefile Rules.make arch drivers include init lib scripts
//然后清理一下内部的测试文档

[armlinux@lqm architecture]$ find . -name *test* -print | xargs rm –rf
[armlinux@lqm architecture]$ tree -L 1
.
|-- Makefile
|-- Rules.make
|-- arch
|-- drivers
|-- include
|-- init
|-- lib
`-- scripts

   
    就vivi工程的管理来说,按照功能划分非常清晰,模块化的划分,设计上很容易增加新的硬件设备。模块与模块之间的接口也很清晰。读完Makefile之后,就会有更为深入的体会。它的配置机制也是如此。这在以后的文档里会详细说明。
 
    当你看清楚了作者组织的思路时,读取源代码就容易得多了。而这个软件架构是否合理,是否清晰,是需要不断借鉴,修改并完善的。这也正是我学习的所在。
阅读(1156) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~