
二、配置开发主机,配置MINICOM,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,9,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
三、建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。
四、下载已经移植好的Linux *** 作系统,如MCLiunx、ARM-Linux、PPC-Linux等。
五、建立根文件系统,可以从http://www.busy.box.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs等工具产生烧写映像文件。
六、建立应用程序的FLASH磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。
和普通文件系统不同,YAFFS文件系统专门为Nand Flash设计,可以使用mkyaffsimage生成文件系统的镜像,但如果要将此镜像烧入Flash,那么有些地方需要注意。
硬件上,Nand Flash的设计已考虑到包含坏块的情况,对于每扇区512字节的Nand Flash,每扇区都有一个16字节额外的扩展区,通常用以存储此扇区的校验数据以及坏块标记等信息(WinCE则使用了其中4字节存储逻辑扇区编号),所以我们看Nand Flash的Data Sheet时,经常会发现其容量以“64M + 2048K”这样的格式进行描述,后面的数字就用来表示扩展区的容量。
YAFFS文件系统既然专为Nand Flash设计,它在生成文件系统镜像时,已经考虑到对扩展区的利用,并将扩展区的数据包含在扇区数据后,其结构定义如下:
bytes 0-511: Data
bytes 512-515: YAFFS TAG
bytes 516: Data status
bytes 517: Block status
bytes 518-519: YAFFS TAG
bytes 520-522: ECC for bytes 256-511
bytes 523-524: YAFFS TAG
bytes 525-527: ECC for bytes 0-255
可以看出,YAFFS使用了8字节(YAFFS TAG)存储文件系统相关信息,并使用4字节(ECC)存储校验数据,而此校验数据算法与Nand Flash控制器的硬件算法并不一致,对于很多Boot Loader,可能会校验失败。
另外,由于YAFFS文件系统需要使用分区上的第一个块来存储一个名为Yaffs_ObjectHeader的结构体。该结构体记录了该分区中的文件、路径以及相关的链接,该块无法在生成镜像的时候产生,所以在烧写时还需要跳过第一个可用的块。比如,我们在MTD分区中划分一个YAFFS分区,占用Nand Flash空间为块1000-4095,那么,第1000块我们必须留空,镜像文件要从1001块开始烧写。
了解了YAFFS镜像文件的特点,我们现在清楚如何将YAFFS镜像烧入Nand Flash:
1、将镜像文件载入内存
2、根据MTD分区信息,定位到首块Nand Flash并跳过,从下一块开始烧录
3、擦除块,如果擦除失败,标志为坏块,继续 *** 作下一块
4、从镜像文件读出512字节,写入Nand Flash扇区
5、继续从镜像文件读出16字节,写入Nand Flash扩展数据区(注意不要写入硬件ECC,否则YAFFS分区无法mount)
6、重复步骤4,直到整块数据写入完成
7、重复步骤3,直到整个影像文件写入完成
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)