Linux内核加载yaffs时出现的问题

Linux内核加载yaffs时出现的问题,第1张

你只是想移植吧,具体的 *** 作如下,可能不是一一一致,但是大概个流程都是这样,建议你去下载比较高版本的代码进行移植,因为越高版本我们要下的功夫可能会更少。

1。修改内核源码根目录下的Makefile文件

#ARCH?= arm

#CROSS_COMPILE?=arm-linux-

2。修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。这里的分区一定要和你的bootloader的一致,你可以参考smdk_default_nand_part[]这个数据结构的做法。

3。还是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {

.tacls= 0,

.twrph0= 30, //这 三个数字要改的 以前是20 60 20

.twrph1= 0,

.nr_sets= ARRAY_SIZE(smdk_nand_sets),

.sets= smdk_nand_sets,

}

4。修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函数的NAND_ECC_SOFT为NAND_ECC_NONE。

5。晶振频率:修改arch/arm/mach-s3c2440/mach-smdk2440.c

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc))

s3c24xx_init_clocks(12000000)//改成和你的一样

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs))

}

6。添加对yaffs2文件系统的支持:

下载yaffs2的源码包,解压后进入其中,其加入Linux内核(打补丁的方式)

#cd yaffs2

#./patch-ker.sh c $you_kernel_path(你的内核代码的目录)

7。配置内核

先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程

# cp arch/arm/configs/s3c2410_defconfig .config

# make menuconfig

1.General setup --->

[*] Configure standard kernel features (for small systems) --->

2. System Type ---->

[*] S3C2410 DMA support [*] Support ARM920T processor

S3C2410 Machines --->

[*] SMDK2410/A9M2410

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

3.Boot options --->

将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string

改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )

这里要特别注意root=/dev/mtdblock2 这个参数,mtdblock2是你的根文件系统所在的位置,和你在bootloader的分配有关,当然也和上述2。步骤的密切相关。不行的话多试几次。

4.[*] Enable loadable module support --->

[*] Module unloading

[*] Automatic kernel module loading

选择这两个,剩下的可以去掉

5.Device Drivers --->

<*>Memory Technology Device (MTD) support --->

[*] MTD partitioning support

<*>NAND Device Support --->

<*> NAND Flash support for S3C2410/S3C2440 SoC

[ ]S3C2410 NAND Hardware ECC //这个要去掉

6.File systems----->

Miscellaneous filesystems --->

<*>YAFFS2 file system support

7.make zImage

这个配置是2440和2410都通用的。网上有很多这样的教程。

另外还有一点要很注意而且也是比较头疼的:文件系统的制作,这个东西不好你弄,个人建议如果你想进驻嵌入式linux这个行业的话,韦东山的《嵌入式linux应用开发完全手册》很适合初学者学习,通过本书你会对嵌入式linux开发的整个流程都有个很明朗的认识。

好好学习吧。

文件系统坏块?是nand flash芯片硬件问题还是烧写的文件系统软件问题?

可尝试一下几种解决思路:

1.尝试同样的文件系统从外部(如sd卡)烧写至内存启动(排除软件问题)

2.重新烧写系统到nand flash芯片(遇到坏块应可绕开的吧)

//3.重新编译文件系统

我做的项目是ARM平台+嵌入式linux *** 作系统,虽然环境不一样但有些原理是相通的,希望可以帮到你。

类似于 Windows下的C、D、E等各个盘,Linux系统也可以将磁盘、Flash等存储设备划分为若干个分区,在不同分区存放不同类别的文件。与Windows的C盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)内核启动后运行的第一-个程序( init)给用户提供 *** 作界面的 shell程序、应用程序所依赖的库等。这些必需、基本的文件合称为根文件系统,它们存放在一个分区中。Linux 系统启动后首先挂接这个分区,称为挂接( mount)根文件系统。其他分区上所有目录、文件的集合,也称为文件系统。Linux 中并没有C、D、E等盘符的概念,它以树状结构管理所有目录、文件,其他分区挂接在某个目录上,这个目录被称为挂接点或安装点(mount point),然后就可以通过这个目录来访问这个分区上的文件了。比如根文件系统被挂接在根目录“I”上后,在根目录下就有根文件系统的各个目录、文件:/bin、/sbin、/mnt等再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区.的各个目录、文件。在一个分区上存储文件时,需要遵循一定的格式,这种格式称为文件系统类型,比如fat16、fat32、ntfs、ext2、ext3、jffs2、yaffs 等。除这些拥有实实在在的存储分区的文件系统类型外,Linux还有几种虚拟的文件系统类型,比如proc、sysfs 等,它们的文件并不存储在实际的设备上,而是在访问它们时由内核临时生成。比如 proc文件系统下的uptime文件,读取它时可以得到两个时间值(用来表示系统启动后运行的秒数、空闲的秒数),每次读取时都由内核即刻生成,每次读取结果都不一样。“文件系统类型”常被简称为“文件系统”,比如“硬盘第二个分区上的文件系统是EXT2”指的就是文件系统类型。所以“文件系统”这个术语,有时候指的是分区上的文件集合,有时候指的是文件系统类型,需要根据语境分辨,在阅读各类文献时需要注意这点。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7307270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存