Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111053
  • 博文数量: 70
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 361
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-09 12:40
文章分类

全部博文(70)

文章存档

2013年(64)

2012年(4)

2011年(2)

我的朋友

分类: LINUX

2013-09-29 15:31:28

平台:Fedora9 + mini2440(64M Flash)
交叉编译工具:arm-linux-gcc 4.4.3
 
由于本文章主要是针对内核的移植,所以有关supervivi 和文件系统的制作在此不作讲解,supervivi采用mini2440官网上的最新supervivi,由于本人的开发板是64M的,最新的linux系统下的文件系统太大下载不了,依据官网上的资料对文件系统进行剪裁后的制作的,如果你的FLASH大于64M,那你就可以直接使用光盘中的制作好的文件系统,现在主要讲解一下linux移植。
 
1)下载linux内核源代码
    获取内核的网址是:
    可以看到你里面有各种版本的Linux,下载现在要移植的Linux-2.6.32版本,如果Linux可以上网的话,可以使用wget ,命令直接在当前的目录下进行下载(建议在windows系统下下载,然后通过共享复制到linux系统下)
2) 解压linux内核源代码
    假设内核包已经存放在/opt/FriendlyARM/mini2440/目录下,终端下输入以下命令:
    cd /opt/FriendlyARM/mini2440/   切换到内核存放的目录
    tar xvzf linux-2.6.32.tar.gz    将内核解压到当前目录下
3) 修改源代码中的相应文件以适应mini2440
    (1)修改Makefile文件
        由于linux内核源代码默认的平台为X86平台,编译器默认的为gcc 所以要修改linux内核的默认平台为arm平台,编译器默认为arm-linux-,要修改这两项大约在文本的182行左右,下面两附图为修改前后的内容:
        修改前:
       
        修改后:
        
4) 测试linux内核能否顺利通过编译
     4.1 make s3c2410_defconfig   //使用缺省的配置文件,也就是SMDK2440的缺省配置文件,完成此步后,将会在linux-2.6.32下产生一个.config文件,想要查看此文件是否存在,使用"ls -a"命令.
     4.1 也可以将s3c2410_defconfig拷贝到linux-2.6.32目录下,首先切换目录到linux-2.6.32,然后执行以下命令:
     cp ./arch/arm/configs/s3c2410_defconfig  .config
     4.2 编译内核,编译的内核存放在/arch/arm/boot/目录下
         make or make zImage or make bzImage  //编译的过程比较长,大约在二十分钟左右
         (zImage和bzImage的区别:仅仅在X86平台下有区别,zImage只能编译小于512K的内核)
5) 修改机器码
      很关键的一点是,在启动内核时,是根据bootloader传入的机器码(MACH_TYPE),来决定应启动那种目标平台,2.6.29以后的版本,友善之臂申请了字节的机器码1999,在文件opt/kernel/linux-2.6.32.2/arch/arm/tools/mach-types中.
         
    由于我们在此并没有使用mini2440的平台,使用的是SMDK2440的平台,但bootloader(supervivi)内的机器码为1999,所以这里我们可以将s3c2440的机器码改为1999.
   如果传入的机器码不对的话,启动的时候一般会出现下面的错误
        Uncompressing       
        Linux................................................................................
        done, booting
        the kernel.
   运行到这就停止了.
 
5)修改时钟源

  
    在 mach-mini2440.c的第 160 行static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表原 SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz,元器件标号为 X2),如果不更改的话,串口通信将会出现乱码.
    更改后:
       
    更改前:
6) 修改NAND分区信息.
      要让内核知道nand flash的分区信息,设置成跟bootloader一致. arch/arm/plat-s3c24xx/common-smdk.c中修改smdk_default_nand_part[],注意这个一定要跟bootloader的一致.
      查看supervivi分区信息
       (1) 输入q进入goto shell of vivi
           Supervivi-> part show    显示以下分区表:
           
       (2) 按上面的信息修改分区表,修改后:
     
7) 增加Yaffs2文件系统的支持
     首先到 网站下 载一个 yaffs 文件系统的补丁,点击下图中的Download GNU tarball,下载.
     
得到补丁包后将其放到/opt/FrinedlyARM/mini2440/目录下,解压补丁,然后打上 yaffs2 的补丁,方法如下:
 tar xvfz cvs-root.tar.gz  (解压得到补丁目录 cvs)

 cd /opt/Frinedly/mini2440/cvs/yaffs2/  (进到 yaffs2 的补丁目录下)

 ./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32(执行补丁脚本,打补丁到内核中,其中/opt/FriendlyARM/mini2440/linux-2.6.32为内核源码的地址)此时到内核源码的“fs/”目录下面将会看到新添加了一个名为“yaffs2/”的目录,同时 fs/目录下面的Makefile 文件和 Kconfig 文件也添加了 yaffs2 的配置和编译条件。

8)配置内核
     

9.配置内核

  调用自带的一个默认配置单, 该配置单在内核源码的 “arch/arm/configs/”目录下面,名为:“s3c2410_defconfig”,该配置文件里面选择了几乎所有的和 S3C24XX 系列 CPU 相关的 配置选项,我们完全可以在该配置单的基础上进行配置。

 操作前提是切换到linux-2.6.32目录下进行:
 cp arch/arm/configs/s3c2410_defconfig .config  或者 make s3c2440_defconfig

 make menuconfig

(1).General setup --->

       [*] Configure standard kernel features (for small systems) --->

   选上这项,否则文件系统中的一些选项不会出现

(2). System Type ---->

      [*] S3C2410 DMA support [*] Support ARM920T processor

      S3C2440 Machines --->

              [*] SMDK2440

              [*] SMDK2440 with S3C2440 CPU module

(3).[*] Enable loadable module support --->

              [*] Module unloading

(4).Device Drivers --->

            <*> Memory Technology Device (MTD) support --->

                     [*] MTD partitioning support

                                <*> NAND Device Support --->

                                 <*> NAND Flash support for S3C2410/S3C2440 SoC

                                   [ ] S3C2410 NAND Hardware ECC //这个要去掉

                     [*] Network device support --->

                                 [*] Ethernet (10 or 100Mbit) --->

                                                <*> DM9000 support

                     < > Real Time Clock --->

(5).File systems----->

         Miscellaneous filesystems --->

                      <*>YAFFS2 file system support

(6).kernel Features----->

          [*]Use the ARM EABI to compile the Kernel

保存退出.

10)编译内核
     make zImage

   编译完成后下载内核启动即可.

阅读(1077) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~