u-boot 使用 jffs2 文件系统加载内核
来源:互联网 发布:数据迁移工具有哪些 编辑:程序博客网 时间:2024/06/06 09:48
1. 修改kernel 中的 nand.c
#define MV_NUM_OF_NAND_PARTS 7
static struct mtd_partition parts_info[] = {
{ .name = "u-boot",
.offset = 0,
.size = 1 * 1024 * 1024 },
{ .name = "kernel-1-jffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 4 * 1024 * 1024 },
{ .name = "kernel-2-jffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 4 * 1024 * 1024 },
{ .name = "rootfs-1-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 128 * 1024 * 1024 },
{ .name = "rootfs-2-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 128 * 1024 * 1024 },
{ .name = "CFG-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 8 * 1024 * 1024 },
{ .name = "Data-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = MTDPART_SIZ_FULL },
};
注意修改 num_of_parts = MV_NUM_OF_NAND_PARTS;
内核修改完毕:
分区信息如下:
dev: size erasesize name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00400000 00020000 "kernel-1-jffs2"
mtd2: 00400000 00020000 "kernel-2-jffs2"
mtd3: 08000000 00020000 "rootfs-1-yaffs2"
mtd4: 08000000 00020000 "rootfs-2-yaffs2"
mtd5: 00800000 00020000 "CFG-yaffs2"
mtd6: 0ef00000 00020000 "Data-yaffs2"
设计说明:
两个kernel分区,两个文件系统分区,方便远程升级系统。
2. u-boot 修改部分
2.1 加入对 jffs 文件系统的支持
#define CONFIG_CMD_JFFS2
/*JFFS2 Support */
#define CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_NAND 1
#define CONFIG_JFFS2_DEV "nand0"
/*JFFS2 Support */
2.2 修改u-boot中的分区信息
找到 环境变量设置的地方加入
env = getenv("flagPolicy");
if(!env)
setenv("flagPolicy","yes" );
env = getenv("mtdparts");
if( !env )
setenv("mtdparts","mtdparts=NAND:1m@0(u-boot),4m(kernel-1),4m(kernel-2),128m(rootfs-1),128m(rootfs-2),8m(cfg),-(data)");
env = getenv("bootflag1");
if( !env )
setenv("bootflag1", "chpart nand0,1;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock3 rootfstype=$(rootfstype)
ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );
env = getenv("bootflag2");
if( !env )
setenv("bootflag2", "chpart nand0,2;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock4
rootfstype=$(rootfstype) ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );
mtdparts 所存储的是分区信息,最好与内核部分一致。
bootflag1和bootflag2分别为启动脚本。
使用chpart 切换分区
使系统使用自己的脚本启动。
2.4 启动flag
可以拿 u-boot 所在分区,也就是第一个分区的最后2k或者4k 存放启动标志。
u-boot 中读取启动标志,选择不同的脚本启动。
3 引用程序修改启动标志
3.1 使用 open 函数打开 /dev/mtd0 设备 直接读写
写时应该注意长度必须是页面对齐的, 最好是 2k.
4 部分升级脚本 update.sh
4.1 使用 nfs 启动系统
#startup by run nfsboot
#install kernel -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd1
/bin/dd if=/uImage.jffs2 of=/dev/mtdblock1
#install fs -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd3
/bin/mount -t yaffs2 /dev/mtdblock3 /mountpoint
tar xvf /fs.tar -C /mountpoint
4.2 设置标志位。
#define MV_NUM_OF_NAND_PARTS 7
static struct mtd_partition parts_info[] = {
{ .name = "u-boot",
.offset = 0,
.size = 1 * 1024 * 1024 },
{ .name = "kernel-1-jffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 4 * 1024 * 1024 },
{ .name = "kernel-2-jffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 4 * 1024 * 1024 },
{ .name = "rootfs-1-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 128 * 1024 * 1024 },
{ .name = "rootfs-2-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 128 * 1024 * 1024 },
{ .name = "CFG-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = 8 * 1024 * 1024 },
{ .name = "Data-yaffs2",
.offset = MTDPART_OFS_NXTBLK,
.size = MTDPART_SIZ_FULL },
};
注意修改 num_of_parts = MV_NUM_OF_NAND_PARTS;
内核修改完毕:
分区信息如下:
dev: size erasesize name
mtd0: 00100000 00020000 "u-boot"
mtd1: 00400000 00020000 "kernel-1-jffs2"
mtd2: 00400000 00020000 "kernel-2-jffs2"
mtd3: 08000000 00020000 "rootfs-1-yaffs2"
mtd4: 08000000 00020000 "rootfs-2-yaffs2"
mtd5: 00800000 00020000 "CFG-yaffs2"
mtd6: 0ef00000 00020000 "Data-yaffs2"
设计说明:
两个kernel分区,两个文件系统分区,方便远程升级系统。
2. u-boot 修改部分
2.1 加入对 jffs 文件系统的支持
#define CONFIG_CMD_JFFS2
/*JFFS2 Support */
#define CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_NAND 1
#define CONFIG_JFFS2_DEV "nand0"
/*JFFS2 Support */
2.2 修改u-boot中的分区信息
找到 环境变量设置的地方加入
env = getenv("flagPolicy");
if(!env)
setenv("flagPolicy","yes" );
env = getenv("mtdparts");
if( !env )
setenv("mtdparts","mtdparts=NAND:1m@0(u-boot),4m(kernel-1),4m(kernel-2),128m(rootfs-1),128m(rootfs-2),8m(cfg),-(data)");
env = getenv("bootflag1");
if( !env )
setenv("bootflag1", "chpart nand0,1;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock3 rootfstype=$(rootfstype)
ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );
env = getenv("bootflag2");
if( !env )
setenv("bootflag2", "chpart nand0,2;fsload $(image_name);setenv bootargs $(bootargs) root=/dev/mtdblock4
rootfstype=$(rootfstype) ip=$(ipaddr):$(serverip)$(bootargs_end); bootm;" );
mtdparts 所存储的是分区信息,最好与内核部分一致。
bootflag1和bootflag2分别为启动脚本。
使用chpart 切换分区
fsload 从对应的分区上加载kernel文件。
使系统使用自己的脚本启动。
2.4 启动flag
可以拿 u-boot 所在分区,也就是第一个分区的最后2k或者4k 存放启动标志。
u-boot 中读取启动标志,选择不同的脚本启动。
3 引用程序修改启动标志
3.1 使用 open 函数打开 /dev/mtd0 设备 直接读写
写时应该注意长度必须是页面对齐的, 最好是 2k.
4 部分升级脚本 update.sh
4.1 使用 nfs 启动系统
#startup by run nfsboot
#install kernel -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd1
/bin/dd if=/uImage.jffs2 of=/dev/mtdblock1
#install fs -1
/mtd-utils/usr/sbin/flash_eraseall /dev/mtd3
/bin/mount -t yaffs2 /dev/mtdblock3 /mountpoint
tar xvf /fs.tar -C /mountpoint
4.2 设置标志位。
0 0
- u-boot 使用 jffs2 文件系统加载内核
- u-boot 使用 jffs2 文件系统加载内核 备忘
- u-boot 使用 jffs2 文件系统加载内核 备忘
- u-boot访问jffs2文件系统
- U-BOOT JFFS2文件系统的配置
- S3C6410 启动u-boot 加载内核和文件系统
- u-boot增加对jffs2分区的识别与加载
- u-boot 内核、文件系统下载方式
- u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统
- 内核驱动-U-Boot+内核制作+根文件系统制作
- 3种使用不同根文件系统 u-boot传递的内核启动参数
- U-Boot1.3.1中JFFS2文件系统支持和U盘支持的使用备忘
- U-Boot1.3.1中JFFS2文件系统支持和U盘支持的使用备忘
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
- 通过u-boot把内核和文件系统烧录到Nand Flash
- u-boot系统移植对内核和文件系统的处理
- 读ruby
- ios开发UI篇—Kvc简单介绍
- webdynpro for java的安装要点
- php中die()和exit()的区别
- LeetCode之Permutation Sequence
- u-boot 使用 jffs2 文件系统加载内核
- Pos()函数使用
- Thinking In Java学习笔记之文件读写实用工具
- stun turn ice等穿越NAT方法
- Python实现插入排序
- 53.Maximum Subarray
- android GridView android:stretchMode="columnWidth"
- ORA-22828 输入样式或替换参数超过了32k大小限制
- jar 在linux下执行命令时等待这个process的结束