Micro2440 内核定制实践1

来源:互联网 发布:新手怎么做淘宝刷好评 编辑:程序博客网 时间:2024/06/05 16:33

课堂实践:

我们不需要按照教材上通过一个“干净”的内核来移植Linux,而且内核源文件中也没有本节内容提及的s3c2440_defconfig。

使用Micro2440开发板附带光盘提供的内核进行移植,内核源文件为linux/linux-2.6.29-mini2440-20090708.tgz,配置文件使用内核源文件目录下的config_mini2440_t35。

首先设置交叉编译环境

  步骤1

  #cp config_mini2440_t35   .config

  # make menuconfig

  步骤2

  参照前面的内容配置内核

  步骤3

  #make   zImage

生成的zImage文件在“/arch/arm/boot/”目录下面

1、使用第7章编译的u-boot,通过nfs或者tftp启动编译好的linux内核。

2、通过nfs或者tftp启动linux内核,并指定根文件系统的位置。

Ø在u-boot中,设置bootargs

root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200

Ø启动内核:boot

  此时看到的结果,就像我们以前从flash启动开发板一样了。

  问题:为什么根文件系统是mtdblock2,而不是mtdblock3,或者mtdblock4?(提示:请查看内核启动时显示的信息)

------------------------------------------------------------

其实,主要是想通过nfs或者tftp来加载内核,之后再加载Nand flash上的根文件系统。


我这边是用nfs服务来加载内核的。

setenv bootcmd 'nfs 0x30008000 192.168.1.5:/nfs/micro2440/zImage.img;bootm'


直接 输入boot   开始下载内核并加载Nand flash上的根文件系统啦。


这里要注意的是,别忘了,编译了内核以后,要用mkimage工具处理下。

制作内核映像的命令示例:
./mkimage -n 'tekkaman' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage  zImage.img   


至于那个问题,

问题:为什么根文件系统是mtdblock2,而不是mtdblock3,或者mtdblock4?(提示:请查看内核启动时显示的信息)

之前有强调要在u-boot中,设置bootargs

root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200

往上拉,观察下内核的加载过程。发现了



我们要做的是,正确的设置U-boot,让U-boot能 正常的找到原来Nand flash上的根文件系统,也就是截图中圈住的root分区,很明显,2.6.29的内核分区情况是vivi--kernel--root,分区号从0开始,所以root分区就成了分区2了,所以才会用mtdblock2而不能用mtdblock3、mtdblock4的原因。

通过查看内核源码arch/arm/plat-s3c24xx/common-smdk.c文件,也能发现

static struct mtd_partition smdk_default_nand_part[] = { 
       [0] = {  
                .name        = "arm2440_uboot",  
                .size        = 0x00040000,  
                .offset        = 0x00000000,  
        },  
        [1] = {  
                .name        = "arm2440_kernel",  
                .offset        = 0x0004C000,  
                .size        = 0x00200000,  
        },  
        [2] = {  
                .name        = "arm2440_yaffs2",  
                .offset        = 0x0024C000,  
                .size        = 0x03DB0000,  
        }  
};