为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  partition 3"

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文件 ,将static   struct    mtd_partition  ....{}函数做如下修改,这样一来,整个Nand  Flash 被划分为4个分区。

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

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

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

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

static   struct    mtd_partition  smdk_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,

                           }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值