u-boot-1.1.6修改默认内核启动空间
u-boot    2017-02-23 22:02:53    188    0    0
tianwaifeixian   u-boot

折腾两天

本打算移植一下2015版本的 结果移植失败 串口无法显示信息 内核也启动不了 

看来没有看收费视频还是有点差距的

改天看看那个补丁文件到底差别在那儿

另外现在u-boot代码变化和之前的差多了。。。。。。。。。。

所以只能在原来基础上修改一下了 谁让现在内核裁剪还那么费劲呢!


uboot里的kernel分区默认为2M改为8m

修改分区如下,建议留给kernel8M大小:

0.补丁打上:

cd /var/s3c2440-src/u-boot-1.1.6/
patch -p1 < ../u-boot-1.1.6_jz2440.patch 

第一步 :在配置文件include/config/smdk2410.h 里面有一个宏定义

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \ 
 "128k(params)," \ 
 "2m(kernel)," \ 
 "-(root)"​

把上面的2M改为8M(改好后重新编译uboot),根据kernel启动信息看还得把128kb改成255kb
/*kernel分区默认为2M改为8m*/

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
				"128k(params)," \
				"8m(kernel)," \
				"-(root)"


启动之后默认是这样的 还没有改过来

OpenJTAG> mtd ​
 device nand0 <nandflash0>, # parts = 4 
 #: name size offset mask_flags 
 0: bootloader 0x00040000 0x00000000 0 
 1: params 0x00020000 0x00040000 0 
 2: kernel 0x00200000 0x00060000 0 
 3: root 0x0fda0000 0x00260000 0 
 
 active partition: nand0,0 - (bootloader) 0x00040000 @ 0x00000000 
 
 defaults: 
 mtdids : nand0=nandflash0 
 mtdparts: mtdparts=nandflash0:256k@0(bootloader),128k(params),8m(kernel),-(root)​

第二:在uboot的中设置命令 mtdparts default,然后利用mtd查看

改好了

OpenJTAG> mtdparts default 
OpenJTAG> mtd 
device nand0 <nandflash0>, # parts = 4 
 #: name size offset mask_flags 
 0: bootloader 0x00040000 0x00000000 0 
 1: params 0x00020000 0x00040000 0 
 2: kernel 0x00800000 0x00060000 0 
 3: root 0x0f7a0000 0x00860000 0 
 
active partition: nand0,0 - (bootloader) 0x00040000 @ 0x00000000 
 
defaults: 
mtdids : nand0=nandflash0 
mtdparts: mtdparts=nandflash0:256k@0(bootloader),128k(params),8m(kernel),-(root) ​

第三部:保存设置

OpenJTAG> save 
Saving Environment to NAND... 
Erasing Nand...Writing to Nand... done​

原理:在

/u-boot-1.1.6/common/cmd_jffs2.c​


里面我们看到把默认的分区信息分配给了mtdparts_default​

#if defined(MTDPARTS_DEFAULT) 
static const char *const mtdparts_default = MTDPARTS_DEFAULT; 
#else 
#warning "MTDPARTS_DEFAULT not defined!" 
static const char *const mtdparts_default = NULL; 
#endif​

然后在cmd_jffs2.c的函数

int do_jffs2_mtdparts(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])​

中把

mtdparts_default​

给了环境变量

setenv("mtdparts", (char *)mtdparts_default);​

参考:http://www.tuicool.com/articles/MBjAJv 

上一篇: diff-patch

下一篇: Linux kernel MTD

188 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航