Cramfs文件系统移植课程设计.docx
- 文档编号:9341504
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:16
- 大小:207.94KB
Cramfs文件系统移植课程设计.docx
《Cramfs文件系统移植课程设计.docx》由会员分享,可在线阅读,更多相关《Cramfs文件系统移植课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
Cramfs文件系统移植课程设计
数学与计算机学院
课程设计说明书
课程名称:
嵌入式系统原理-课程设计
课程代码:
题目:
cramfs文件系统移植
年级/专业/班:
计算机科学与技术09-3
学生姓名:
学 号:
开始时间:
2012年5月20日
完成时间:
2012年6月3日
课程设计成绩:
学习态度及平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书(计算书、图纸、分析报告)撰写质量(45)
总分(100)
指导教师签名:
年月日
《嵌入式系统原理》课程设计任务书
一、设计题目
Cramfs文件系统移植
二、主要内容
在ARM9芯片开发板上完成文件系统的移植。
加深对嵌入式linux的认识和理解。
学习利用busybox制作文件系统,内核编译以及裁剪。
增加cramfs文件系统支持选项,删除不必要的选项。
提升动手能力,以及实际解决问题,在题目过程中会遇到很多意想不到的错误,一一去解决这些问题。
三、具体要求及应提交的材料
1、完成系统的需求分析:
包含功能需求、数据需求、性能需求等。
2、完成系统设计:
包含系统概要设计(软件结构图)及详细设计(画出流程图)。
3、测试:
编写合适的测试用例完成系统的测试工作并分析结果。
4、完成后应上交的材料:
课程设计说明书:
包含封面、任务书、说明书(说明书见后面模板)。
软件源程序光盘。
四、主要技术路线提示
1、认真阅读相关知识,完成系统的功能分析和系统设计。
2、熟悉嵌入式Linux开发板及开发环境。
3、首先理解提供的相应设备的驱动程序。
4、先在Linux下完成应用程序的编译与调试,最后下载到开发板上进行验证。
五、进度安排
1、第一周完成系统分析和设计,并进行程序开发。
2、第二周完成程序开发,进行测试并分析结果,最后撰写课程设计报告。
六、推荐参考资料
[1]潘巨龙.ARM9嵌入式Linux系统构建与应用[M].北京航空航天大学出版社.2006
[2]马忠梅.ARM&Linux嵌入式系统教程[M].北京航空航天大学出版社.2004
[3]革新科技.嵌入式教学实验教程[M].北京:
革新科技
指导教师签名日期年月日
系主任审核日期年月日
1引言…………………………………………………………………………1
1.1问题的提出……………………………………………………………1
1.2国内外研究现状………………………………………………………1
1.3任务与分析……………………………………………………………1
2需求分析……………………………………………………………………1
2.1Cramfs文件系统移植总体设计………………………………………1
3概要设计……………………………………………………………………2
4详细设计……………………………………………………………………2
5使用说明……………………………………………………………………8
6总结…………………………………………………………………………8
附录1各包下载地址…………………………………………………………11
参考文献………………………………………………………………………12
1引言
1.1问题的提出
随着计算机的普及,物联网的观念越来越深入人心,嵌入式的发展由此而走向鹏飞的趋势。
嵌入式系统具有着高效率、低功耗、低成本、高性能、体积小等优点逐渐被人们所认可。
而嵌入式的开发也是千变万化。
随着技术的发展,对于flash的扩展已经不再是主流,此时嵌入式工程师们更倾向于精简系统,此时Cramfs文件系统在嵌入式平台上的应用受到追捧。
本报告就cramfs文件系统在嵌入式上的移植做一个详细的报告。
以及故障的排除。
1.2国内外研究的现状
对于嵌入式的发展国外较国内超前很多,我国的嵌入式发展才刚刚起步,在初级阶段,最重要的是要打牢基础,扎扎实实的学号基本知识,基本功练好,才能走得更长远。
1.3任务与分析
本课题主要目的是体验嵌入式的移植功能,移植性能以及过程。
其次对嵌入式的开发有一定的了解,体会其中的过程,并从中学到知识。
Cramfs的移植过程中,涉及内核的编译与裁剪,嵌入式开发平台的搭建,以及文件系统制作等过程。
这都是学习嵌入式linux的基本功。
需要牢牢掌握,并从中体会嵌入式系统的优越性以及可移植性。
2需求分析
在嵌入式的环境之下,要求尽量节省系统硬件资源,特别是内存RAM和外存Flash资源都需要节约使用。
如果使用基于RAM的文件系统,比如ramdisk,则在系统运行加载文件系统时需要把存储在Flash上的文件系统影像文件解压到内存RAM中,构建其ramdisk环境,这样才能可以正常运行系统程序与应用程序。
这样一来,系统在运行时就会占很大的空间,包括存放系统影像文件的Flash空间和存放解压后文件系统代码的RAM空间。
这不符合节省系统硬件资源的要求。
因此,使用基于ROM的文件系统是解决这个问题的一种方式,比如jffs2,Cramfs都是不错的选择。
2.1Cramfs文件系统移植总体设计
bootloader此处我们选用u-boot引导内核
内核版本Linux2.6.30.4
制作文件系统工具Busybox_1.16.0
Cramfs-1.1
开发板TQ-2440(天嵌,arm9芯片)
采用交叉编译的方式,在PC机Linux中编译和裁剪内核制作内核镜像文件,制作文件系统利用命令形成文件系统镜像,再在windows下进行烧写。
3.概要设计
实验概要:
实验的总体思路是在TQ2440中用光盘文件中所提供的内核源码2.6.30.4编译裁剪使其支持cramfs文件系统,修改其对应的选项。
编译生成内核文件,zImage.bin文件。
至此内核编译完成。
在虚拟机中安装,编译并配置Busybox软件,来制作Cramfs文件系统。
生成_install目录后,将目录下的三个文件夹拷贝到要制作的文件系统目录下,接着安装mkcramfs工具,生成cramfs.bin文件,然后烧写至开发板nandflash中运行,查看结果。
图3.1总体步骤概要设计
4.详细设计
实验详细步骤:
bootloader此处我们选用u-boot引导内核
内核版本Linux2.6.30.4(相关文件下载请见附录1)
制作文件系统工具包Busybox_1.16.0.tar.bz
Cramfs-1.1
开发板TQ-2440(天嵌,arm9芯片,RS232双母口串口线,USB下载线,电源线)
装有RedHat9.0虚拟机电脑一台
(1)准备Linux2.6.30.4内核源码,打开电脑中的虚拟机(笔者用vmware)。
(2)安装光盘自带交叉编译工具,并修改环境变量,具体步骤此处不做详细说明。
(3)将Linux_2.6.30.4.tar.bz解压至/opt/EmbedSky/目录下,进行内核的编译以及裁剪。
具体操作指令:
#tarjxvfLinux_2.6.30.4–C/注意此处的空格
#cd/opt/EmbedSky/linux_2.6.30.4/
#makemenuconfig//内核的编译内容,此处注意如下列出的几个选项
Loadablemodulesupport
[*]Enableloadablemodulesupport
[*]Automatickernelmouduleloading
SystemType[*]s3c2410DMAsupport
BootoptionsDefaultkernelcommandstring:
Noinitrdroot=/dev/mtdblock/3init=/linuxrcconsole=ttySAC
#说明:
mtdblock/3代表我的第四个root分区,它是我的rootfs
#console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上
#2.6内核对于串口的命名改为ttySAC0.
Floatingpoingemulation
MemoryTechnologyDevices(MTD)
[*]MTDportioningsupport
[*]Commandlinepartitiontableparsing
其它的选项可以根据需要而选择。
保存退出,产生.config文件。
(4)编译内核
#make
#makezImage
此时目录下会产生一个zImage.bin的二进制文件,至此内核的编译已经完成。
如果在编译过程中出现错误请见附录2解决,若未列出其错误请自行检查步骤,再编译。
(5)接下来我们将进入文件系统的制作,将Busybox_1.1.6.tar.bz解压至Linux的/opt/
(6)目录下,解压后会生成该文件目录,进入该目录。
进行相关的编译和安装具体命令如下:
#cd/home///此处已经默认将busybox拷入linux
#tarjxvfBusybox_1.1.6.tar.bz–C/
#cd/opt/EmbedSky/Busybox_1.1.6
进入源码后,修改Makefile文件,把164修改为:
CROSS_COMPILE=arm-linux-
189行改为
ARCH=arm
保存退出。
#makemenuconfig//此为配置菜单选项
进入配置单
图4.1进入busybox配置单
图4.2编译配置选项
图4.3编译配置选项二
此处只列出必要选项,其余选项可以自行添加。
然后编译busybox
#make
#makeinstall
编译完成后会生成一个_install的目录,将目录拷贝到自己在/opt/目录下建立的cramfs_2.6.30.4目录下
#cd_install
#cp–f*/opt/cramfs_2.6.30.4
(7)接下来我们可以构建自己的文件结构步骤如下
进入我们的文件系统目录/opt/cramfs_2.6.30.4
a.创建目录/bin、/dev、/etc、/lib、/sbin、/usr是不可缺少的其它目录可以根据自己需要选择。
#cd/opt/cramfs_2.6.30.4
#mkdirbindevetclibsbinusr–f
(8)编写必要的文件,准备启动所需的文件:
linuxrc、rcS、inittab、fstab四个文件;
linuxrc文件:
----------------------------------------------
#!
/bin/sh
echo"mount/etcasramfs"
/bin/mount-f-tcramfs-oremount,ro/dev/bon/2/
/bin/mount-tramfsramfs/var
/bin/mkdir-p/var/tmp
/bin/mkdir-p/var/run
/bin/mkdir-p/var/log
/bin/mkdir-p/var/lock
/bin/mkdir-p/var/empty
#/bin/mount-tusbdevfsnone/proc/bus/usb
exec/sbin/init
rcS文件:
----------------------------------------------------------------------------
-------
#!
/bin/sh
/bin/mount–a
(2)这两个文件生成后,应该使其具有执行的权限,可使用chmod775linuxrcrcS来修改,linuxrc应该放在rootfs根目录,rcS应该放在rootfs/etc/init.d/目录。
inittab文件:
#Thisisrunfirstexceptwhenbooting
:
:
sysinit:
/etc/init.d/rcS
#Startan"askfirst"shellontheconsole
#:
:
askfirst:
-/bin/bash
:
:
askfirst:
-/bin/sh
#Stufftodowhenrestartingtheinitprocess
:
:
restart:
/sbin/init
#Stufftodobeforerebooting
:
:
ctrlaltdel:
/sbin/reboot
:
:
shutdown:
/bin/umount-a–r
fstab文件:
-------------------------------------------------
none /proc proc defaults 00
none /dev/pts devpts mode=0622 00
tmpfs /dev/shm tmpfs defaults 00
这两个文件应该放在rootfs/etc/目录,应该注意其权限问题。
(3)如果使用linux2.6.xx内核,应该实现创建节点console、null。
转到rootfs/dev/目录来创建:
sudomknodconsolec51
sudomknodnullc13
否则就会提示“Warning:
unabletoopenaninitialconsole.
Kernelpanic-notsyncing:
Attemptedtokillinit!
”的类似错误。
(4)将刚才在busybox的_install下的三个文件夹的打包文件复制到rootfs目录,解压后删除打包文件。
(5)也可以将一些常用的lib文件复制到rootfs/lib/目录下,比如:
ld-2.5.so libc-2.5.so libcrypt.so.1 libgcc_s.so.1 libm.so.6ld-linux.so.3 libcrypt-2.5.so libc.so.6 libm-2.5.so等文件或符号连接,
在复制时应该注意采用图形化的界面复制活打包后解包方式复制。
转到cramfs_2.6.30.4的上一级目录,使用mkcramfs制作文件系统:
#mkcramfscramfs_2.6.30.4cramfs_2.6.30.4.bin
(9)然后将刚才生成的在zImage.bin,cramfs_2.6.30.4。
bin拷贝到windows下,利用串口烧写进开发板。
最后截图
图4.4Cramfs文件系统运行结果
5.使用说明
(1)在上交的报告中,含编译好的文件系统镜像cramfs_2.6.30.4.bin和内核镜像zImage.bin文件,开发板从Norflash启动,分别选择3,5依次烧写内核,文件系统。
(2)将拨码开关拨至Nandflash启动,复位,超级终端将会显示启动信息。
6.总结
由于开始并未做过类似的操作,走了很多的弯路!
在实验过程中也体会到嵌入式的难度,
在以后的学习中也有了一个大致的方向,为以后的学习打好基础。
现将试验过程中遇到的问题列出,仅供参考。
常见编译故障排除,以及错误信息处理:
(1)编译找不到
进入arc_linux源代码目录makeinclude/linux/version.h然后将version.h拷贝到busybox/include/linux
(2)启动busybox过程中出现类似/bin/shcanaccesstty,jobcontrolturnoff的错误
为了简单的测试busybox,我的linuxrc为如下代码
#!
/bin/sh
/bin/sh
启动busybox后出现如上警告(busybox还是可以进的),使用inittab可以去掉该警告
#ln-s/sbin/initlinuxrc
在etc下建立inittab,在inittab里面添加:
tty1:
respawn:
/bin/sh
(3)启动busybox显示完cant'topeninitconsole之后死机
原因有多方面的,一个原因可能是我们的文件系统的dev目录下没有console这个设备文件。
(4)arm-linux-gcc2.95.3编译busybox的问题
(5)用2.95.3交叉编译器编译busybox,出现了一大堆错误。
无论是高版本的还是低版本的bb。
错误来源大体上有两个:
route命令,如果在配置busybox时选了route命令,会出现很多错误,估计是2.95.3工具链的问题,去掉后正常通过编译,可是不能用route命令了...
libbb/loop.c文件中的#include,busybox好象提示linux/version.h有问题。
在1.0.1的busybox中
#includelinux/version.h>
#ifLINUX_VERSION_CODE>=KERNEL_VERSION(2.6.0)
#define...
#elifLINUX_VERSION_CODEKERNEL_VERSION(2.6.0)
#define...
#else
#define...
#endif
我把其它的都注释掉,只留第5行,即内核版低于2.6.0的情况(我用的是2.4.18的内核版本),顺利通过编译。
//"/usr/n300/linux-2.6.12/init/main.c"行数713--100%--713,1底端
if(execute_command)
run_init_process(execute_command);
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("Noinitfound.Trypassinginit=optiontokernel.");
启动不了解决途径
>:
cat/proc/cmdline
root=/dev/mtdblock4noinitrdinit=/linuxrcconsole=ttyS0,115200
最后还应该注意一个问题,在从始至终使用的交叉编译工具的版本要一致,否则会导致无法启动。
附录1包下载链接
Linux_2.6.30.4内核下载地址:
ftp:
//ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.4.tar.bz2
Busybox1.1.3下载地址
cramfs1.1.1下载地址
参考文献
[1]俞辉.ARM嵌入式Linux系统设计与开发.机械工业出版社.2009.10
[2]韦东山.嵌入式linux开发完全手册.西安科技大学出版社.2010.9
[3]linux移植手册.天嵌出品
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cramfs 文件系统 移植 课程设计