cd /new_disk/weiyan/linux-
vi arch/arm/mach-s
修改板级配置文件,为统一驱动的配置,设备的配置信息一般在此文件中添加。
1) 添加头文件
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
#include <linux/mtd/partitions.h>
#include <asm/plat-s
#include <asm/plat-s
2) 添加nand划分信息
static struct mtd_partition wy_nand_part[] = {
[0] = { //u-boot及内存存放的分区
.name = "BOOT",
.size = SZ_
.offset = 0,
},
[1] = { //文件系统存放的分区
.name = "ROOTFS",
.offset = SZ_
.size = SZ_
},
[2] = { //剩余空间
.name = "BACKUP",
.offset = SZ_
.size = SZ_
},
};
static struct s
[0] = {
.name = "NAND",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(wy_nand_part),
.partitions = wy_nand_part,
},
};
3) 添加nand flash的读写匹配时间,各时间定义如图
static struct s
.tacls = 10,
.twrph0 = 25,
.twrph1 = 10,
.nr_sets = ARRAY_SIZE(wy_nand_sets),
.sets = wy_nand_sets,
};
4) 添加nand设备到初始化表
static struct platform_device *smdk2440_devices[] __initdata = {
……(此处省略其他设备,添加时请注意。)
&s
&s
};
5) 添加nand初始化信息与nand设备的关联
static void __init smdk2440_machine_init(void)
{
s
s
//添加Nand初始化数据
platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
// smdk_machine_init();
s
}
6) 添加硬件校验
make menuconfig
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> NAND Device Support --->
[*] S
make uImage && cp arch/arm/boot/uImage /new_disk/tftp
7) 重新生成jffs2文件系统
./mkfs.jffs2 -d rootfs -p -s 0x200 -e 0x4000 -n -l -U -o rootfs.jffs2
-d指定目录rootfs,-s指定页大小为0x200字节,-e指定块大小为0x4000字节,-p指定用0xff填充最后块的空闲空间,-n指定不添加清空标志,-l指定小端格式,-U指定所有文件的属主为root,-o指定输出的镜像文件名。
cp rootfs.jffs2 /new_disk/tftp
8) 修改u-boot传给内核的参数
WEIYAN # set bootargs root=/dev/mtdblock1 rootfstype=jffs2 console=ttySAC0
指定分区1("ROOTFS")为存放根文件系统的分区,类型为jffs2。
9) 烧写jffs2文件系统及Linux内核
WEIYAN # nand erase 0x50000
//擦除从0x50000(320K)开始的全部空间,从0~320K为保留的U-boot空间。
WEIYAN # tftp 0x31000000 rootfs.jffs2
//将jffs2根文件系统下载到0x31000000的内存段
WEIYAN # nand write.jffs2 0x31000000 0x200000 $(filesize)
//将根文件系统写入到0x200000开始的空间,写入大小为下载的大小$(filesize)。
WEIYAN # tftp 0x31000000 uImage
WEIYAN # nand write.jffs2 0x31000000 0x50000 $(filesize)
//将内核写入到0x50000开始的Nand flash,写入大小为$(filesize)。
WEIYAN # set bootread nand read.jffs2 0x31000000 0x50000 $(filesize)
WEIYAN # set bootcmd $(bootread) \;bootm 0x31000000
//设置启动脚本为将Nand flash上的内核读到sdram里,并自动启动内核。
WEIYAN # save;reset //保存参数并重新启动
10) 系统正常启动显示如下
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 132K
init started: BusyBox v
starting pid 771, tty '': '/etc/init.d/rcS'
Please press Enter to activate this console.