信息科学与技术学院学士学位论文
成到系统中去。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少。
③ YAFFS采用一种多策略混合的垃圾回收算法,结合了贪心策略的高效性和随机选择的平均性,达到了兼顾损耗平均和系统开销的目的。
2.4 本章小结
在这一章,主要做的工作就是进行系统需求分析,这一章在整个系统开发上起到了至关重要的作用,可以说是一个关键环节,这一章的分析调查结果直接指导以后的系统开发的工作,也直接关系着整个系统完成后的功能情况。在进行系统需求时,查阅了大量关于硬件和嵌入式操作系统方面的知识,综合各方面的因素,最终确定了选用的硬件平台和嵌入式操作系统,综合比较了各个系统之间的优点和不足,最终确定了系统的功能。
6
信息科学与技术学院学士学位论文
3 嵌入式ARM-Linux环境建立
绝大多数的软件开发都是本机开发、调试,本机运行的方式进行,但是这种方式不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,它没有足够的资源在本机运行开发工具和调试工具。因此在宿主机上搭建一个好的开发环境是很关键的一步,它的成败直接影响下一步的进展。根据需求分析确定了系统的开发环境是嵌入式Linux操作系统。
3.1基于Arm-Linux系统的总体设计
根据需求分析和嵌入式系统结构,得出了系统所需的系统结构如图3-1所示。
引导加载程序bootloader 应用程序 嵌入式Linux操作系统,文件系统
FS S3C2410硬件平台 图 3-1 系统结构图
论文设计的嵌入式TXT电子书阅读器系统主要分为四个层次:
(1)基于S3C2410A处理器的硬件平台:其中包括64MB 8位的NAND闪存和64MB32位的SDRAM;
(2)加载程序BootLoader,主要初始化处理器及存储器等硬件设备; (3)Arm-Linux内核的裁剪、移植,文件系统的建立,以及运行应用程序所用到的库的添加;
(4)应用程序的开发:主要包括对SDL的研究和相关代码实现并移植到开发板上。
根据系统结构的设计,将分以下三个步骤实现,这一章只实现其中的前两步,其它的部分的实现在后续章节展开,实现步骤如下:
7
信息科学与技术学院学士学位论文
(1)Arm-Linux交叉开发环境的建立;
(2)嵌入式Arm-Linux的裁剪和移植:其中包括启动加载程序U-Boot的移植以及内核的裁剪、移植、文件系统的制作;
(3)SDL的研究和编码实现; (4)应用程序的移植并测试。
3.2 Arm-Linux交叉编译工具链的建立
与主流软件开发相同,嵌入式系统开发同样需要用到编译器、链接器、解释程序、集成开发环境以及诸如此类的开发工具。但是在嵌入式系统开发中,由于执行应用程序的平台(目标机)与创建应用程序的平台(宿主机)并不兼容,因此,需要交叉开发工具进行交叉编译。本文采用工具链Arm-none-linux-gnueabi-创建Arm-Linux交叉编译环境[13]。
建立过程如下:
(1)登录Linux操作系统,然后再/home/farsight目录下新建toolchain目录; (2)将工具链toolchains_for_s3c2410.tar.bz2复制到以上toolchain目录下,并执行解压;
(3)在宿主机中设置环境变量使得系统能自动调用已建立好的工具,具体的设置方法为:在根目录中打开/etc/profile文件添加交叉编译环境。具体设置方法为:vi /etc/profile,在文件的最后加上:export PATH=$PATH:/home/farsight/toolchain/bin最后保存退出,在终端输入source /etc/profile即可生效,在终端输入arm-none按Tabs键即可提示得到该交叉编译工具的名称。
3.3 U-boot的移植并烧入和烧入
针对FS2410开发板,对U-boot要进行一定的移植工作[14],主要改动的地方有: (1)添加平台信息
smdk2410是s3c2410的标准版,在smdk2410平台的基础上可以实现FS2410的移植;
8
信息科学与技术学院学士学位论文
① 进入U-boot所在目录下的board/samsung/,进行cp smdk2410 fs2410-a; ② 进入fs2410目录,进行mv smdk2410.c fs2410.c; ③ 在Makefile下修改,将COBJS:=smdk2410 flash.o;
④ 修改为COBJS:=fs2410 flash.o,进入U-boot目录下的include/configs目录,进行cp smdk2410.h fs2410.h,返回到顶层目录下的Makefile添加fs2410的内容。在smdk2410_config:unconfig下面添加对fs2410相应的信息:fs2410_config:unconfig @$(MKCONFIG) $(@:_config=)arm arm920t fs2410 samsung s3c24x0 接着修改编译器,在ifeq($(HOSTARCH,$(ARCH))) CROSS_COMPILE ?= endif 下面添加 ifeq(arm,$(ARCH)) CROSS_COMPILE = arm-none-linux-gnueabi- endif
(2)针对fs2410平台要做出进一步的修改,主要做出的修改如下: 修改start.S的中断屏蔽位,改为11个;修改配置文件include/configs/fs2410.h中的命令行提示符,网络配置参数,内核加载地址,Nand功能添加,环境变量的保存位置;在cpu/arm920t/start.S文件中对Nand启动进行修改,主要包括添加Nand启动标志位,添加BWSCON寄存器的定义,添加启动模式的判断;为nand启动做出支持;修改common/env_nand.c文件,添加nor flash环境变量烧写功能。修改后,编译U-boot,进行如下操作: $:make fs2410_config $:make
此时U-boot已经做编译好,在相应的U-boot目录下就可以看到u-boot.bin可执行文件,此可执行文件就可以实现烧录了。
(3)利用H-jtag将u-boot烧写在fs2410开发板上的Nand flash上; (4)打开开发板,进入命令状态添加环境变量。 $ setenv serverip 192.168.7.125 $ setenv ipaddr 192.168.7.185 $ setenv gatewayip 192.168.7.1
9
信息科学与技术学院学士学位论文
$ setenv ethaddr 08:00:3e:26:0a:43
$ setenv bootcmd tftp 30800000 uImage \\; bootm
$ setenv bootargs console=ttySAC0,115200 init=/linuxrc root=/dev/nfs nfsroot=192.168.7.130:/opt/filesystem
ip=192.168.7.190:192.168.7.130:192.168.7.1:255.255.255.0:farsight_30:eth0:off重启开发板,此时开发板就可以工作了。
3.4 Linux内核的裁剪与移植
嵌入式系统的硬件资源毕竟有限,不能直接将Linux操作系统作为嵌入式硬件平台上的操作系统,需要针对具体的应用进行内核的配置和裁减,使整个系统能够存放到容量较小的 Flash中。Linux的动态模块加载方式使 Linux的裁剪极为方便,高度模块化使得添加和删减非常容易。
结合该系统在开发中所需要的功能,Linux内核的裁剪与移植过程中涉及到的目录有:include/ 、arch/ 、drivers/ 、fs/,移植的过程为:
(1)在/home/farsight目录,将Linux源代码解压至该目录下,本设计用到的内核为Linux-2.6.35内核;
(2)编译ARM-Linux内核,进入内核目录,在终端输入:make menuconfig; 然后对内核进行裁剪和配置:
(1)选择<*>System Type,选中该目录下的<*>ARM system type 模块,选中所用到的硬件平台信息,即Samsung S3C2410;
(2)在以后的实验中需要用到网线,必须在内核中添加网卡的支持,在这一步中的操作如下。
① 将cs8900.c和cs8900.h文件拷贝到linux-2.6.35/drivers/net/arm目录下。 ② 修改Linux-2.6.35/dirvers/net/arm/Kconfig文件,添加以下内容: Config S3C2410_CS8900
Tristate “CS8900 support”
10