为S3C2440移植内核

1.修改晶振频率

S3C2440支持两种频率:12MHZ 和16MHZ.目前市面上出售的开发板大多使用的是12MHZ的晶振,而内核源代码采用的是16MHZ频率,从而产生了错误的PCLK,因此导致内核向串口输出数据时使用了错误的比特率(正确的应该是),这样在超级终端上看到的就是乱码。因此我们只须修改内核源代码中的晶振频率即可。

将内核顶层目录下的 arch /arm/mach-s3c2440/mach-smdk2440.c的第180行:s3c24xx_init_clocks(16934400);

改为:s3c24xx_init_clocks(12000000);

2.修改Nand Flash分区表

这次内核正常启动,不再出现乱码,但未能成功挂载根文件系统。出现错误如下:

VFS :Mounted root (jffs2 filesystem ).

Freeing init memroy:132k

Warning : unable to open an initial console.

Kernel panic - not syncing:No init found. Try passing init = option to kernel.

仔细查看内核出错前的输出,发现内核在Nand Flash 上创建了8个分区:

Creating 8 MTD partition on "NAND 64MiB 3,3v 8-bit " :

0x00000000 -- 0x00004000 :"Boot Agent"

0x00000000 --0x00200000 :"S3C2410 flash partition 1"

0x00400000 --0x00800000 :"S3C2410 flash partition 2"

0x00800000 --0x00a00000 :"S3C2410 flash partition3"

0x00a00000 --0x00e00000 :"S3C2410 flash partition 4"

0x00e00000 --0x01800000 :"S3C2410 flash partition 5"

0x01800000 --0x03000000 :"S3C2410 flash partition 6"

0x00300000 --0x04000000 :"S3C2410 flash partition 7"

kernel commal line : noinitrd root=/dev/mtdblock2 console = ttySAC0 rootfstype=jffs2

由上面看出,内核会到NAND Flash 的0x00400000 ~ 0x00800000 区间来挂载根文件系统,但事实上通过u-boot烧写根文件系统时,是将其烧写到Nand Flash 的0x00400000 ~ 0x04000000 这个区间。所以内核不能成功挂载根文件系统。因此,必须修改内核对Nand Flash的分区定义,让第3个分区位于0x00400000-0x04000000这个区间。

修改 arch /arm/plat-s3c24xx/common-smdk.c文件 ,将staticstruct mtd_partition....{}函数做如下修改,这样一来,整个Nand Flash 被划分为4个分区。

第一个分区大小1MB,存放u-boot;

第二个分区大小3MB,存放kernel;

第三个分区大小60MB,存放根文件系统;

第四个分区从第64M开始一直到Nand Flash的最后,可用于扩展。

staticstruct mtd_partitionsmdk_default_nand_part[ ]={

[ 0 ] = {

.name = " Bootloader ",

.size = SZ_1M,

.offset = 0,

},

[1 ] = {

.name = " kernel",

.offset = SZ_1M,

.size = SZ_2M + SZ_1M,

},

[2] = {

.name = " Root filesystem ",

.offset = SZ_4M,

.size = SZ_64M - SZ_4M,

},

[3 ] = {

.name = " Extended",

.offset = SZ_64M,

.size = MTDPART_SIZE_FULL,

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值